1.什么是容器

容器是隔离的环境中运行的一个进程,如果进程结束,容器就会停止,容器的隔离环境,拥有自己的ip地址,系统文件,主机名,进程管理

程序: 代码,软件,命令
进程:正在运行的程序
2:容器和虚拟机的区别
虚拟机: 硬件cpu支持(vt虚拟化),模拟计算硬件,走正常的开机启动
bios开机自检–根据bios启动项–读取硬盘第一个扇区grub,uefi, centos7, 加载内核,启动系统第一个进程/sbin/init systemd
容器: 不需要硬件cpu的支持,共用宿主机内核,启动容器的第一个进程
容器优势: 启动快,性能高,损耗少,轻量级
100虚拟机 100个服务 10宿主机
100容器 100个服务 6宿主机

3:docker-ce的安装
| 主机名 | 内存 | ip |
|---|---|---|
| docker01 | 2G | 10.0.0.11 |
| docker02 | 2G | 10.0.0.12 |
#安装docker-ce#
文档地址清华源码
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
systemctl enable docker
systemctl start docker
#验证
[root@docker01 yum.repos.d]# docker version
Client: Docker Engine - Community
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
Git commit: 633a0ea
Built: Wed Nov 13 07:25:41 2019
OS/Arch: linux/amd64
Experimental: false
[root@docker01 ~] # docker info
4:docker主要内容
配置镜像加速
阿里云Docker-hub
https://cr.console.aliyun.com/cn-hangzhou/mirrors
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
}
EOF
或者:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
}
docker是一个cs架构, docker主要:镜像 容器 仓库 网络 存储 监控
docker是一个软件的打包技术.
docker run -d -p 80:80 nginx:latest
run 创建并启动一个容器
-d 放后台启动
-p 端口映射
nginx:latest docker镜像名称
5:docker镜像常用命令
1-搜索镜像, 优先选官方,stars数量多 docker search
docker pull 拉取镜像(下载镜像),注意版本
docker pull centos:6.9
docker pull centos:7.5.1804
2-推送镜像(上传镜像)docker push
3-导入镜像docker load -i
例子: docker load -i docker_nginx.tar.gz
docker image import 不会导入镜像的名称和版本
批量导入
[root@docker01 ~] # for i in docker_* ;do docker load -i $i ;done
4-导出镜像docker save docker export
[root@docker ~]# docker image save nginx >/opt/nginx.tar.gz
例子:docker save centos:7 -o docker_centos7.tar.gz
5-查看镜像列表docker image ls
docker images
docker images -q
docker inspect ID/name:tag
6-删除镜像 docker rmi
[root@docker01 ~] # docker rmi xiaohe
docker rmi IID
docker rmi `docker images -q`
docker rmi $(docker images -q)
7-给镜像打标签 docker tag
[root@docker01 ~] # docker tag alpine:latest alpiune/linux:v1
[root@docker01 ~] # docker tag nginx:latest nginx/xiaoming_v1
6:docker容器的常用命令
0-.交互式启动容器+Ctrl+p+q
[root@docker ~]# docker run -it --name "testnginx" nginx /bin/bash
加ctrl+p+q
[root@docker ~]# docker attach testnginx
2.死循环
docker run --name testnginx1 -d nginx /bin/sh -c "while true ;do echo hello world; sleep 1;done"
3.服务前台运行
sshd -D
[root@docker01 ~] # nginx -g 'daemon off;'
--- 启动服务夯住
---注意 docker run == docker create + docker start
1-创建并启动容器 docker run
例子:docker run -d -it -p 80:80 nginx:latest
-d 放在后台
-p 端口映射 先宿主机——在虚拟机
-it 分配交互式的终端——i tty 进入容器
[root@docker01 ~] # docker run -it centos:6.9 /bin/bash
docker attach testnginx
2-创建容器docker create 创建容器 --name
[root@docker01 ~] # docker container create --name xx alpine
3-启动容器docker start
[root@docker01 ~] # docker start 969cd3f94570
docker run -it --name "testcentos" centos:6.9 /bin/bash
4-停止容器 docker stop
[root@docker01 ~] # docker container stop c0b867d55dec
5-重启容器 docker restart
[root@docker01 ~] # docker container restart c0b867d55dec
5-强制停止容器 docker kill
[root@docker01 ~] # docker container kill xiaoming
6-查看容器列表 docker ps 查看容器列表 -a 查看所有容器
[root@docker01 ~] # docker container ls -a
7-删除容器 docker rm
[root@docker01 ~] # docker container rm c0b867d55dec
8-只能删除,停止中的容器 -f
[root@docker01 ~] # docker container rm 66df9b35c192
9-批量删除所有容器 docker rm -f `docker ps -a -q`
[root@docker01 ~] # docker container rm `docker ps -a -q`
[root@docker01 ~] # docker container prune
----删除所有停止的容器。
10-进入正在运行的容器(分配一个新终端) docker exec attach
[root@docker01 ~] # docker container attach 01766ddc420a
--- attach 同一个终端 偷偷离开的快捷键ctrl +p,ctrl +q
----docker attach 进入正在运行的容器(使用相同的终端),
[root@docker01 ~] # docker container exec -it 01766ddc420a /bin/bash
例子: docker exec -it 容器id/容器名字 /bin/bash(/bin/sh)
docker run -it --rm -v /etc -v logs:/var/log centos /bin/produce_some_logs
11-查看日志
[root@docker01 /opt] # docker logs 513d23d69919
12-查看镜像分成
[root@docker02 /opt/docker-com] # docker history mysql:5.6
13-查看容器内部变量等相关信息
[root@docker02 /opt/docker-com] # docker inspect
14-tailf /etc/host
15--查看端口
docrker port 837958f94992
16-容器改名
docrker rename 837958f94992
17-查看容器使用资源
[root@docker01 ~] # docker stats ede8607a6c5f
18-限制容器内存
[root@docker01 ~] # docker run -dti -P --memory 50M centos6.9_nginx_v1:lates
19-更新容器内存 开机自动启动 cpu 等
[root@docker01 ~] # docker container update ede8607a6c5f --
[root@docker01 ~] # docker container update ede8607a6c5f --restart always
20-查看容器进程top
[root@docker01 ~] # docker container top zabbix_mysql-server_1
-h 容器主机名字
21-监控
[root@docker02 ~] # docker stats --no-stream
22-显示容器修改的文件
[root@docker01 ~] # docker diff 2cd7c18a471f
---------
docker镜像常用:
docker search
docker image rmi
docker image load
docker image save
docker image pull
docker image push
docker image tag
docker image ls
docker image build
docker image histroy
docker容器常用
attach 进入正在运行的容器
commit 把容器提交为镜像
cp 在宿主机和容器之间拷贝文件
create 创建容器
diff 显示容器修改的文件
exec 进入正在运行的容器
export 把容器导出成镜像压缩包(没有标签和版本)
inspect 查看属性
kill 强制停止容器
logs 查看容器的输出
ls 查看容器列表
pause 挂起容器
port 查看容器暴露的端口
prune 清理容器
rename 重命名容器
restart 重启容器
rm 删除容器
run 创建并运行容器
start 启动容器
stats 查看容器使用资源情况
stop 停止容器
top 查看容器的进程
unpause 恢复挂起的容器
update 更新容器的属性
nginx
php-fpm
/usr/sbin/sshd
tail -f /var/log/xxx.log
----介绍
docker 容器所有 --的参数都必须放在镜像名称前面
服务运行在容器中,服务出现故障,需要进入容器中排查
每一个容器启动的时候,都需要执行一条 初始命令
容器在本质上就是一个进程(初始命令)必须夯住
进程执行结束,容器退出
每一个镜像都有默认的初始命令
启动容器没有在镜像后面指定初始命令,那么容器就会执行镜像默认的初始命令
nginx镜像默认执行 nginx -g 'daemon off;' 不只是夯住了,还启动了nginx的服务
每一个容器镜像,都有自己的操作系统,centos,Ubuntu,debian,alpine
只要是使用linux内核的操作系统,都可以叫linux系统
为了保证,docker镜像体积尽可能小,很多命令都没有安装
alpine :系统体积小,docker pull下载越快
docker 是一个软件的打包技术
docker容器默认只有内网ip,没有桥接模式
启动了一个wordpress 容器,只有宿主机可以访问这个wordpress?
容器想要放在后台一直运行的化,那么容器的初始==命令,必须夯住(前台==运行),否则容器就会退出.
-d -it 必须一直纯在 必须夯住容器
每一个容器
前台运行
[root@docker01 ~] # nginx -g 'daemon off;'
/usr/sbin/php-fpm --nodaemonize
7:docker端口映射

[root@docker01 ~] # iptables -t nat -L -n
注意查看ip 不要冲突
docker run
-p 宿主机端口:容器端口
[root@docker01 ~] # docker run -d -p 80:80 nginx:latest
-p 宿主机ip1:宿主机端口:容器端口 (多个容器同时使用80端口)
[root@docker01 ~] # ifconfig eth0:1 10.0.0.13/24 up
[root@docker01 ~] # docker run -d -p 10.0.0.13:80:80 nginx:latest
[root@docker01 /opt] # docker exec -it 3825d3a22fec /bin/bash
root@2f78688d552f:/# echo "web01" > /usr/share/nginx/html/index.html
-p 宿主机ip1::容器端口 随机端口映射
[root@docker01 ~] # docker run -d -p 10.0.0.11::80 nginx:latest
-p 宿主机ip1::容器端口/udp 使用udp协议做随机端口映射
[root@docker01 ~] # docker run -d -p 10.0.0.11::80/udp nginx:latest
-p 80:80 -p 3306:3306
[root@docker01 ~] # docker run -d -p 10.0.0.12::80/udp -p 10.0.0.12::81 nginx:latest
[root@docker01 /opt] # docker run -d -p 10.0.0.11:80:80 -p 10.0.0.12:81:80 nginx:latest
-p 1111-1119:1111-1119 端口范围映射
[root@docker01 ~] # docker run -d -p 1000-1010:80-90 nginx:latest
宿主机 1000-1010 虚拟机的80-90
[root@docker01 /opt] # docker run -d -p 110-120:810-820 nginx:latest
-P 自动随机端口映射 大P
[root@docker01 ~] # docker run -d -P nginx:latest
8:docker数据卷
[root@docker01 ~] # mkdir /xiaoniao
[root@docker01 ~] # unzip xiaoniaofeifei.zip -d /xiaoniao/
[root@docker01 /opt] # docker run -d -P -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest
[root@docker01 /opt] # docker run -d -p 80:80 -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest
[root@docker01 /opt/html] # docker run -P -d -v /opt/html:/usr/share/nginx/html nginx:latest
-----------------
1-只指定了容器 持久化
--默认
[root@docker01 /opt/html] # docker run -d -P -v /usr/share/nginx/html nginx:latest
--指定目录名字
[root@docker01 /opt] # docker run -d -P -v xiaohe:/usr/share/nginx/html nginx:latest
[root@docker01 /opt] # docker volume ls
DRIVER VOLUME NAME
local 2f9a47cc8091b1f170a1db9b47820d4e7705108e2d07e7bf284481a8ea9f3a9f
local xiaohe
2---卷的位置
---1
[root@docker01 ~] # docker inspect xiaohe
--2
[root@docker01 ~] # docker inspect 03f3f1e35498 |grep -i Volume
"VolumeDriver": "",
"VolumesFrom": null,
"Type": "volume",
"Source": "/var/lib/docker/volumes/9ce379af0df77c90b142fad750471466544db01b33780eeabf915ee2e8f21467/_data",
"Volumes": {
-----
3-- 固定卷的名字
--自动生成
[root@docker01 /opt/html] # docker run -d -P -v /usr/share/nginx/html nginx:latest
--带名字目录
[root@docker01 ~] # docker run -d -P -v xiaohe:/usr/share/nginx/html nginx:latest
--volumes-from 跟某一个容器挂载所有相同的卷
-- 记得是大P是随机端口
[root@docker01 ~] # docker run -d -P --volumes-from c6d9be27f2c4 nginx:latest
--
[root@docker01 ~] # docker inspect c6d9be27f2c4 |grep -i Volume
[root@docker01 ~] # docker inspect cac8fa5ba854 |grep -i Volume
-v 文件对文件++目录对目录————————
-v 宿主机绝对目录:容器目录 绝对路径不然,docker 会当成那个卷名字
-v 容器目录 #创建一个随机卷,来持久化容器的目录下的数据
-v 卷名:容器目录 创建一个固定名字的卷,来持久化容器的目录下的数据
--volumes-from 跟某一个容器挂载所有相同的
8.1数据卷容器
docker run -it --name "httpd_volumes" -v /opt/Volume/httpd_volume/conf:/usr/local/apache2/conf -v /opt/Volume/httpd_volume/html:/usr/local/apache2/htdocs centos:6.9 /bin/bash
ctrl p q
拷贝数据到数据卷中
/opt/Volume/httpd_volume/html
/opt/Volume/httpd_volume/conf
docker cp DOCKERNAME:/opt/a.txt /opt
使用数据卷容器
docker run -d -p 8085:80 --volumes-from httpd_volumes --name "http8085" httpd
docker run -d -p 8086:80 --volumes-from httpd_volumes --name "http8086" httpd
8.2-使用数据卷容器进行备份(了解一下)
docker run --volumes-from httpd_volumes --name "httpd_volumesbak" --rm -v /backup:/backup:rw centos:6.9 tar cvf /backup/conf.tar /usr/local/apache2/conf
docker run --volumes-from centosv1 --name "centosrestore" --rm -v /backup:/backup:rw centos tar xvf /backup/conf.tar
小练习: 只启动一个nginx容器,要求访问80端口,出现nginx默认欢迎首页,访问81端口,出现小鸟飞飞.
默认80:端口
--1 方案1
--启动容器代码目录挂载到:opt下,默认欢迎,否则就是小鸟
[root@docker01 /opt] # docker run -d -p80-81:80-81 -v /opt/xiaoniao:/opt/xiaoniao nginx:latest
--进入容器
[root@docker01 /opt] # docker exec -it 292cc15d53c7 /bin/bash
cat >>xiaoniao.conf<<EOF
server {
listen 81;
server_name localhost;
location / {
root /opt/xiaoniao;
index index.html index.htm;
}
}
EOF
[root@docker01 /opt]#docker restart 292cc15d53c7
2---cp 方案
[root@docker01 /opt] # docker run -d -p 82-83:80-81 -v /opt/xiaoniao:/opt/xiaoniao nginx:latest
--本地写入配置文件
[root@docker01 /opt] # cat >>xiaoniao.conf<<EOF
> server {
> listen 81;
> server_name localhost;
> location / {
> root /opt/xiaoniao;
> index index.html index.htm;
> }
> }
> EOF
--配置文件复制到容器
[root@docker01 /opt] # docker cp xiaoniao.conf 513d23d69919 :/etc/nginx/conf.d
[root@docker01 /opt] # docker restart 513d23d69919
3-方案--直接挂着—目录对目录文件对文件
vim xiaoniao.conf
server {
listen 81;
server_name localhost;
location / {
root /opt/xiaoniao;
index index.html index.htm;
}
}
[root@docker01 /opt] # docker run -d -p 84-85:80-81 -v /opt/xiaoniao:/opt/xiaoniao -v /opt/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf nginx:latest
9:手==动制作docke==r镜像
制作一个基于centos6系统的nginx镜像(单服务)
1:启动一个纯净的centos:6.9容器,安装nginx-启动并且进入
[root@docker01 /opt] # docker run -it -p 80:80 centos:6.9 /bin/bash
[root@cd38de25eb84 /]# 配置源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
[root@cd38de25eb84 /]# yum install nginx -y
[root@53bd7ae41556 nginx]# nginx -g 'daemon off'
2:把安装好服务的容器,提交为镜像
docker container commit eb109f194821 centos6.9_nginx:v1
3:测试镜像的功能 必须夯住,生命周期
docker run -d -p 82:80 centos6.9_nginx:v1 nginx -g 'daemon off;'
[root@docker01 /opt] # curl -I 10.0.0.11:81
制作一个基于centos6系统的kod网盘的镜像(多服==务)kodexplorer==
1:启动一个centos6.9_nginx:v1,再安装php
[root@docker01 /opt] # docker run -it -p 88:80 -p 1022:22 centos6.9_nginx_v1 /bin/bash
2--容器内安装
[root@5ac3b5074cf3 /]#yum install php-fpm php-gd php-mbstring -y
3--修改用户 统一用户
[root@5ac3b5074cf3 /]#vi /etc/php-fpm.d/www.conf
user = nginx
group = nginx
4-写入 测试配置文件
[root@5ac3b5074cf3 /]#vi /etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
root /code;
location / {
index index.php index.html index.htm;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
5--创建代码目录
[root@5ac3b5074cf3 /]# mkdir /code
#宿主机操作--代码传递
[root@docker01 ~] # docker cp kodexplorer4.40.zip f12048d09d53:/code
容器操作
[root@5ac3b5074cf3 /]#yum install unzip -y
[root@5ac3b5074cf3 /]#unzip kodexplorer4.40.zip
[root@5ac3b5074cf3 /]#chown -R nginx:nginx .
6-测试访问--
[root@5ac3b5074cf3 /]#service php-fpm start
[root@5ac3b5074cf3 /]#cd /etc/nginx/conf.d/
7--写入脚本
[root@5ac3b5074cf3 /]#vi /init.sh
#!/bin/bash
service php-fpm start
nginx -g 'daemon off;'
8--:把安装好服务的容器,提交为镜像
[root@docker01 ~] # docker commit 47208e3e3796 kod:v2
9--:测试镜像的功能
[root@docker01 ~] # docker run -d -p 83:80 kod:v2 /bin/bash /init.sh
制作一个基于centos7系统的==nginx+sshd双==服务镜像
--1 查看包名字
[root@docker01 ~] # netstat -lnutp |grep ssh
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6863/sshd
[root@docker01 ~] # which sshd
/usr/sbin/sshd
[root@docker01 ~] # rpm -qf /usr/sbin/sshd
penssh-server-7.4p1-16.el7.x86_64
--2 进入容器,安装软件
[root@docker01 ~] # docker run -it -p 89:80 -p 1023:22 centos6.9nginx__ssh_v1 /bin/bash
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum install nginx -y
yum install openssh-server -y
--3 配置服务密钥连接
[root@4c53446c7198 /]# service sshd restart
Stopping sshd: [FAILED]
Generating SSH2 RSA host key: [ OK ]
Generating SSH1 RSA host key: [ OK ]
Generating SSH2 DSA host key: [ OK ]
Starting sshd: [ OK ]
yum install initscripts -y #忽略
/usr/sbin/sshd-keygen
--4设置密码连接
echo '123456'|passwd --stdin root
--5 提交
[root@docker01 /opt] # docker commit 4c53446c7198 centos6.9nginx__ssh_v1
--6 脚本 启动
#!/bin/bash
/usr/sbin/sshd
nginx -g 'daemon off;'
--7 提交最后的版本
[root@docker01 /opt] # docker commit 098b1d220b55 centos6.9_nginx_sshd_v2
--8 启动
[root@docker01 /opt] # docker run -d -p 81:80 -p 1022:22 centos6.9_nginx_sshd_v2 /bin/bash /init.sh
--9 测试
[root@docker01 /opt] # curl -I 10.0.0.11:81
[root@docker01 /opt] # ssh root@10.0.0.11 -p1022
/usr/sbin/sshd -D
vi /init.sh
10:自动制作docker镜像
自动构建docker镜像的需要一个dockerfile文件,一个镜像一个dockerfile文件镜像: 中药
dockerfile: 配方
dockerfile常用指令
FROM 基础镜像
RUN 制作镜像过程中需要的执行命令(安装服务)
CMD 容器启动的时候执行的初始命令,容易被替换(启动服务)
ENTRYPOINT 容器启动的时候执行的初始命令,不能被替换,如果同时使用CMD和ENTRYPOINT,cmd命令将作为ENTRYPOINT命令的参数
ADD 把dockerfile当前目录下的文件拷贝到容器中(自动解压tar包)
COPY 把dockerfile当前目录下的文件拷贝到容器中(不解压tar包)
WORKDIR 指定容器的默认工作目录 指定某进入系统,进去那个目录
EXPOSE 镜像要暴露的端口 自动暴露端口 80 22
VOLUME 持久化卷 (自动化创建随机的卷)——启动一次创建一次
VOLUME /opt/dockerfile/ssh
ENV 环境变量(ssh的密码,数据库的密码)——密码
LABEL 镜像的属性标签
MAINTAINER 管理者标识
FROM 基础镜像 wget https://mirror.tuna.tsinghua.edu.cn/lxc-images/images/alpine/3.11/amd64/default/20200526_13%3A00/rootfs.tar.xz根据dockerfile自动构建镜像的思路
a:手动制作docker镜像,记录历史命令
b:根据历史命令编写dockerfile文件
c:docker build构建docker镜像
d:测试镜像的功能
dockerfile单服务例子1:
[root@docker01 /opt/dockerfile/centos_6.9_nginx] # mkdir /opt/dockerfile/
[root@docker01 /opt/dockerfile] # mkdir centos_6.9_nginx
[root@docker02 /opt/dockerfile/centos6.9] # cat dockerfile
FROM centos:6.9
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum install nginx -y
EXPOSE 80
CMD ["nginx","-g","daemon off;
--上传构建
[root@docker01 /opt/dockerfile/centos_6.9_nginx] # docker image build -t centos6.9_nginx_v2 .
[root@docker02 /opt/dockerfile/centos6.9] # docker image build -t centos6.9_nginx:v1 /opt/dockerfile/centos6.9/
--进入临时容器
[root@docker02 /opt/dockerfile/centos6.9] # docker run -it e7807ea14f34 /bin/bash
[root@docker01 /opt/dockerfile/centos_6.9_nginx] # docker run -d -P centos6.9_nginx_v4
==dockerfile多服务例==子2云盘 可道云
1- 使用基于刚刚的容器搭建nginx 搭建可道云
[root@docker02 /opt/dockerfile] # mkdir kod
--配置文件
[root@docker01 /opt/dockerfile/kod] # docker cp cd38de25eb84:/etc/xxx .
[root@docker02 /opt/dockerfile/kod] # ls
default.conf dockerfile init.sh kodexplorer4.40.zip www.conf
2-编写dockerfile
[root@docker02 /opt/dockerfile/kod] # cat dockerfile
FROM centos6.9_nginx:v1
RUN yum install php-fpm php-gd php-mbstring -y
ADD www.conf /etc/php-fpm.d/www.conf
ADD default.conf /etc/nginx/conf.d/default.conf
RUN mkdir /code
RUN yum install unzip -y
ADD kodexplorer4.40.zip /code
RUN unzip /code/kodexplorer4.40.zip -d /code/
RUN chown -R nginx:nginx /code
ADD init.sh /init.sh
CMD ["/bin/bash","init.sh"]
EXPOSE 80
3--编写脚本
[root@docker02 /opt/dockerfile/kod] # cat init.sh
#!/bin/bash
service php-fpm start
nginx -g 'daemon off;'
4--启动构建镜像
[root@docker02 /opt/dockerfile/kod] # docker image build -t centos_kod:v1 /opt/dockerfile/kod/
5--启动容器测试
[root@docker02 /opt/dockerfile/kod] # docker run -it -d -p 82:80 centos_kod:v1
第二方案
FROM centos6.9_nginx:v1
RUN yum install php-fpm php-gd php-mbstring -y
ADD www.conf /etc/php-fpm.d/www.conf
ADD default.conf /etc/nginx/conf.d/default.conf
RUN mkdir /html
WORKDIR /html
RUN curl -o kodexplorer4.40.zip http://192.168.19.200/191127/kodexplorer4.40.zip
RUN yum install unzip -y
RUN unzip kodexplorer4.40.zip
RUN chown -R nginx:nginx .
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
vi /init.sh
#!/bin/bash
[root@docker01 /opt/dockerfile/kod] # docker cp cd38de25eb84:/etc/xxx .
service php-fpm start
nginx -g 'daemon off;'
dockerfile使用环境变量的例子:
1--创建基础目录
[root@docker02 /opt/dockerfile] # mkdir ssh_
2--编写dockerfile
[root@docker02 /opt/dockerfile/ssh_] # cat dockerfile
FROM centos:6.9
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum install nginx -y
RUN yum install openssh-server -y
ENV SSH_PASS 12345
RUN service sshd restart
EXPOSE 80
EXPOSE 22
ADD init.sh /init.sh
ENTRYPOINT ["/bin/bash","/init.sh"]
3--编写配置文件
[root@docker02 /opt/dockerfile/ssh_] # cat init.sh
#!/bin/bash
if [ -z $SSH_PASS ];then
SSH_PWD=$1
fi
echo $SSH_PASS|passwd --stdin root
nginx
/usr/sbin/sshd -D
4--开始构建
[root@docker02 /opt/dockerfile/ssh_] # docker image build -t centos_sshdzd:v1 .
5-启动变量
[root@docker02 /opt/dockerfile/ssh_] # docker run -d -p 88:80 -p 2020:22 --env "SSH_PASS=1" centos_sshdzd:v1
6-测试
[F:\~]$ ssh root@10.0.0.12 2020
FROM centos:7
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install nginx openssh-server initscripts -y
RUN /usr/sbin/sshd-keygen
ADD init.sh /init.sh
ENTRYPOINT ["/bin/bash","/init.sh"]
vi init.sh
#!/bin/bash
if [ -z $SSH_PWD ];then
SSH_PWD=$1
fi
echo $SSH_PWD|passwd --stdin root
nginx
/usr/sbin/sshd -D
docker run --env 声明环境变量 覆盖 dockerfile ENV 环境变量
11:docker镜像的分层(复用,节省空间)


12:dockerfile的优化
a: 使用体积小的linux镜像alpine
b:尽可能的清理无用的缓存文件(尽可能把多个RUN合并)
c:修改dockerfile的时候,尽可能把修改的内容放在最后
d:使用.dockerignore忽略构建docker镜像时,不需要的文件
构建wordpress-docker_file
[root@docker01 /opt/worldpess] # cat dockerfile
FROM centos:7
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install nginx mariadb-server php-fpm php-mysql -y
RUN mysql_install_db --user=mysql --defaults-file=/etc/my.cnf
RUN tmp=`nohup mysqld_safe --defaults-file=/etc/my.cnf &` && sleep 5 && \
mysql -e "create database wordpress;" && \
mysql -e "grant all on wordpress.* to wordpress@localhost identified by '123456';"
ADD www.conf /etc/php-fpm.d/www.conf
ADD nginx.conf /etc/nginx/nginx.conf
RUN mkdir /code
WORKDIR /code/
ADD wordpress-4.2.2-zh_CN.zip .
RUN yum install unzip -y
RUN unzip wordpress-4.2.2-zh_CN.zip
RUN mv wordpress/* .
RUN chown -R nginx:nginx .
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
--构建
[root@docker01 /opt/worldpess] # docker build -t ceos7_wordp .
---启动
[root@docker01 /opt/worldpess] # docker run -it -p 80:80 ceos7_wordp:latest /bin/bash
使用alpine 构建nginx
docker run -it alpine:latest /bin/sh
sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
apk update
apk add nginx
13:==容器间==的互联==–link==
拆开使用-无法指定ip 地址
容器之前默认网络通。但是ip 无法指定
所已有了 –link 可以直接互联,可以取别名
原因加入了hosts 的解析
[root@7bbae45f49e1 /]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 web_2 b70dd70f8b1a hopeful_newton
172.17.0.3 7bbae45f49e1
docker run –link 正在运行容器的名字(单方向)
docker run --link可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据,如源容器的环境变量。
--link的格式:
--link <name or id>:alias
其中,name和id是源容器的name和id,alias是源容器在link下的别名。
[root@docker02 /opt/docker-com] # docker run -it centos6.9_nginx /bin/bash
[root@docker02 /opt/docker-com] # docker run -it --link b70dd70f8b1a:web_2 centos6.9_nginx:v1 /bin/bash
--可以直接ping
docker run -d -p 80:80 nginx
docker run -it --link quirky_brown:web01 qstack/centos-ssh /bin/bash
ping web01
lb ---> nginx 172.17.0.4 --> db01 172.17.0.3
--> nfs01 172.17.0.2
使用docker运行zabbix-server
上传镜像 批量导入
for i in `ls *.tar.gz`;do docker load -i $i ; done
#-启动mysql
docker run --name mysql-server -it \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin
#-启动zabbix
docker run --name zabbix-java-gateway -t \
-d zabbix/zabbix-java-gateway:latest
#启动zabbix 服务端 link 数据库等
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--link mysql-server:mysql \
--link zabbix-java-gateway:zabbix-java-gateway \
-p 10051:10051 \
-d zabbix/zabbix-server-mysql:latest
#启动zabbix 服务端 link 下去
docker run --name zabbix-web-nginx-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--link mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-p 80:80 \
-d zabbix/zabbix-web-nginx-mysql:latest
单机
14:单机版的容器编排==compose==
yum install docker-compose -y(需要epel源)
用于批量启动容器停止从启
用于批量管理
---curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
--yum install docker-compose -y
版本不同语法格式不一样 v1 v2 v3
[root@docker01 /opt/docker-compos/zabbix] # mkdir /opt/docker-compos
--一个项目一个docker-compos
[root@docker01 /opt/docker-compos] # mkdir zabbix/
[root@docker01 /opt/docker-compos/zabbix] # vim docker-compose.yml
常用命令 第一次启动 up
--启动 后台
[root@docker01 /opt/docker-compos/zabbix] # docker-compose up -d
--停止
[root@docker01 /opt/docker-compos/zabbix] # docker-compose stop
--启动
[root@docker01 /opt/docker-compos/zabbix] # docker-compose start
--从启
[root@docker01 /opt/docker-compos/zabbix] # docker-compose restart
-f 指定配置文件
--停掉删除
[root@docker01 /opt/docker-compos/zabbix] # docker-compose down
-- 从启某一个容器
[root@docker01 /opt/docker-compos/zabbix] # docker-compose restart mysql-server
Restarting zabbix_mysql-server_1 ... done

version: '3'
services:
mysql-server:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_pwd
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_pwd
command: --character-set-server=utf8 --collation-server=utf8_bin
zabbix-java-gateway:
image: zabbix/zabbix-java-gateway:latest
restart: always
zabbix-server:
depends_on:
- mysql-server
image: zabbix/zabbix-server-mysql:latest
restart: always
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_pwd
MYSQL_ROOT_PASSWORD: root_pwd
ZBX_JAVAGATEWAY: zabbix-java-gateway
ports:
- "10051:10051"
zabbix-web-nginx-mysql:
depends_on:
- zabbix-server
image: zabbix/zabbix-web-nginx-mysql:latest
ports:
- "80:80"
restart: always
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: zabbix_pwd
MYSQL_ROOT_PASSWORD: root_pwd
方案二
version: "3"
services:
db:
image: mysql:5.7
volumes:
- /var/lib/mysql:/var/lib/mysql
#自动重启
restart: always
environment:
#指定MySQL的root账号初始密码
MYSQL_ROOT_PASSWORD: 123456
#指定容器启动后要创建的数据库
MYSQL_DATABASE: wordpress
#指定容器在启动后要创建的普通用户账号,该账号有远程登录的权限
MYSQL_USER: tom
#为用户设置密码
MYSQL_PASSWORD: 123456
wordpress:
depends_on:
- db
# image: 10.30.12.55/docker/wordpress
image: c39f75d30bcd
ports:
- "8000:80"
restart: always
environment:
#指定要使用的数据库名
WORDPRESS_DB_NAME: wordpress
#指定要MySQL容器的ip和端口
WORDPRESS_DB_HOST: db:3306
#指定登录MySQL的账号
WORDPRESS_DB_USER: tom
#指定登录MySQL的密码
WORDPRESS_DB_PASSWORD: 123456
docker-compose up -d 启动服务
docker-compose down 停止服务
---------
[root@docker02 ~] # docker run --name mysql -e MYSQL_ROOT_PASSWORD=admin -p 3306:3306 -d mysql:5.6
6f6c2dfb74c6b7f34348e241a1a6b814afba4aacc39067ae89bbebb5273d11dd
[root@docker02 ~] # docker run -itd --name wordpress -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_PASSWORD=admin -p 80:80 --link mysql:mysql -d wordpress
d42450049b2fcaebed2bf346a0968859d15c1c548cba37f5044ff6690df3a58a
14.1-游戏架构

服务端:内存4G+
桥接
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=eth0
DEVICE=eth0
ONBOOT=yes
~
~
[root@kvm ~] # curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
bash 源
安装docker
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce docker-compose -y
systemctl enable docker
[root@kvm /etc/yum.repos.d] # systemctl start docker
上传服务器包
fuck.tar
[root@kvm ~] # tar xf fuck.tar.gz -C /usr/local/games/
[root@kvm /etc/yum.repos.d] # cd /usr/local/games/fuck/
[root@kvm /usr/local/games/fuck] # ./start
af6bf1987c2e: Loading layer [==================================================>] 201.5MB/201.5MB
1be27ef8f857: Loading layer [==================================================>] 608.7MB/608.7MB
修改游戏服务器列表信息中的ip地址
[root@kvm ~] # vi /usr/local/games/fuck/www/tianlong3D/conf/serverlist/serverlist.txt
[root@kvm ~] # cat /usr/local/games/fuck/www/tianlong3D/conf/serverlist/serverlist.txt
Id Desc Name Ip Port State Type GroupName
INT STRING STRING STRING INT INT INT STRING
#预留
# 描述 服务器名 IP 端口 状态 状态 顺畅0 拥挤1 火爆2 维护3 类型 不推荐0 推荐1 组名
19901 混服公测服 天上人间 192.168.1.1 2231 1 0 1--10
19901 混服公测服 天上上地狱 192.168.1.1 2231 1 0 1--10
客户端:
安装win-jdk 1.8
打开ApkIDE最新3.3.3少月增强版
反编译apk包
C:\Program Files\Java\jdk1.8.0_66\
选着项目
编译成功打开目录
G:\小明同学作业表\文件脚本网站\天龙八部\ApkIDE最新3.3.3少月增强版\Work\com.mto.sdk.tlbb.sm
安装win-jdk 1.8
打开ApkIDE最新3.3.3少月增强版
反编译apk包
修改assets\config.properties文件8,13,14行
修改res\values\strings.xml文件9,10,17,18服务器地址
充值元宝
http://192.168.1.111:81/zt/gm.php
http://IP:81/zt/gm.php
gmcode默认123456
[root@kvm /usr/local/games/fuck] # docker exec -it 9a8eb5c45728 /bin/bash
root@9a8eb5c45728:/# mysql -uroot -p12345
mysql> use mtlbbdb_19900
mysql> select * from t_char \G;
mysql> update t_char set leve1=80 where aid=17
mysql> update mtlbbdb_19900.t_char set level='80' where aid=17;
15:私有仓库docker-registry
https://oldqiang.com/archives/350.html 参考文献
#启动私有仓库
registry.tar.gz
[root@docker01 ~] # docker image load -i registry.tar.gz
[root@docker01 ~] # docker run -d -p 5000:5000 --restart=always --name registy -v /opt/myregistry:/var/lib/registry registry
#镜像地址
nginx:1.15 官方仓库的官方镜像
nginx/nginx:1.15 官方仓库的用户镜像
daocloud.io/nginx/nginx:1.15 私有仓库的镜像
#上传镜像
docker tag alpine:3.9 10.0.0.11:5000/alpine:3.9
docker image push 10.0.0.11:5000/alpine:3.9
#第一次上传镜像会报错
Get https://10.0.0.11:5000/v2/: http: server gave HTTP response to HTTPS client
这个私有仓库,用的是http协议
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.11:5000"]#信任该仓库
}
systemctl restart docker
docker image push 10.0.0.11:5000/alpine:3.9
#下载镜像
docker image pull 10.0.0.11:5000/alpine:3.9
注意名字浅醉域名ip
[root@docker02 ~] # docker tage b7b28af77ffe dockerluhong/alpine:v1
[root@docker02 ~] # docker push dockerluhong/alpine:v1
https://oldqiang.com/archives/350.html
# du -smh *
查看镜像列表
使用浏览器访问:
http://10.0.0.11:5000/v2/_catalog
15.1官方仓库
1--注册一个账户
https://hub.docker.com/repositories
2-登入docker 用户名密码
[root@docker01 /etc/docker] # docker login
3-标签写入
[root@docker01 /etc/docker] # docker tag 0c7c1b331e52 dockerluhong/alpine_nginx:v1
4-推送文件
[root@docker01 /etc/docker] # docker push dockerluhong/alpine_nginx:v1
本地仓库加安全认证
生成密码:
yum install httpd-tools -y
mkdir /opt/registry-auth/ -p
htpasswd -Bbn oldguo 123 > /opt/registry-auth/htpasswd
重新启动带有秘钥功能的registry容器
docker rm -f `docker ps -aq`
docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth/ -v /opt/registry:/var/lib/registry --name register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
push镜像,需要进行login
[root@oldboy ~]# docker login 10.0.0.100:5000
Username: oldguo
Password:
16: 企业级私有仓库==harbor(==docker-compose)
#下载安装器
https://github.com/goharbor/harbor/releases/download/v1.10.0/harbor-offline-installer-v1.10.0.tgz
#解压
[root@docker01 opt]# tar xf harbor-offline-installer-v1.8.0.tgz
#修改配置文件
cd harbor
vim harbor.yml
5 hostname: 10.0.0.12
25 harbor_admin_password: 123456
#执行安装脚本
./install.sh
yum -y install docker-conpre
admin 123456
要么域名要么ip 用 docker-conpre 启动的 80端口
为harbor配置https证书
可以使用443端口:可以推送镜像
--1上传证书
[root@docker02 /opt/cert] # mkdir /opt/cert/
--2配置好路经
#修改harbor.yml
#配置域名
hostname: blog.oldqiang.com
#配置证书
https:
port: 443
certificate: /opt/certs/Nginx/1_blog.oldqiang.com_bundle.crt
private_key: /opt/certs/Nginx/2_blog.oldqiang.com.key
#重新执行安装脚本
[root@docker02 ~/harbor] # ./install.sh
--电脑端解析域名端口
--宿主机解析 不然失败
--访问测试
--------------------------------
5 hostname: blog.oldqiang.com
6
7 # http related config
8 #http:
10 # port: 80
11
# https related config
12 # https related config
13 https:
14 port: 443
15 certificate: /opt/cert/Nginx/1_blog.oldqiang.com_bundle.crt
16 private_key: /opt/cert/Nginx/2_blog.oldqiang.com.key
17
--------------
本地解析 虚拟机解析
--登录 https://blog.oldqiang.com/
[root@docker02 ~/harbor] # docker login blog.oldqiang.com
[root@docker01 /etc/docker] # docker tag nginx:latest blog.oldqiang.com/nginx:v1
--标签推送
[root@docker01 /etc/docker] # docker tag nginx:latest blog.oldqiang.com/library/ngin:v1
[root@docker01 /etc/docker] # docker push blog.oldqiang.com/library/ngin:v1
--存放密码的位置
[root@docker01 /etc/docker] # cat /root/.docker/config.json
bash 64 可揭秘
迁移
迁移位置 系统 仓库管理
系统 同步管理


17:docker基础网络
四种基础网络类型
bridge 默认类型 NAT模式 docker run 没有指定--network 172.17.0.x/16
host host类型,使用宿主机网络,网络性能最高 容易端口冲突 主机名字:ip 地址一样
container 容器类型。使用其他容器共用网络,k8s中使用
none 没有网络,上不了外网
[root@docker01 ~] # docker run -it --network host centos:7 /bin/bash
[root@docker01 /]# 主机名字都会一样 注意已什么角色进入
[root@docker01 ~] # docker run -it --network none alpine:latest /bin/sh
[root@docker01 ~] # docker inspect host
--3 container
[root@docker01 ~] # docker run -d centos6.9_kod:v3
[root@docker01 ~] # docker run -it --network container:3351eab0ee79 centos:6.9 /bin/bash
基于刚刚的容器启动同镜像同网络 共用端口 ip 地址同上个
创建自定义网络 ==bridge==
使用自定义网络启动容器
[root@docker02 ~/harbor] # docker inspect harbor_harbor
查看用 docker.compose.network": "harbor", 自动创建的网络
docker network create -d bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 oldqiang
如果被使用了就报错
docker network create -d bridge --subnet 172.30.0.0/16 --gateway 172.30.0.1 oldqiang
使用自定义网络启动容器
[root@docker02 ~] # docker run -it --network oldqiang centos:6.9 /bin/bash
[root@docker02 ~/harbor] # docker network ls
NETWORK ID NAME DRIVER SCOPE
e0caf7c74c5b bridge bridge local
9ee098ee4645 docker_gwbridge bridge local
63021e4c7330 dockercom_default bridge local
a5c9f376d7a8 harbor_harbor bridge local
731a4450c82e host host local
b45e10c3daa9 macvlan_1 macvlan local
8d56426c3041 none null local
c05d3caf2a0a oldqiang bridge local
18:跨宿主机容器间的通讯之macvlan
==macvlan类似与虚拟机的桥接网络==不能自动分配地址
#创建网络——01-02任何一个节点创建网络。都会同步网络
docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
创建 网络 macvlan 地址范围 网关 桥接到eth0 只能桥接一次
#启动容器
[root@docker01 ~] # docker run -it --network macvlan_1 --ip 10.0.0.105 alpine:3.9
[root@docker02 ~] # docker run -it --network macvlan_1 --ip 10.0.0.106 alpine:3.9
网络模式 指定ip 地址
注意容器主机名字不可以相同
可以直接ping 通
macvlan 非常类似kvm虚拟机的桥接网络,不能自动分配ip地址,每次docker run启动容器,需要手动指定ip
19:跨宿主机容器间的通讯之==overlay==
| docker01 | docker02 | docker03 |
|---|---|---|
| overlay | overlay | consul |
consul 数据库 保管ip 地址 存储ip地址分配和节点
每个数据库都要去注册进去成为节点,集中起来管理方案
加入 overlay 网络 就属于同一个集群,后面创建网络自动加入
1--安装doker-ce 更改源
[root@docker03 ~] # wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
[root@docker03 ~] # sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
[root@docker03 ~] # yum install docker-ce -y

1--上传安装包
[root@docker03 ~]# ocker_progrium_consul.tar.gz
[root@docker03 ~] # docker03上: consul存储ip地址的分配
[root@docker03 ~] # docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
参数介绍
-bootstrap:用来控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader,在一个节点的模式下这种方式很重要,否则在集群中的一致性不能保证,不推荐在集群中应用这个标识
-server:定义agent运行在server模式还是Client模式,提供时即为Server端,每个集群至少有一个server并且每台机器上不要超过5个dataceter.所有服务器采用一致性算法Raft保证数据一致,确保在故障的情况下的可用性。
-------------------------------------------------------
2--访问 http://10.0.0.13:8500/
3-docker01、02上:
[root@docker03 ~] # vim /etc/docker/daemon.json
{
"cluster-store": "consul://10.0.0.13:8500", #集群信息
"cluster-advertise": "10.0.0.11:2376"#节点信息
}
-----
4-systemctl restart docker
----
5-加入文件解析
-------
10.0.0.11 docker01
10.0.0.12 docker02
-----------
2)创建overlay网络
docker01--一次就好
docker network create -d overlay --subnet 172.26.0.0/16 --gateway 172.26.0.1 ol1
创建网卡 名字 段位 网关 名字
3)启动容器测试
[root@docker01 ~] # docker run -it --network ol1 --name oldboy01 alpine:latest /bin/sh
[root@docker02 ~] # docker run -it --network ol1 --name oldboy02 alpine:latest /bin/sh
每个容器有两块网卡,eth0实现容器间的通讯,eth1实现容器访问外网
# 全局网络 overlay 一个节点有全部有 网络主机名不能 一样

20:docker容器的监控

0--#客户端节点
#安装数据采集器 https://prometheus.io/ 谷歌公司
采集到的数据,普罗米修斯收集数据找他们要数据-自带时间序列数据库-报警
出图展示 #grafana
[root@docker02 ~/harbor] # docker stats --no-stream
1--安装01-02-安装
docker_monitor_node.tar.gz
[root@docker01 /opt] # docker load -i docker_monitor_node.tar.gz 两个镜像
[root@docker02 ~] # docker load -i docker_monitor_node.tar.gz
2--启动node-exporter 挂载采集信息 11 12
[root@docker01 /opt] # docker run -d -p 9100:9100 -v "/:/host:ro,rslave" --name=node_exporter quay.io/prometheus/node-exporter --path.rootfs /host
启动cadvisor 11 12 9100端口
[root@docker02 ~] # docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest
3--prometheus节点 3 主要节点
安装prometheus和grafana
[root@docker03 ~] # tar xf prometheus-2.12.0.linux-amd64.tar.gz
cd prometheus-2.12.0.linux-amd64/
[root@docker03 ~/prometheus-2.12.0.linux-amd64] # vim prometheus.yml
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'cadvisor'
static_configs:
- targets: ['10.0.0.11:8080','10.0.0.12:8080']
- job_name: 'node_exporter'
static_configs:
- targets: ['10.0.0.11:9100','10.0.0.12:9100']
[root@docker03 ~/prometheus-2.12.0.linux-amd64] # ./prometheus --config.file="prometheus.yml" &
4--#安装grafana 出图
yum localinstall grafana-6.3.3-1.x86_64.rpm -y
systemctl start grafana-server.service
systemctl enable grafana-server.service
#访问grafana http://IP:3000,默认账号admin:admin
新建数据源--导入dashboard模板
10.0.0.13:9090




