2023-10-23 N_Docker

Docker Compose

https://docs.docker.com/compose/gettingstarted/

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

in short <容器编排管理> 就是通过配置文件管理(容器依赖, 环境变量, 映射路径, 端口等)多个容器的组件

安装

https://docs.docker.com/compose/install/linux/

For Ubuntu and Debian

安装

sudo apt-get update
sudo apt-get install docker-compose-plugin

更新

sudo apt-get install docker-compose-plugin

For RPM-based distros

安装

sudo yum update
sudo yum install docker-compose-plugin

更新

sudo yum install docker-compose-plugin

验证 Verify that Docker Compose is installed correctly by checking the version. docker compose version

基础概念

https://docs.docker.com/compose/features-uses/

使用Compose本质上是一个三步过程

1.Dockerfile

定义应用程序环境的 Dockerfile:Dockerfile是一个文本文件,其中包含了构建Docker容器镜像的指令和配置。 这个文件定义了您的应用程序所需的操作系统、依赖项、配置和应用程序代码。通过使用Dockerfile,您可以确保应用程序的环境在不同的地方都能够被复制和重建,而不受特定主机的影响。

2.compose.yaml

定义应用程序服务的compose.yaml文件:compose.yaml文件是一个YAML格式的配置文件,用于描述应用程序中的各种服务、网络、卷和容器配置。

您可以在这个文件中定义多个服务,例如数据库服务、redis服务、 Web服务等,并指定它们之间的依赖关系和配置。

3.启动

# 前台启动 默认使用当前目录下的docker-compose.yml文件
docker-compose up

# 后台启动
docker-compose up -d

# 后台启动 `-d` 后台的方式, -f <自定义文件>  使用指定的compose文件。
docker-compose up -f  -d

# 重新构建镜像并启动
docker-compose up --build

# 只启动指定服务
docker-compose up service1 service2

Docker-compose (docker-compose.yml 配置说明)

https://docs.docker.com/compose/compose-file/

Version (Optional)

https://docs.docker.com/compose/compose-file/04-version-and-name/ 指定Docker Compose文件的版本。决定了支持的Compose功能和语法

Services (Required)

https://docs.docker.com/compose/compose-file/05-services/

这是定义各个服务的部分。每个服务是应用程序中的一个容器,可以包括容器的名称、镜像、端口映射、环境变量等

Networks

https://docs.docker.com/compose/compose-file/06-networks/

networks元素,可以配置可在多个服务之间重用的命名网络。要跨多个服务使用网络,必须使用networks属性显式授予每个服务访问权限。networks顶级元素具有提供更细粒度控制的附加语法。

networks:
  mynetwork:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: mycustombridge
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/24
  • mynetwork: 这是自定义网络的名称,它是一个子键,用于标识网络的名称。您可以为每个自定义网络指定一个唯一的名称,以便在服务配置中引用它。
  • driver: 指定网络的驱动程序。通常使用default。默认使用bridge单个主机上的网络,overlay代表跨多个节点的网络群
  • driver_opts: 这个部分允许您指定驱动程序特定的选项。
  • ipam: IP地址管理的配置,它允许您指定如何为容器分配IP地址。
  • config: 这是一个配置列表,包含了为容器分配IP地址的规则。
  • subnet: 指定了用于这个网络的IP地址子网。容器将从该子网中分配IP地址。

Volumes

https://docs.docker.com/compose/compose-file/07-volumes/

在容器中,数据通常存储在容器的文件系统中。当容器被删除或者重新启动时,文件系统中的数据也会消失。为了使数据持久化,我们可以使用 Volumes。

用于将容器内的数据持久化到主机上, 或者用于在多个容器之间共享数据

services:
  backend:
    image: example/database
    volumes:
      - db-data:/etc/data

  backup:
    image: backup-service
    volumes:
      - db-data:/var/lib/backup/data

volumes:
  db-data:
  driver_opts:
      type: "nfs"
      o: "addr=10.40.0.199,nolock,soft,rw"
      device: ":/docker/example"

db-data 会挂载到 backend 容器的 /etc/data 和 backup 容器的 /var/lib/backup/data

Configs

https://docs.docker.com/compose/compose-file/08-configs/

Secrets

https://docs.docker.com/compose/compose-file/09-secrets/

ports

ports 字段指定了要宿主机映射到容器的端口(宿主机端口:容器端口)。 expose 字段是用于在 Docker 容器内部暴露端口的选项,可以让其他容器连接到这些端口,但不会将它们映射到 Docker 主机上。

 services:
    gateway: #服务名
       ports:
          -"7000:7000"
    nginx:
        image: nginx
        expose:
          -"8080"

Docker-compose 常用命令

https://docs.docker.com/compose/reference/

服务控制

# 启动已停止的服务
docker-compose start

# 停止运行中的服务
docker-compose stop

# 重启服务
docker-compose restart

# 暂停服务
docker-compose pause

# 恢复暂停的服务
docker-compose unpause

配置和环境管理

# 使用指定环境文件
docker-compose --env-file .env.production up

# 使用不同的compose文件
docker-compose -f docker-compose.prod.yml up


# 验证compose文件语法
docker-compose config

# 验证并查看最终配置
docker-compose config --services

进入容器

# 进入运行中的容器
docker-compose exec service_name bash

# 以root用户进入
docker-compose exec -u root service_name bash