1.为什么会用到docker swarm?它是做什么的?

微服务我们目前都是采用docker部署,每个微服务运行在一个个docker容器中。docker容器与宿主机之间通过bridge网络进行通信,这样,在一台服务器里面,多个docker容器之间的通信则非常容易实现。而我们的微服务突出的地方,分布式部署呢!

因此需要有一个管理者,将多台服务器连接在一起。docker swarm就可以解决这个问题。

 

2.开发步骤

准备工作: 2台或更多linux服务器。

例如:  172.16.1.241(centos7 内存40G)

             172.16.1.242(centos7 内存16G)

第一步: 安装docker,1.12之后的docker默认都带有swarm

第二步:开放端口,注意防火墙一定不要关闭

firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=2377/tcp
firewall-cmd --permanent --add-port=7946/tcp
firewall-cmd --permanent --add-port=7946/udp
firewall-cmd --permanent --add-port=4789/udp

firewall-cmd --reload

第三步:设置一台服务器为master,设置172.16.1.241为master

docker swarm init --advertise-addr 172.16.1.241

第四步:根据第三步返回的信息,在172.16.1.242上面执行

docker swarm join --token SWMTKN-1-6a2kdr3hx6i1lla8e0f2fmqs5nufbgnw0f2nuq5ksut2yq8rui-46ym3a8niildhwg7hzge1yuj4 172.16.1.241:2377

第五步:创建overlay网络

docker network create \
--driver overlay \
--subnet 152.80.1.0/24 \
springcloud-overlay

到此,swarm已经搭建完成,我们可以通过docker create service来启动一个微服务到docker容器,例如

docker service create --name db-mysql \
--publish 3306:3306 \
--network springcloud-overlay \
--mount type=bind,src=/opt/mysql/data,dst=/var/lib/mysql \
--mount type=bind,src=/opt/mysql/conf,dst=/etc/mysql/conf.d \
--mount type=bind,src=/etc/localtime,dst=/etc/localtime \
--env MYSQL_ROOT_PASSWORD=Hello!!!123 \
mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci

 

微服务非常多,我们则可以通过docker compose进行微服务编排,之后使用docker stack deploy -c 【dockercompose文件】【模块名】来运行多个微服务。

注意:docker-compose yaml文件中,不能使用build来进行运行时制作镜像,镜像必须存在,docker容器在哪台服务器启动,取决于服务器的性能,swarm根据算法策略自动判断。