一、Docker Compose
1、简介
Docker Compose 高效的管理容器。定义和运行多个容器,使用yaml文件进行配置。
- 使用dockerfile编写镜像
- 使用 docker-compose.yml 定义服务
- 使用 docker-compose up 启动环境
主要的作用就是批量容器的编排。是Docker官方开源项目。需要独立docker安装。一个应用的启动除了应用程序本身之外,还有很多外部环境如redis、mq、mysql、nginx等等,如果每个环境都使用DockerFile去管理,就需要处理很多个DockerFile。所以Compose起到的作用就是针对这些DockerFile进行管理和编排,让一个命令就能启动整个运行环境。
- 服务services 单个容器,如应用容器、mysql容器、redis容器
- 项目project,一组关联的容器
2、流程
- 创建网络
- 只要通过compose启动,就会把整合项目创建一个网络,保证一个项目在同一个网络下,默认名字 文件夹_default
- 只要通过compose启动,就会把整合项目创建一个网络,保证一个项目在同一个网络下,默认名字 文件夹_default
- 执行Docker-compose.yaml
- 启动服务
- 服务器名称规则 文件夹_服务名_副本数
- 停止使用 docker-compose down
可以直接使用官方提供的实例,进行联系
3、yaml编写规则
yaml编写大概分为三层,第一层是版本、第二层是服务(管理的镜像)、第三层是其他配置:
version: '' #版本
services: #服务配置、其实就是容器的命令
服务1:
image
build
network
服务2:
...
#其他配置。网络、卷、全局规则等
volumes:
network:
configs:
帮助文档:Compose file version 3 reference | Docker DocumentationCompose file referencehttps://docs.docker.com/compose/compose-file/compose-file-v3/官方博客yaml:(Quickstart: Compose and WordPress | Docker Documentation)
version: "3.9"
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
wordpress_data: {}
4、小结
- Docker 镜像,run->容器
- DockerFile构建镜像(服务打包)
- docker-compose启动项目(服务编排)
- Docker网络
二、Docker Swarm
1、在多台机器上安装docker Linux 12 yum方式安装Docker - 程序航 - 博客园
2、安装Swarm,工作模式
- manager 管理节点:操作都是在manager上,一致性节点,最少是三个节点,因为需要选举
- worker 工作节点:工作的
查看swarm命令,很简单:
1、创建manager节点:docker swarm init --advertise-addr 192.168.4.53
获取令牌:docker swarm join-token manager/worker
2、增加一个worker节点:docker swarm join --token token 192.168.4.53:2377
3、查看节点:docker node ls
这样集群就搭建完毕了,可以看到集群有2种角色,manager和worker,先创建一个manager节点,然后让其它的服务器以manager或者worker的角色加入进去即可。整体过程还是很简单的。
3、Raft协议
当集群的一个节点宕机的时候,Raft会保证大多数节点可用的时候让整个集群可用。如3个manager有一个宕机其它两个是可用的,所以一般情况下都是奇数的服务器节点。
worker节点就是工作的,无法使用管理命令,如:docker node ls
4、弹性部署、扩缩绒容
用服务代替应用,例如对外置提供一个redis服务,应用连接redis服务就行了,但是在部署的时候redis服务可能启动了10个。
命令:docker service 参数
docker service create -p 8888:80 --name myNginx nginx:其实就是docker run,只不过使用service服务启动具备扩缩容器、滚动更新等功能。
查看服务,这个时候只有一个副本。docker service inspect myNginx
创建多个副本:docker service update --replicas 3 myNginx
这个时候就能看到 myNginx这个服务存在3个副本:
服务在可以在任意节点访问,并且可以在任意节点启动任意个镜像。
5、总结
- docker 可以初始化一个swarm集群,角色分为 manager、worker
- node 每个服务器就是一个node,组成了一个集群
- service 任务,可以管理节点或者工作节点来运行(就是运行的应用)
- task 就是一个一个的副本,每个节点创建副本的个数都是有集群环境随机决定的
流程:命令->管理->api->调度->工作节点(创建Task容器并维护)
service可以只跑在 worker节点上 使用--model 模式。
Swarm中的网络:
docker network inspect ingress 查看详情。
1、docker stack
- 单机:docker-compose up -d xx.yml
- 集群:docker statck deploy xx.yml
2、docker secret 配置相关的证书安全。
3、docker config 给集群环境配置相关内容