找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 20|回复: 0

[Docker-compose] 模板常用的命令

[复制链接]

1883

主题

520

回帖

7366

积分

管理员

积分
7366
发表于 2025-1-24 12:03:31 | 显示全部楼层 |阅读模式
注意:在编写docker-compose.yml文件时,所有的冒号(:)、短横线(-)后面都需要加一个空格,不然会出错。
1、build
指定Dockerfile所在文件夹的路径(可以是绝对路径,或者相对于docker-compose.yml文件的路径)。docker-compose将会利用它自动构建这个镜像,然后使用这个镜像。
使用 context 指定Dockerfile所在文件夹的路径。
使用 dockerfile 指定Dockerfile文件名
使用 args 指定构建镜像时的变量
  1. version: '3'
  2. services:
  3.   web:
  4.     build:
  5.       context: ./dir
  6.       dockerfile: Dockerfile
  7.       args:
  8.         timezone: 1
复制代码
2、container_name
指定容器名称,相当于docker run中的--name。默认将会使用 项目名称_服务名称_序号
  1. version: '3'
  2. services:
  3.   web:
  4.     container_name: web-1
复制代码
3、command
覆盖容器启动后默认执行的命令,覆盖DockerFile中的CMD或第三方镜像的启动命令
  1. version: '3'
  2. services:
  3.   web:
  4.     command: echo 'ok'
复制代码

4、environment
设置环境变量,相当于docker run中的-e。
可以使用数组或字典两种格式。只给定名称的变量会自动获取运行Compose主机上对应变量的值,可以用来防止泄露不必要的数据。
-e中值部分需要使用引号包裹, docker-compose.ymal中不需要用引号
  1. version: '3'
  2. services:
  3.   mysql:
  4.     environment:
  5.       - MYSQL_ROOT_PASSWORD=12345678
  6.       - MYSQL_DATABASE=my-db
  7.       
  8.     environment:
  9.       - MYSQL_ROOT_PASSWORD: 12345678
复制代码
5、env_file
设置环境变量的文件路径,相当于docker run中的--env-file,文件必须是.env,内容中key=value
  1. version: '3'
  2. services:
  3.   web:
  4.     env_file:
  5.       - envfile_path.env
复制代码
  1. # this is a environment file
  2. NAME=kk yy

  3. LENGHT=18.8
复制代码
6、image
指定为镜像名或镜像ID,如果镜像在本地不存在,Compose将会尝试拉取这个镜像。
  1. version: '3'
  2. services:
  3.   mysql:
  4.     image: mysql:5.7
复制代码
7、network_mode
设置网络模式。使用和docker run的--network参数一样的值
  1. version: '3'
  2. services:
  3.   mysql:
  4.     network_mode: 'host'
  5.     network_mode: 'none'
  6.     network_mode: 'bridge'
复制代码
8、networks
services中指定容器连接的网络,配置/创建network
  1. version: '3'
  2. services:
  3.   web:
  4.     networks:
  5.       - network-demo
  6. networks:
  7.   network-demo
复制代码
  1. version: '3'
  2. services:
  3.   web:
  4.     networks:
  5.       network-demo:
  6.                       ipv4_address: 172.30.5.70
  7. networks:
  8.   network-demo
复制代码
9、ports
暴露端口信息,使用宿主端口:容器端口(HOST:CONTAINER)格式,或者仅仅指定容器的端口(宿主将会随机选择端),相当与docker run中的-p
  1. version: '3'
  2. services:
  3.   web:
  4.     posrts:
  5.       - "8000:80"
  6.       - "8080:8080"
  7.       - "3000"
复制代码
10、volumes
数据卷所挂载路径设置,可以设置宿主机路径,同时支持相对路径,相当于docker run中的-v
:ro定义容器中的只读目录
  1. version: '3'
  2. services:
  3.   web:
  4.     volumes:
  5.       -v ./config:/root/config
  6.       -v /home/xx/config:/root/config
  7.       -v ./nginx.conf:/etc/nginx/nginx.conf:ro
复制代码
11、entrypoint
指定服务容器启动后执行的入口文件
  1. version: '3'
  2. services:
  3.   web:
  4.     entrypoint: /root/start.sh
复制代码
12、working_dir
指定容器中工作目录, 也可在Dockerfile中指定
  1. version: '3'
  2. services:
  3.   web:
  4.     working_dir: /root/proj
复制代码
13、hostname
指定容器主机名,相当于docker run中的-h
  1. version: '3'
  2. services:
  3.   web:
  4.     hostname: web-1
复制代码
14、restart
指定重启策略,相当于docker run中的--restart
  1. version: '3'
  2. services:
  3.   web:
  4.     restart: always
复制代码
15、引用环境变量
Compose模板文件支持动态读取宿主机的系统环境变量和当前目录下 .env 文件中的变量。
例如,下面Compose文件将从运行它的环境中读取变量${MONGO_VERSION}的值,并写入执行的指令中
  1. version: '3'
  2. services:
  3.   db:
  4.     image: "mongo:${MONGO_VERSION}"
复制代码
16、expose
暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定内部端口为参数。
  1. version: '3'
  2. services:
  3.   mysql:
  4.     expose:
  5.       - "3306"
复制代码
17、extra_hosts
类似Docker中的--add-host参数,指定额外的host名称映射信息。会在启动后的服务容器中/etc/hosts文件中添加一个条目。如:8.8.8.8 googledns
  1. version: '3'
  2. services:
  3.   mysql:
  4.     extra_hosts:
  5.       - "baidu:8000"
复制代码
18、healthcheck
通过命令检查容器是否正常运行
  1. version: '3'
  2. services:
  3.   mysql:
  4.     healthcheck:
  5.       test: ["CMD", "curl", "-f", "http://localhost"]
  6.       interval: 1m30s
  7.       timeout: 10s
  8.       retries: 3
复制代码
19、links
连接到其他容器。注意:不推荐使用该指令。
应该使用docker network,建立网络,而docker run --network来连接特定网络。
或者使用version: '2' 和更高版本的docker-compose.yml直接定义自定义网络并使用。
20、ulimits
指定容器的ulimits限制值。
例如,指定最大进程数为65535,指定文件句柄数为20000(软限制,应用可以随时修改,不能超过硬限制)和 40000(系统硬限制,只能root用户提高)
  1. version: '3'
  2. services:
  3.   mysql:
  4.     ulimits:
  5.       nproc: 65535
  6.       nofile:
  7.         soft: 20000
  8.         hard: 40000
复制代码
21、user
指定容器中运行应用的用户名
  1. version: '3'
  2. services:
  3.   mysql:
  4.     user: ubuntu
复制代码
22、links
链接到其它服务的中的容器,可以指定服务名称也可以指定链接别名(SERVICE:ALIAS),与 Docker 客户端的 --link 有一样效果,会连接到其它服务中的容器。
  1. version: '3'
  2. services:
  3.     web:
  4.       links:
  5.        - db
  6.        - db:database
  7.        - redis
复制代码
23、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

  1. version: "3.7"
  2. services:
  3.   web:
  4.     build: .
  5.     depends_on:
  6.       - db
  7.       - redis
  8.   redis:
  9.     image:redis
  10.   db:
  11.     image:postgres
复制代码



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表