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
Last modification:July 29th, 2020 at 10:14 pm
如果觉得我的文章对你有用,请随意赞赏