IP地址 | 主机名 | 节点 |
---|---|---|
192.168.1.11 | node1 | master |
192.168.1.22 | node2 | worker |
192.168.1.33 | node3 | worker |
首先开启路由转发并关闭防火墙
[root@localhost ~]# vim /etc/sysctl.conf
[root@localhost ~]# sysctl –p
[root@node1 ~]# iptables -F
[root@localhost ~]# systemctl restart network
1. Dockerfile制作基于centos的nginx镜像
构建nginx镜像
[root@localhost ~]# docker build -t nginx_centos http://pan.shuaiguoer.com/Dockerfile/nginx
2. 自定义镜像仓库
搭建registry私有仓库
[root@localhost ~]# docker pull registry:2
修改docker配置文件
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service
编辑docker.server配置文件,增加:
--insecure-registry 192.168.1.11:5000
拷贝配置文件到另一台主机
[root@localhost ~]# scp /usr/lib/systemd/system/docker.service 192.168.1.22:/usr/lib/systemd/system/
重启docker服务(在两台主机上)
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker.service
修改标签
[root@localhost ~]# docker tag nginx_centos:latest 192.168.1.11:5000/nginx
创建本地映射目录
[root@localhost ~]# mkdir -p /opt/data/registry
运行registry私有仓库
[root@localhost ~]# docker run -d --restart=always -p 5000:5000 -v /opt/data/registry/:/tmp/registry registry:2
b4146ef2ae8af38c03a0ee2023f274bcc91a816d304c8a46e68f8afcb56c6ae1
上传nginx镜像到registry私有仓库
[root@localhost ~]# docker push 192.168.1.11:5000/nginx
查看上传到registry私有仓库的镜像
[root@localhost ~]# curl 192.168.1.11:5000/v2/_catalog
{"repositories":["nginx"]}
下载镜像
[root@localhost ~]# docker pull 192.168.1.11:5000/nginx
3. 三台docker主机任意故障后不影响容器的运行
创建Swarm集群
修改主机名(三台主机)
[root@localhost ~]# vim /etc/hosts
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.11 node1
192.168.1.22 node2
192.168.1.33 node3
[root@localhost ~]# scp /etc/hosts 192.168.1.22:/etc/
[root@localhost ~]# scp /etc/hosts 192.168.1.33:/etc/
三台主机互相免密登录(三台主机都有做如下操作)
[root@node1 ~]# ssh-keygen
[root@node1 ~]# ssh-copy-id 192.168.1.11
[root@node1 ~]# ssh-copy-id 192.168.1.22
[root@node1 ~]# ssh-copy-id 192.168.1.33
测试是否可以免密登录成功
[root@node1 ~]# ssh 192.168.1.22
Last login: Mon Apr 8 11:22:31 2019
[root@node2 ~]# 登出
[root@node1 ~]# ssh 192.168.1.33
Last login: Mon Apr 8 19:22:14 2019
[root@node3 ~]# 登出
Node1上初始化集群,并成为管理节点
[root@node1 ~]# docker swarm init --advertise-addr 192.168.1.11
切换到node2、node3加入集群,成为工作节点
[root@node2 ~]# docker swarm join --token SWMTKN-1-3wravc9pi3ogtkszv89iqmdiqwnn1f7aeyewmeq0wxzrzn9xgu-4uu5wkqc1v79wr3jf0w34oxo5 192.168.1.11:2377
This node joined a swarm as a worker.
[root@node3 ~]# docker swarm join --token SWMTKN-1-3wravc9pi3ogtkszv89iqmdiqwnn1f7aeyewmeq0wxzrzn9xgu-4uu5wkqc1v79wr3jf0w34oxo5 192.168.1.11:2377
This node joined a swarm as a worker.
查看节点状态
[root@node1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
qmerd4d2odf6qm37gfeydavg1 * node1 Ready Active Leader 18.09.0
0kzvxltdlnbdjbbss0rktjmb4 node2 Ready Active 18.09.4
kl67t02phedqiud5xurvxj2sk node3 Ready Active 18.09.4
在node1上下载swarm图形化管理界面
[root@node1 ~]# docker pull dockersamples/visualizer
运行图形化界面
[root@node1 ~]# docker run -d -p 8888:8080 --restart=always -e HOST=192.168.1.11 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualizer dockersamples/visualizer
ccd96176376b908eece245ea8302ab0d98bfe089f437ee2cf3a57b45116fc7d3
[root@node1 ~]# docker service create --replicas 3 --name web2 -p 8001:80 -p 10123:22 192.168.1.11:5000/nginx
ho7ww36fzy3v6nyflfov4dtsw
overall progress: 3 out of 3 tasks
1/3: running [==================================================>]
2/3: running [==================================================>]
3/3: running [==================================================>]
verify: Service converged
[root@node1 ~]# firefox 192.168.1.11:8888
4. 使用卷容器存放有状态的数据
[root@node1 ~]# mkdir /web
[root@node1 ~]# vim /web/index.html
www.shuaiguoer.com
[root@node1 ~]# docker run -d -p 80:80 -v /web/:/usr/local/nginx/html 192.168.1.11:5000/nginx
1ce881295facc675769dc7acc72fbac9cb09c0e02e966cbbb2ad33f8b68c9f2f
[root@node1 ~]# curl 192.168.1.11
<a href="http://www.shuaiguoer.com">www.shuaiguoer.com</a>
5. 有状态的数据同步到nfs服务器,用于备份
[root@node1 ~]# vim /etc/exports
/web *(rw)
[root@node1 ~]# systemctl restart nfs
[root@node2 ~]# mkdir /backup
[root@node2 ~]# mount 192.168.1.11:/web /backup
[root@node2 ~]# cat /backup/index.html
www.shuaiguoer.com