Docker compose 使用

Docker Compose简化了多容器应用的管理,允许在一个配置文件中定义所有服务,并处理服务间的依赖关系。安装时要注意与Docker版本的对应。可以通过源码或pip安装,其中源码安装可自定义,pip安装快捷。使用示例展示了如何配置服务、网络和卷。常用配置选项如`version`、`build`、`command`、`depends_on`等,能定制容器的启动方式和行为。健康检查`healthcheck`则确保服务的稳定运行。

在使用docker-compose时,由于所有的容器都在同一个配置文件中定义,可以很方便地进行管理和部署,从而提高了开发效率和部署效率。同时,docker-compose还可以帮助我们管理容器之间的依赖关系,使得多个容器可以协同工作,从而构建一个完整的应用。
需要注意的是,docker-compose与docker有版本对应关系,因此在使用docker-compose时需要选择与已安装的docker版本相对应的docker-compose版本,否则可能会出现不兼容或无法正常工作的问题。建议使用与docker版本相匹配的最新版本的docker-compose。

1 安装

源码安装和pip安装是两种常见的安装方式,无论使用哪种安装方式,都需要注意docker-compose与docker的版本对应关系,以确保其能够正常运行。

1. 源码安装

源码安装通常需要从官方网站或其他可信源下载docker-compose的源代码,并按照相应的指示进行编译和安装。这种安装方式可以确保获得最新版本的docker-compose,并且可以根据自己的需求进行编译和定制。但是,源码安装需要一定的技术水平和时间成本,可能不适合所有人使用。

# daocloud下载docker-compose文件 
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 测试安装结果
docker-compose --version
2. pip安装

pip安装则是使用Python的包管理器pip来安装docker-compose。这种安装方式简单方便,可以快速获得最新版本的docker-compose。但是,pip安装可能会受到Python环境和依赖库的影响,需要确保系统中已经安装了必要的Python环境和依赖库。

sudo pip install docker-compose

2 使用示例

version: "3"  # 使用Docker Compose文件格式版本3

services:  # 定义服务列表

  redis:  # 定义redis服务
    image: redis:alpine  # 使用redis官方提供的alpine镜像
    ports:
      - "6379"  # 将redis容器的6379端口映射到主机的6379端口上
    networks:
      - frontend  # 定义容器使用的网络
    deploy:  # 定义服务的部署方式
      replicas: 2  # 定义容器副本数为2
      update_config:  # 定义更新策略
        parallelism: 2  # 最多同时更新2个容器
        delay: 10s  # 每次更新之间的时间间隔为10秒
      restart_policy:  # 定义重启策略
        condition: on-failure  # 容器失败时自动重启

  db:  # 定义db服务
    image: postgres:9.4  # 使用postgres官方提供的9.4版本镜像
    volumes:
      - db-data:/var/lib/postgresql/data  # 将主机上的db-data卷挂载到容器的/var/lib/postgresql/data目录上
    networks:
      - backend  # 定义容器使用的网络
    deploy:  # 定义服务的部署方式
      placement:
        constraints: [node.role == manager]  # 定义容器部署的约束条件,只能在manager节点上部署

networks:  # 定义网络列表
  frontend:  # 定义名为frontend的网络
  backend:  # 定义名为backend的网络

volumes:  # 定义卷列表
  db-data:  # 定义名为db-data的卷

执行 docker-compose up 命令来启动并运行整个应用程序。

3 配置详解

在 Docker Compose 中,通过编写一个 YAML 文件来描述容器的配置和启动方式。以下是一些常用的配置选项及其作用:

version

指定 Compose 的版本,也可以理解为 Docker Compose 支持的配置语法的版本。

build

指定为构建镜像上下文路径:
例如 webapp 服务,指定为从上下文路径 ./dir/Dockerfile 所构建的镜像:

version: "3.7"
services:
  webapp:
    build: ./dir

或者,作为具有在上下文指定的路径的对象,以及可选的 Dockerfile 和 args:

version: "3.7"
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1
      labels:
        - "com.example.description=Accounting webapp"
        - "com.example.department=Finance"
        - "com.example.label-with-empty-value"
      target: prod
  • context:上下文路径。
  • dockerfile:指定构建镜像的 Dockerfile 文件名。
  • args:添加构建参数,这是只能在构建过程中访问的环境变量。
  • labels:设置构建镜像的标签。
  • target:多层构建,可以指定构建哪一层。
command

覆盖容器启动的默认命令。

command: ["bundle", "exec", "thin", "-p", "3000"]
container_name

指定自定义容器名称,而不是生成的默认名称。

container_name: my-web-container
depends_on

设置依赖关系。

  • docker-compose up :以依赖性顺序启动服务。在以下示例中,先启动 db 和 redis ,才会启动 web。
  • docker-compose up SERVICE :自动包含 SERVICE 的依赖项。在以下示例中,docker-compose up web 还将创建并启动 db 和 redis。
  • docker-compose stop :按依赖关系顺序停止服务。在以下示例中,web 在 db 和 redis 之前停止。
version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres
expose

暴露端口,但不映射到宿主机,只被连接的服务访问。
仅可以指定内部端口为参数:

expose:
 - "3000"
 - "8000"
healthcheck

用于检测 docker 服务是否健康运行。

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"] # 设置检测程序
  interval: 1m30s # 设置检测间隔
  timeout: 10s # 设置检测超时时间
  retries: 3 # 设置重试次数
  start_period: 40s # 启动后,多少秒开始启动检测程序
network_mode

设置网络模式。

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
ulimits

覆盖容器默认的 ulimit。

ulimits:
  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值