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简介

Docker Compose使用教程与Swarm集群管理_Docker Compose与Docker Swarm简介区别_docker compose和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 -

Docker Compose与Docker Swarm简介区别_Docker Compose使用教程与Swarm集群管理_docker compose和swarm

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

docker compose和swarm_Docker Compose使用教程与Swarm集群管理_Docker Compose与Docker Swarm简介区别

这儿最后创建的两个登陆用户,密码都是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 

Docker Compose使用教程与Swarm集群管理_docker compose和swarm_Docker Compose与Docker Swarm简介区别

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

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复