概述
通过容器编排,可以实现以下这些功能:
- 依赖管理,当一个容器必须在另一个容器运行完成后,才能运行时,就需要进行依赖管理
- 副本数控制,容器有时候也需要集群,快的对容器集群进行版本弹性伸缩
- 配置共享,通过配置文件统一描述需要运行的服务相关信息,自动化的解析配置内容,并构建对应的服务
docker compose
Compose 是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用 YML文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从YML文件配置中创建并启动所有服务。
只能单机环境的容器编排,在单机上部署多个容器会变的比较方便。
docker compose 是对docker操作的增强。
安装
安装的时候,需要注意compose 的版本和docker的版本要对应上,不能太低
# 用阿里云的,看了下1.21.2好像是最新的18年最新更新
# $(uname -s)-$(uname -m) 是获取系统和架构
sudo curl -L "http://mirrors.aliyun.com/docker-toolbox/linux/compose/1.21.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
下载最新版本的话,用这个
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
将可执行权限应用于二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
创建软链:
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试是否安装成功:
docker-compose --version
compose.yml 编写
内容比较多,可以看官方文档:https://docs.docker.com/compose/compose-file/compose-file-v2/
compose.yml配置样例,yaml是个key value配置,value和冒号之间需要有空格。上下行之间有上下级关系的,如果下一行有缩进2个空格,则表示是上一行的子集。
version: "2.1"
services:
# 相当于一个容器,nginx-demo是随便起的
nginx-demo:
image: "nginx"
container_name: "nginx_compose"
restart: "always"
# - 的话相当于数组
networks:
- wolfcode_net
volumes:
- /usr/local/www:/usr/share/nginx/htm
# 环境变量配置
environment:
APP_ENV: dev
# 指定dns解析服务
dns:
- 114.114.115.115
# 端口映射
ports:
- 80:80
# 配置公共网卡
networks:
wolfcode_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 188.18.0.0/16
gateway: 188.18.0.1
服务services配置
需要运行的容器配置,可以理解为原先用docker run命令后面跟的一系列配置信息,都配在这个下面。
网络networks配置
docker-compose 公共自定义网络管理,配置好以后,可以直接在services中引用该网络配置,这个配置可以多个service使用,例如自定义网卡配置
数据卷volumes
docker-compose 下统一数据卷管理,可以给多个services用
compose 命令
配置检查
检查配置文件是否正确,会自动查找当前目录下是否有docker-compose.yml,并且检查是否正确
docker-compose config
create
创建服务,这个只是创建容器,默认是没有运行的
# 创建docker-compose.yml里的所有services
docker-compose create
# 只创建docker-compose.yml里的nginx_demo services
docker-compose create nginx-demo
up
如果要运行的话,这个是针对第一次,或者如果docker-compose.yml文件有更新,需要重新应用最新的配置内容的话,可以使用下面命令,会自动根据最新配置补齐内容。
如果是已经有的容器,启动的话还是得用start命令
# 运行docker-compose.yml所有服务
docker-compose up -d
# 只运行nginx-demo服务
docker-compose up -d nginx-demo
ps
查看运行中的容器
docker-compose ps
stop
停掉服务
docker-compose stop
down
停掉并且删除容器等资源,甚用
docker-compose down
start
启动服务
docker-compose start
restart
重新启动服务
docker-compose restart
scale 扩容缩容
快速启动多个服务,需要注意的是,这个时候不能指定容器名container_name: "nginx_compose"
,不能和主机绑定端口,不然会冲突,导致失败
services:
# container_name: "nginx_compose"
# 改为只暴露端口即可
ports:
- 80
然后执行
# 如果原来只有3个,会增加2个
docker-compose scale nginx-demo=5
# 如果原来是5个,会自动停止2个
docker-compose scale nginx-demo=3
查看日志
查看所有服务的日志
# 查看所有服务的日志
docker-compose logs
指定查看某个服务的日志
# 查看所有服务的日志
docker-compose logs -f nginx-demo
swarm 分布式
是在docker官方的,在k8s后面出来的。可以在多个机器上创建容器,可以微服务部署。在docker 1.12后,已经自带swarm了。
架构图如下所示,有个机器当做主节点,管理众多的从节点机器。
有多个管理节点,每个管理节点管理了多个worker节点,如果管理节点都挂了,基于raft协议,从工作节点里选一个当做管理节点。
我们可以利用swarm,配置很多个服务services,然后把这个服务交给节点node创建,node节点以task的形式创建。
服务的生命周期
集群搭建
集群创建
在master节点上创建管理节点,需要注意的是,管理节点也算是个工作节点
# 指定主节点的ip地址,这个地址是这台机器的地址
docker swarm init --advertise-addr 192.168.113.120
去对应的工作节点上执行上述命令即可加入集群。最好先把防火墙关闭了,不然有可能没法访问。
如何查看有几个节点呢
# master 节点上执行
docker node ls
服务创建
每个节点都创建2个nginx
docker service create --replicas 2 -p 80:80 --name nginx_swarm nginx
如果有问题题话,可以删除重新创建,注意防火墙网络问题
docker service ls
docker service rm 服务名称
这样就可以用相关的命令在master节点整个集群容器的数量。
拓展
最后可以用portainer来可视化管理
评论 (0)