Docker Compose 介绍

        官方文档:Docker Compose | Docker Docs

        关于Docker-Compose其他功能可以参考官方文档

        Docker Compose是一个用于定义和运行多容器的工具。简单的来说就是在一个YAML配置文件(compose.yml)中把整个应用所需的服务、网络、存储等基础设施全部规划

        docker compose 优势

                简化控制:在一个yml文件中可以定义多个容器服务,简化编排

                高效协作:可共享的 YAML 文件支持开发人员和运维人员之间的顺畅协作,从而改善工作流程和问题解决,提高整体效率。

                快速应用开发:Compose 会缓存用于创建容器的配置。当您重启一个未更改的服务时,Compose 会重用现有的容器。重用容器意味着您可以快速地对环境进行更改。

                跨环境可移植性:Compose 支持在 Compose 文件中使用变量。您可以使用这些变量为不同的环境或不同的用户定制您的 Compose 代码。

Docker Compose 架构

                        docker compose up
                                │
                                ▼
                        读取 compose.yaml
                                │
                                ▼
                        解析服务定义
                                │
                                ▼
                        创建网络(Network)
                                │
                                ▼
                        创建数据卷(Volume)
                                │
                                ▼
                        拉取镜像(Image)
                                │
                                ▼
                        创建容器(Container)
                                │
                                ▼

                        启动容器

Docker Compose 核心组件

        Docker Compose 本身不是一个独立运行的服务,而是基于 Docker Engine 的编排工具

        Compose CLI (客户端)

                compose cli :即docker compose的一些命令,比如:docker compose up -d

                compose 实际是一个工具,  在执行这些命令时compose实际上在调用Docker Engine。

        Compose file(配置文件)

                配置文件名:compose.yml

                就是在这个文件中定义所有所需要的,如:服务、网络、存储、配置、秘钥等       

services:      # 服务定义(必需)
  web:
    build: .
    ports: ["8080:80"]
    
networks:      # 网络定义(可选)
  frontend:
    
volumes:       # 数据卷定义(可选)
  data:
    
configs:       # 配置文件(可选)
secrets:       # 密钥管理(可选)

     

        Service(服务)

                定义:单个容器的配置抽象,对应一个镜像运行时的完整定义

        Container(容器)

                定义:Compose 管理的实际运行单元,从服务创建而来

        Network(网络)

                定义:容器间通信的虚拟网络层,提供服务发现和隔离

networks:
  frontend:
    driver: bridge              # 默认,单机桥接网络
  backend:
    driver: overlay             # Swarm模式跨主机
  none-driver:
    driver: none                # 无网络

services:
  web:
    networks:
      - frontend
      - backend                 # 容器可同时连接多个网络
    networks:
      default:                  # DNS会自动发现同网络服务
        aliases:
          - webapi              # 自定义DNS别名

        Volume(数据卷)

                定义:持久化数据存储,独立于容器生命周期

        Project(项目

                定义:由 Compose 文件定义的完整应用单元,包含所有服务、网络、卷 

Docker Compose 安装

        独立版安装方法:

        下载地址:Releases · docker/compose · GitHub

cd /data/app/pats_opts/

mkdir docker-compose &&  cd  docker-compose

curl -SL https://github.com/docker/compose/releases/download/v5.1.2/docker-compose-linux-x86_64 -o /data/app/pats_opts/docker-compose/docker-compose

chmod +x docker-compose

ln -s /data/app/pats_opts/docker-compose/docker-compose    /usr/bin/docker-compose

#查看版本
[root@test-01 docker-compose]# docker-compose version
Docker Compose version v5.1.2

Docker Compose 常用命令

        使用docker-compose的关键命令:

                启动compose.yml中所有定义的服务

                  docker compose up        :启动所有服务、前台运行

                  docker compose up -d    :启动所有服务、后台运行

                停止、启动、移除容器

                docker compose stop  :只是停止容器,停止后后面可以用start 启动

                docker compose start

                docker compose restart

                docker compose down:停止并移除容器

              日志查看

                docker compose logs

                docker compose logs nginx :指定服务查看指定日志

                列出所有服务及当前状态

                docker compose ps

                验证compose.yml文件格式是否正确

                docker compose config

Docker Compose redis cluster 案例

        docker-compose 目录结构:

redis-cluster
    compose.yml
    data
    redis-node-1.conf
    redis-node-2.conf
    redis-node-3.conf
    redis-node-4.conf
    redis-node-5.conf
    redis-node-6.conf


#redis-cluster文件夹下面有compose.yml 配置文件、data文件夹、6个节点的redis配置文件

        compose.yml:

services:
  redis-node-1:
    image: redis:latest
    container_name: redis-node-1
    ports:
      - "6371:6379"
      - "16371:16379"  # 集群总线端口
    command: redis-server /etc/redis/redis.conf
    volumes:
      - ./redis-node-1.conf:/etc/redis/redis.conf
      - /data/app/pats_opts/docker-compose/redis-cluster/data/node1:/data
    networks:
      - redis-cluster
    environment:
      - REDIS_NODE=node1

  redis-node-2:
    image: redis:latest
    container_name: redis-node-2
    ports:
      - "6372:6379"
      - "16372:16379"
    command: redis-server /etc/redis/redis.conf
    volumes:
      - ./redis-node-2.conf:/etc/redis/redis.conf
      - /data/app/pats_opts/docker-compose/redis-cluster/data/node2:/data
    networks:
      - redis-cluster
    environment:
      - REDIS_NODE=node2

  redis-node-3:
    image: redis:latest
    container_name: redis-node-3
    ports:
      - "6373:6379"
      - "16373:16379"
    command: redis-server /etc/redis/redis.conf
    volumes:
      - ./redis-node-3.conf:/etc/redis/redis.conf
      - /data/app/pats_opts/docker-compose/redis-cluster/data/node3:/data
    networks:
      - redis-cluster
    environment:
      - REDIS_NODE=node3

  redis-node-4:
    image: redis:latest
    container_name: redis-node-4
    ports:
      - "6374:6379"
      - "16374:16379"
    command: redis-server /etc/redis/redis.conf
    volumes:
      - ./redis-node-4.conf:/etc/redis/redis.conf
      - /data/app/pats_opts/docker-compose/redis-cluster/data/node4:/data
    networks:
      - redis-cluster
    environment:
      - REDIS_NODE=node4

  redis-node-5:
    image: redis:latest
    container_name: redis-node-5
    ports:
      - "6375:6379"
      - "16375:16379"
    command: redis-server /etc/redis/redis.conf
    volumes:
      - ./redis-node-5.conf:/etc/redis/redis.conf
      - /data/app/pats_opts/docker-compose/redis-cluster/data/node5:/data
    networks:
      - redis-cluster
    environment:
      - REDIS_NODE=node5

  redis-node-6:
    image: redis:latest
    container_name: redis-node-6
    ports:
      - "6376:6379"
      - "16376:16379"
    command: redis-server /etc/redis/redis.conf
    volumes:
      - ./redis-node-6.conf:/etc/redis/redis.conf
      - /data/app/pats_opts/docker-compose/redis-cluster/data/node6:/data
    networks:
      - redis-cluster
    environment:
      - REDIS_NODE=node6

  # Redis Cluster 初始化工具
  redis-cluster-init:
    image: redis:latest
    container_name: redis-cluster-init
    depends_on:
      - redis-node-1
      - redis-node-2
      - redis-node-3
      - redis-node-4
      - redis-node-5
      - redis-node-6
    networks:
      - redis-cluster
    command: >
      sh -c "
        echo '等待所有 Redis 节点启动...' && sleep 20 && echo 'yes' | redis-cli --cluster create redis-node-1:6379 redis-node-2:6379 redis-node-3:6379 redis-node-4:6379 redis-node-5:6379 redis-node-6:6379 --cluster-replicas 1
      "

networks:
  redis-cluster:
    driver: bridge

volumes:
  redis-data-1:
  redis-data-2:
  redis-data-3:
  redis-data-4:
  redis-data-5:
  redis-data-6:

                redis-node-1.conf:

#node1到node6的配置文件都一样即可

# 基础配置
port 6379
bind 0.0.0.0
protected-mode no

# 集群配置
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000

# 持久化
appendonly yes
appendfilename "appendonly.aof"

# 内存管理
maxmemory 2gb
maxmemory-policy allkeys-lru

# 日志
loglevel notice
logfile ""

# 数据目录
dir /data

              docker-compose ps 命令查看redis 6个节点都启动正常

下一批文章将介绍

DevOps 生态介绍(十一):从代码提交到镜像仓库的完整流水线(附Jenkinsfile) 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐