Docker技术swarm+compose部署服务

一、实验环境

选择三台主机运行swarm,依次为:

Node1:manager    192.168.111.10

Node2:manager    192.168.111.11

Node3        192.168.111.12

1、基本环境配置

  3台保持一致时间 ntp

  3台关闭selinux,开启路由转发

wKiom1nYG02j3CLCAAAYctO4HAE621.png

wKiom1nYG1jS0N7YAAAg9jyO9aI176.png

  3台主机根据上面环境修改主机名和IP地址

2、配置host

node1为例

#vim  /etc/hosts

wKioL1nYGxaTuy3KAAAchHb-qZo640.png

33台开启宿主机的端口

wKioL1nYGyGRuYwsAAB1QJrWlaQ917.png

4配置所有节点的密钥登录

配置以下节点密钥互信,在node1上免密钥登录各节点,只在node1上执行生成sshkey

wKiom1nYG3nTa0wZAABFZipxUTQ785.png

node1发布sshkey到各个节点

#ssh-copy-id  node1

#ssh-copy-id  node2

#ssh-copy-id  node3

测试密钥登录

wKioL1nYGzbBg5ixAAAR8jaOChM099.png

5、在所有主机上安装docker最新版本(才能支持compose的版本3

下载docker

#curl  -fsSL   https://get.docker.com/ | sh

启动docker

wKiom1nYHCvybLazAAAhLc0eMjs559.png

查看docker版本

wKiom1nYHDnjO9BKAAANm5CNuNs887.png

docker  swarm 简介:

Docker  engine1.12集成了swarm集群工具

三个命令行工具创建一个swarm集群

Docker  swarm:开启swarm模式;加入swarm集群;配置集群参数

Docker  node查询集群节点信息;提升/移除一个管理节点;管理swarm节点主机。

Docker service创建管理service

可查看docker  --help

6、创建docker swarm集群

node1上初始化docker  swarm

wKioL1nYG_nS-2Q2AABpxDXo7Dk529.png

node2已加入work

wKioL1nYHAagl1y5AAA9t2rdevU701.png

node3已加入

wKiom1nYHGDy-ykCAAAiUPJn1lw154.png

#docker  node  ls    查看节点个数

wKiom1nYHHGSgdXyAAA0m8w9XIk957.png

为了使swarm集群实现高可用,避免出现单点故障,我们希望建立多个manager集群 ,通过Docker  node  promote  节点名,

node1上使node2work模式提升到manager

wKioL1nYHDLhlS5PAAANoZyIlec074.png

wKiom1nYHJLBQ0NYAAAqmLrqzfc611.png-wh_50

7node1上制作私有仓库

#docker  pull  registry:2    下载私有仓库镜像

#docker  p_w_picpaths

wKioL1nYHGSSZXwgAAAUIth4v54017.png

注意:默认情况下,registry2 会将仓库存放于容器的/var/lib/registry 目录下,这样如果容器被删除,
则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录挂载到容器的
/var/lib/registry 下,两个目录下都有!
·registry 的默认存储路径是/var/lib/registry,只是个临时目录,一段时间之后就会消失
·所以使用-v 参数,指定个本地持久的路径 

wKioL1nYHHTDmv7SAABF2XwJUxg573.png

wKiom1nYHM2R6WEIAAANuyjkpNE090.png

返回{"repositories":[]} 说明 registry 服务工作正常.
注: 镜像信息存放在/var/lib/registry 目录下,因此这里将宿主机目录映射到/var/lib/registry 

3都指向 registry 服务器

修改/usr/lib/systemd/system/docker.service,修改后保存退出 

#vim  /usr/lib/systemd/system/docker.service

wKioL1nYHO6D3PakAAARtQXZ-aA592.png

#systemctl   daemon-reload          先加载

#systemctl   restart   docker         再重启docker

通过swarm配合compose实现swarm高可用群集服务。

8、在node1上安装compose

networks: compose file V3, 允许我们通过networks关键字定义一个基于 Docker0 网络的 subnet。然后将我们的服务添加到这个subnet中。这样做的好处实现了服务之间的隔离,一旦我们不需要这组服务了,我们可以通过命令“docker-compose down

安装docker-compose

wKiom1nYHU2RdtLuAAB62fYaGoQ575.png

只需在node1主机安装docker-compose

#pip  install   docker-compose                  安装compose

#ln  -s   /usr/bin/docker-compose  /usr/local/bin/   做软连接

#docker-compose   -v    查看compose版本

wKioL1nYHQ7iBW1MAAANwLRrHsM077.png

9node2上配置各服务镜像

基础镜像:

192.168.111.10:5000/centos:centos7

nginx服务镜像:

wKiom1nYHXaTcjCsAAAbIGdXhmU828.png

dockerfile:

wKioL1nYHTrjfzx8AABBvVKtJYA249.png

nginx.conf

wKiom1nYHaWBGUOWAABarhWna0Y814.png

192.168.111.10:5000/centos:nginx33

Tomcat1配置

服务镜像:

wKioL1nYHXGwNaVEAAA0NI41P44042.png

Dockerfile

wKiom1nYHdTSAXvQAABwPAhVk-0027.png

Tomcat主配置文件server.xml

wKioL1nYHZOB4MelAABCbIiK1uk073.png

编辑首页文件index.jsp

docker compose+swarm www.tomcat111.com

注意Tomcat2配置和tomcat1类似只需改动tomcat1的index.jsp

docker compose+swarm www.tomcat222.com

192.168.111.10:5000/centos:tomcat01

192.168.111.10:5000/centos:tomcat02

Tomcat配置完毕

wKiom1nYJwvi6YmrAAANgm7Rnms621.png

wKiom1nYJxmAJZn3AAAOXikowPU987.png

10、在node1编辑compose文件

#mkdir  /docker-compose

#vim   docker-compose.yml

wKiom1nYJybDBWD_AABsjNVqFlA425.png

注意:在创建网络的时候会生成一个默认网络

运行docker stack deploy结合swarm实现多服务管理

Docker stack 命令是docker-compose下的

#docker  stack  deploy  自定义名字   --compose-file=***.yml

wKioL1nYJuSyZprlAAAfpg95z4g258.png

#docker  service  ls

wKioL1nYJwjSnyxDAAA0WPwKpMo935.png

#docker   network  ls    查看网络

wKioL1nYJxfTXxunAAA9e_PAN0g763.png

#docker   ps  -a  

wKiom1nYJ3WhU0McAAA-HHGjAcc288.png

node2

#docker  service  ls

wKioL1nYJ6DDZyzNAAAyvaF2rjQ508.png

#docker  network  ls

wKioL1nYJ6-RzxALAAA7w-xfw2s111.png

#docker  ps  -a

wKiom1nYKAqyrpO4AAAvdR9mYIc266.png

node3

#docker network ls   

wKioL1nYJ8fDVJK9AAA1OUBDTt0484.png

#docker  ps  -a

wKiom1nYKCCBOkikAAAt03un7oI653.png

客户端验证:http://192.168.111.10

wKioL1nYJ9-yU_7lAAB9bGDIOzc799.png

wKiom1nYKDnxQLoKAACEux9aTwI391.png