1. 概述

通过容器编排,可以实现以下这些功能:

  1. 依赖管理,当一个容器必须在另一个容器运行完成后,才能运行时,就需要进行依赖管理
  2. 副本数控制,容器有时候也需要集群,快的对容器集群进行版本弹性伸缩
  3. 配置共享,通过配置文件统一描述需要运行的服务相关信息,自动化的解析配置内容,并构建对应的服务

2. Docker compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

只能单机环境的容器编排,在单机上部署多个容器会变的比较方便。

Docker compose 是对 docker 操作的增强。

2.1. 安装

安装的时候,需要注意 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

2.2. 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

2.2.1. 服务 services 配置

需要运行的容器配置,可以理解为原先用 docker run 命令后面跟的一系列配置信息,都配在这个下面。

2.2.2. 网络 networks 配置

Docker-compose 公共自定义网络管理,配置好以后,可以直接在 services 中引用该网络配置,这个配置可以多个 service 使用,例如自定义网卡配置

2.2.3. 数据卷 volumes

Docker-compose 下统一数据卷管理,可以给多个 services 用

2.3. Compose 命令

2.3.1. 配置检查

检查配置文件是否正确,会自动查找当前目录下是否有 docker-compose.yml,并且检查是否正确

docker-compose config

2.3.2. Create

创建服务,这个只是创建容器,默认是没有运行的

# 创建docker-compose.yml里的所有services
docker-compose create
# 只创建docker-compose.yml里的nginx_demo services
docker-compose create nginx-demo

2.3.3. Up

如果要运行的话,这个是针对第一次,或者如果 docker-compose.yml 文件有更新,需要重新应用最新的配置内容的话,可以使用下面命令,会自动根据最新配置补齐内容。

如果是已经有的容器,启动的话还是得用 start 命令

# 运行docker-compose.yml所有服务
docker-compose up -d
# 只运行nginx-demo服务
docker-compose up -d nginx-demo

2.3.4. Ps

查看运行中的容器

docker-compose ps

2.3.5. Stop

停掉服务

docker-compose stop

2.3.6. Down

停掉并且删除容器等资源,甚用

docker-compose down

2.3.7. Start

启动服务

docker-compose start

2.3.8. Restart

重新启动服务

docker-compose restart

2.3.9. 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

2.3.10. 查看日志

查看所有服务的日志

# 查看所有服务的日志
docker-compose logs

指定查看某个服务的日志

# 查看所有服务的日志
docker-compose logs -f nginx-demo

3. Swarm 分布式

是在 docker 官方的,在 k8s 后面出来的。可以在多个机器上创建容器,可以微服务部署。在 docker 1.12 后,已经自带 swarm 了。

架构图如下所示,有个机器当做主节点,管理众多的从节点机器。

lttisa1e.png

有多个管理节点,每个管理节点管理了多个 worker 节点,如果管理节点都挂了,基于 raft 协议,从工作节点里选一个当做管理节点。

lttj0e7q.png

我们可以利用 swarm,配置很多个服务 services,然后把这个服务交给节点 node 创建,node 节点以 task 的形式创建。

lttjbsdf.png

服务的生命周期

lttjejkj.png

3.1. 集群搭建

3.1.1. 集群创建

在 master 节点上创建管理节点,需要注意的是,管理节点也算是个工作节点

# 指定主节点的ip地址,这个地址是这台机器的地址
docker swarm init --advertise-addr 192.168.113.120

lttjmjpu.png

去对应的工作节点上执行上述命令即可加入集群。最好先把防火墙关闭了,不然有可能没法访问。

如何查看有几个节点呢

# master 节点上执行
docker node ls

3.1.2. 服务创建

每个节点都创建 2 个 nginx

docker service create --replicas 2 -p 80:80 --name nginx_swarm nginx

如果有问题题话,可以删除重新创建,注意防火墙网络问题

docker service ls
docker service rm 服务名称

这样就可以用相关的命令在 master 节点整个集群容器的数量。

4. 拓展

最后可以用 portainer 来可视化管理

最后修改:2025 年 12 月 29 日
如果觉得我的文章对你有用,请随意赞赏