docker-compose日常使用问题汇总(配置文件结构篇)

本文详细解读了DockerComposeV3配置文件的结构,包括version、services中的服务配置、networks网络定义以及volumes数据卷,重点介绍了服务的启动配置、镜像选择、网络连接和部署策略。

367b16f78356509a15f6bb76e752e3df.png

本文主要参考官方文档对目前最新的V3版docker-compose配置文件进行一个总结。都是一些概念性的内容,不涉及具体操作。

56b1d7482fbddbdba4d822de3b972081.png

Docker Compose配置文件是一个用于定义服务、网络和数据卷的YAML文件。其中服务定义了该服务启动的每个容器的配置,就像将命令行参数传递给docker run一样,网络和数据卷的定义类似于docker network create和docker volume create。跟docker run一样,如果在Dockerfile中通过诸如CMD、EXPOSE、VOLUME和ENV这些指令指定了相关选项,那么在默认情况下,不需要在docker-compose.yml中再次指定它们。下面是从官网引过来的一个Compose配置文件的示例,可以先大致了解一下它的结构:

version: "3.8"
services:
  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure


  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints:
          - "node.role==manager"


  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - "5000:80"
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure


  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - "5001:80"
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure


  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
      placement:
        constraints:
          - "node.role==manager"


  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints:
          - "node.role==manager"


networks:
  frontend:
  backend:


volumes:
  db-data:

顶层的versionservicesnetworksvolumes将Compose配置文件分为四个部分,其中version指定Compose配置文件的版本,services定义服务,networks定义网络,volumes定义数据卷。

3dbfb7dab49e8427ff68aeea277cf20f.png

二、服务配置

服务定义了该服务启动的每个容器的配置,就像将命令行参数传递给docker run一样。比如以下配置:

services:
  redis:
    image: redis:alpine

services下的redis是用户自定义的服务名称,redis下的image只是众多服务配置项中的其中一个,意思是指定镜像名称或id。下面就对服务的相关配置项进行一个总结。

1.build

在构建时应用的配置项。一般直接指定Dockerfile所在文件夹路径,可以是绝对路径,或者相对于Compose配置文件的路径。可以指定为包含构建上下文(context)路径的字符串。例如:

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

也可以使用context指定上下文路径,使用dockerfile基于上下文路径指定Dockerfile文件,使用args指定构建参数。例如:

version: "3.8"
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1

如果同时指定了buildimage。例如:

build: ./dir
image: webapp:tag

Compose会在./dir目录下构建一个名为webapp,标签为tag的镜像。

使用docker stack deploy时的注意事项:在swarm mode下部署堆栈时,build配置项被忽略。因为docker stack命令不会在部署之前构建镜像。
(1)context

指定包含Dockerfile的目录路径或git仓库url。该目录是发送给Docker守护进程(Daemon)的构建上下文(context)。当配置的值是相对路径时,它将被解释为相对于Compose配置文件的路径。例如:

build:
  context: ./dir

指定上下文为Compose配置文件目录下的dir目录。

(2)dockerfile

指定Dockerfile文件。Compose会使用指定的Dockerfile文件构建镜像,但必须要指定构建上下文路径。例如:

build:
  context: .
  dockerfile: Dockerfile-alternate

Compose会使用Compose配置文件所在目录下名为Dockerfile-alternate的Dockerfile文件构建镜像。

(3)args

添加构建参数,这些只能在构建过程中访问的环境变量。首先在Dockerfile文件中指定参数:

ARG buildno
ARG gitcommithash


RUN echo "Build number: $buildno"
RUN echo "Based on commit: $gitcommithash"

然后build中指定参数,以下两种写法都可以:

build:
  context: .
  args:
    buildno: 1
    gitcommithash: cdc3b19
build:
  context: .
  args:
    - buildno=1
    - gitcommithash=cdc3b19

这时构建过程中使用的参数的值为args指定的值。在指定构建参数时也可以不指定值,在这种情况下,构建过程中使用的参数的值为运行Compose的环境中的值。例如:

args:
  - buildno
  - gitcommithash

使用布尔值时的注意事项:YMAL中布尔类型的值("true""false""yes""no""on""off")必须用引号引起来,以便解析器将它们解释为字符串。

未完待续。。。

d1ea4f5c2387b8db73789e28e64ddd23.gif

### 服务器 Docker-Compose 配置及部署教程 #### 1. 环境准备 在开始配置和部署之前,需要确保服务器已经安装了 DockerDocker Compose 工具。如果尚未完成安装,可以按照以下方法操作。 通过 `yum` 或其他包管理器安装 Docker Compose[^1]: ```bash sudo yum install -y docker-compose ``` 对于更详细的安装过程,也可以参考官方文档或其他资料中的说明[^3]。例如,在某些情况下可能需要手动下载并设置权限: ```bash curl -L "https://github.com/docker/compose/releases/download/v2.x.x/docker-compose-$(uname -s)-$(uname -m)" \ -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose ``` #### 2. 创建 Docker Compose 文件 Docker Compose 使用 YAML 格式的文件来定义服务及其依赖关系。下面是一个简单的示例配置文件: ```yaml version: '3' services: web: image: nginx:latest ports: - "80:80" volumes: - ./html:/usr/share/nginx/html restart: always ``` 上述配置表示启动一个 Nginx 容器,并将其端口映射到主机的 80 端口上,同时挂载本地目录作为静态资源路径[^2]。 #### 3. 启动服务 创建好 `docker-compose.yml` 文件之后,可以通过以下命令启动服务: ```bash docker-compose up -d ``` 该命令会以后台模式运行所有指定的服务实例。如果需要查看日志或者调试问题,则可以直接去掉 `-d` 参数以交互方式运行[^4]。 #### 4. 常见命令汇总 以下是常用的几个 Docker Compose 操作指令列表: - **停止服务**:`docker-compose down` - **重启服务**:`docker-compose restart` - **更新镜像和服务状态**:`docker-compose pull && docker-compose up --force-recreate -d` 这些基本功能可以帮助快速构建起一套完整的应用环境,无论是单机还是分布式架构都能很好地支持。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值