docker-compose.yml文件常用模版命令

本文详细介绍了Docker Compose的配置选项,包括command、container_name、networks、ports、volumes等,强调了如何设置环境变量、暴露端口、挂载数据卷,并探讨了容器间的依赖和健康检查。此外,还提到了Docker Swarm模式下的配置特性,如configs和deploy。通过示例,展示了如何编写和使用docker-compose.yml文件,以实现高效管理和部署容器化应用。

注:在编写docker-compose.yml文件时,所有的冒号(:)、短横线(-)后面都需要加一个空格。

1、command

覆盖容器启动后默认执行的命令

command: echo "hello"

2、container_name

指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式

container_name: docker-web-container

3、configs

仅用于Swarm mode

4、deploy

仅用于Swarm mode

5、devices

指定设备映射关系

devices:
  - "/dev/dir:/dev/dir"

6、depends_on

解决容器的依赖、启动先后,容器之间的通讯的问题。

7、links

连接到其他容器。注意:不推荐使用该指令,建议使用depends_on。

应该使用docker network,建立网络,而docker run --network来连接特定网络。

或者使用version: ‘2’ 和更高版本的docker-compose.yml直接定义自定义网络并使用。

8、dns

自定义DNS服务器。可以是一个值,也可以是一个列表。

dns: 8.8.8.8
dns: 
  - 8.8.8.8
  - 114.114.114.114

9、environment

设置环境变量。可以使用数组或字典两种格式。只给定名称的变量会自动获取运行Compose主机上对应变量的值,可以用来防止泄露不必要的数据。

environment:
   MYSQL_ROOT_PASSWORD: 666666

10、expose

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

11、extra_hosts

类似Docker中的–add-host参数,指定额外的host名称映射信息。会在启动后的服务容器中/etc/hosts文件中添加一个条目。如:8.8.8.8 googledns

12、healthcheck

通过命令检查容器是否健康运行

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3

13、image

指定为镜像名或镜像ID,如果镜像在本地不存在,Compose将会尝试拉取这个镜像

14、labels

为容器添加Docker元数据(metadata)信息。例如可以为容器添加辅助说明信息。

15、network_mode

设置网络模式。使用和docker run的–network参数一样的值。

network_mode: "bridge"
network_mode: "host"
network_mode: "none"

16、networks

配置容器连接的网络

networks:
  network-demo

17、ports

暴露端口信息,使用宿主端口:容器端口(HOST:CONTAINER)格式,或者仅仅指定容器的端口(宿主将会随机选择端)都可以。

ports:
      - "80:80"
      - "443:443"
      - "8081:8081"

18、volumes

数据卷所挂载路径设置,可以设置宿主机路径,同时支持相对路径

volumes:
      - ../Site:/data/www:rw
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
      - ./nginx/cert:/etc/nginx/cert:ro
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/phpcgi.conf:/etc/nginx/phpcgi.conf:ro
      - ./nginx/fastcgi.conf:/etc/nginx/fastcgi.conf:ro
      - ./nginx/pathinfo.conf:/etc/nginx/pathinfo.conf:ro
      - ../logs/nginx:/var/log/nginx

19、ulimits

指定容器的ulimits限制值。

例如,指定最大进程数为65535,指定文件句柄数为20000(软限制,应用可以随时修改,不能超过硬限制)和 40000(系统硬限制,只能root用户提高)

ulimits:
  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000

20、entrypoint

指定服务容器启动后执行的入口文件

entrypoint: /code/entrypoint.sh

21、user

指定容器中运行应用的用户名

22、working_dir

指定容器中工作目录

working_dir: /data/www

23、domainname

指定容器中搜索域名

domainname: your_domain.com

24、hostname

指定容器中主机名

25、mac_address

指定容器中mac地址

mac_address: 01-02-22-0A-0B

26、privileged

允许容器中运行一些特权命令

privileged: true

27、restart

指定容器退出后的重启策略为始终重启。在生产环境中推荐配置为 always 或者 unless-stopped

restart: always

28、read_only

以只读模式挂载容器的root文件系统,意味着不能对容器内容进行修改

read_only: true

29、stdin_open

打开标准输入,可以接受外部输入

stdin_open: true

30、tty

模拟一个伪终端

tty: true
<think>我们被要求提供docker-compose.yml文件的模板或示例。根据引用[1]和引用[3],我们可以构建一个示例模板。 引用[1]告诉我们docker-compose.ymlDocker Compose的核心配置文件,用于定义多容器应用的服务、网络、卷等资源。 引用[3]提供了一个web服务的示例,包括镜像、容器名称、端口映射、卷映射、环境变量、内存限制、重启策略、日志配置和网络连接。 同时,引用[2]详细介绍了docker-compose.yml的顶级元素,包括version、services、networks和volumes,并提到了一些高级配置技巧,如资源限制和多环境配置。 因此,我们可以综合这些信息,编写一个包含多个服务的docker-compose.yml示例模板,并包含必要的注释说明。 注意:在docker-compose.yml中,注释使用#符号。 我们将构建一个包含两个服务的示例:一个web服务(使用Nginx)和一个db服务(使用PostgreSQL)。同时,我们还会配置网络和卷。 另外,根据引用[2],我们需要注意版本(version)的选择。目前较新的版本是3.8(或更高),但具体版本取决于Docker引擎的版本。这里我们选择版本3.8。 下面是一个示例模板:</think>以下是一个标准的 `docker-compose.yml` 文件模板及详细说明,适用于多容器应用部署: ```yaml version: '3.8' # Docker Compose 版本(推荐3.4+) services: web: # 服务名称(自定义) image: nginx:latest # 官方镜像 container_name: my_web # 容器名称(可选) ports: - "8080:80" # 主机端口:容器端口 volumes: - ./html:/usr/share/nginx/html # 主机目录:容器目录 - ./nginx.conf:/etc/nginx/nginx.conf # 配置文件映射 environment: - TZ=Asia/Shanghai # 时区设置 - ENV=production # 自定义环境变量 networks: - app-network # 指定网络 restart: always # 自动重启策略 depends_on: - db # 依赖的服务 db: # 数据库服务 image: postgres:14 container_name: my_db environment: POSTGRES_USER: admin POSTGRES_PASSWORD: secret POSTGRES_DB: appdb volumes: - db_data:/var/lib/postgresql/data # 命名卷持久化数据 networks: - app-network deploy: # 资源限制(Docker Swarm模式) resources: limits: cpus: '0.50' memory: 512M volumes: # 声明持久化卷 db_data: driver: local # 默认存储驱动 networks: # 自定义网络 app-network: driver: bridge ``` ### 关键配置说明: 1. **服务定义** - `services` 包含所有容器,每个服务独立配置 - `depends_on` 控制启动顺序(仅控制启动顺序,不保证服务就绪)[^1] 2. **数据持久化** - `volumes` 挂载主机目录(`./path`)或命名卷(`db_data`) - 命名卷自动管理存储位置,适合数据库文件[^2] 3. **网络隔离** - 自定义 `app-network` 实现服务间安全通信 - 同网络内服务可直接通过服务名互访(如 `web` 服务中可用 `db` 访问数据库)[^2] 4. **环境变量** - `environment` 直接定义键值对 - 敏感数据建议使用 `.env` 文件文件内容:`POSTGRES_PASSWORD=secret`)[^1] 5. **资源限制** - `deploy.resources` 限制CPU/内存(需在Swarm集群生效) - 单机模式可用 `cpus: 0.5` 和 `mem_limit: 512m` 替代[^2] ### 最佳实践建议: 1. **版本控制** - 使用 `version: '3.8'` 兼容Docker Engine 19.03+ - 旧环境可降级为 `3.4`(支持Docker 17.09+)[^2] 2. **多环境配置** 通过多个文件叠加配置: ```bash # 生产环境启动 docker-compose -f docker-compose.yml -f docker-compose.prod.yml up ``` `docker-compose.prod.yml` 可覆盖调优参数(如日志压缩、资源限制)[^2] 3. **健康检查**(增强可靠性) 添加服务健康监测: ```yaml healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 30s timeout: 5s retries: 3 ``` > 完整示例文件可在 [Docker官方文档](https://docs.docker.com/compose/compose-file/) 查阅
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值