DockerCompose与DockerSwarm的简介和区别
背景
之前公司好多都是单体的springboot服务,使用Docker的时侯,只须要定义Dockerfile文件,之后打成镜像把容器启动上去就ok了。并且现今的微服务构架应用系统通常包含若干个微服务,每位微服务通常还会布署多个实例,假如每位微服务都要自动启停,这么效率会特别低,维护量也很大。
使用DockerCompose/Swarm可以轻松、高效的管理容器,它是一个用于定义和运行多容器Docker的应用程序工具
Compose简介
Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,可以使用YML文件来配置应用程序须要的所有服务。之后,使用一个命令,就可以从YML文件配置中创建并启动所有服务。
Compose使用的三个步骤:
使用Dockerfile定义应用程序的环境。
使用docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
最后,执行docker-composeup命令来启动并运行整个应用程序。
# yaml 配置实例
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
Swarm简介
Swarm是Docker公司推出的拿来管理docker集群的平台,DockerEngine1.12及后续版本集成了SwarmKit编排服务,且swarm几乎全部用GO语言来完成的开发的,代码开源在,它是将一群Docker宿主机弄成一个单一的虚拟主机,Swarm使用标准的DockerAPI插口作为其后端的访问入口。
swarm基本结布光:
在结布光可以看出DockerClient使用Swarm对集群(Cluster)进行调度使用。
上图可以看出,Swarm是典型的master-slave结构,通过发觉服务来补选manager。manager是中心管理节点,各个node上运行agent接受manager的统一管理docker compose和swarm,集群会手动通过Raft合同分布式补选出manager节点,无需额外的发觉服务支持,防止了单点的困局问题linux移植,同时也外置了DNS的负载均衡和对外部负载均衡机制的集成支持。
Compose和Swarm区别
DockerSwarm和DockerCompose一样,都是Docker官方容器编排项目,但不同的是:
因而,对于微服务的布署,即便DockerSwarm会愈加适宜。
dockerswarm简单使用及常用命令背景:
有两台虚拟机,机器A的IP分为192.168.56.103,机器B的IP为192.168.57.103
初始化集群
首先我选择机器B为master节点,去初始化swarm集群
docker swarm init --advertise-addr 192.168.57.103
假如docker主机有多块网卡linux操作系统介绍,必须使用--advertise-addr指定IP
执行dockerswarminit命令的节点手动成为manager管理节点
节点加入
docker swarm join --token SWMTKN-1-0pps4hiaqttlw38w5jknj0byezfrdpwan3cq4v7wl7ow69bf02-5t1of59p2xh0bosnza0lhxn2z 192.168.57.103:2377
启动docker程序,nginx服务1.22版本
docker service create --replicas 2 -p 8081:80 --name nginx nginx:1.22
#删掉服务
dockerservicermnginx
查看服务
docker service ls
查看某个服务的详情
docker service ps nginx
服务伸缩
docker service scale nginx=3
docker service scale nginx=1
删掉service服务
docker service rm nginx
创建秘钥secret
#opensslrand-base6420|dockersecretcreatemysql_password-
#opensslrand-base6420|dockersecretcreatemysql_root_password-
echo -n "raypick" | base64 | docker secret create mysql_password -

echo -n "root" | base64 | docker secret create mysql_root_password -
查看secret
docker secret ls
docker inspect mysql_password
使用secret
docker network create -d overlay mysql_private
#假如没有在target中显示指定路径,secret默认通过tmpfs文件系统挂载到容器的/run/secrets目录下
docker service create
--name mysql
--replicas 1
--network mysql_private
--secret source=mysql_root_password,target=mysql_root_password
--secret source=mysql_password,target=mysql_password
-e MYSQL_ROOT_PASSWORD_FILE="/run/secrets/mysql_root_password"
-e MYSQL_PASSWORD_FILE="/run/secrets/mysql_password"
-e MYSQL_USER="zx1"
-e MYSQL_DATABASE="wordpress"
mysql:5.7
这儿最后创建的两个登陆用户,密码都是base64以后的内容,而不是base64之前的原文
#创建config
新建redis.conf文件
首先确保redis.conf存在,命令最后的那种redis.conf是文件路径
这儿我的文件中随意写了一点内容
之后按照这个文件创建config
docker config create redis.conf ./redis.conf
通过命令查看
docker config inspect redis.conf
可以发觉在Spec下的Data储存着文件内容的base64后的内容,我们来解码瞧瞧
创建redis服务
docker service create
--name redis
--config source=redis.conf,target=/etc/redis.conf
-p 6388:6380

redis:latest
redis-server /etc/redis.conf
# --config redis.conf
假如没有在target中显示指定路径,默认的redis.conf会以tmpfs文件系统挂载到容器的/config.conf
服务升级
先创建5.6的版本服务,再升级到5.7版本
docker service create --replicas 1 -p 3306:3306 -env MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.6
docker service update --image mysql:5.7 mysql
其实里面的只是修改了镜像,可选的更选举项有好多docker compose和swarm,须要自己通过以下命令行指南查看
docker service update --help
服务(版本)回退
sudo docker service rollback mysql