docker-compose模板常用命令

一、network创建

1、docker-compose创建network

通过以下内容创建的network,名字为up_darklight

version: '2'
networks:
  darklight:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.30.5.0/24
          ip_range: 172.30.5.0/24
          gateway: 172.30.5.1

services:
  web:
    name: xxx
    networks:
      darklight:
        ipv4_address: 172.30.5.10

2、docker-compose使用已存在的network

external: true来指定使用已存在的network

version: '2'
networks:
  darklight:
    external: true

services:
  web:
    name: xxx
    networks:
      darklight:
        ipv4_address: 172.30.5.10

二、模板常用的命令

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

1、build

指定Dockerfile所在文件夹的路径(可以是绝对路径,或者相对于docker-compose.yml文件的路径)。docker-compose将会利用它自动构建这个镜像,然后使用这个镜像。

使用 context 指定Dockerfile所在文件夹的路径。

使用 dockerfile 指定Dockerfile文件名

使用 args 指定构建镜像时的变量

version: '3'
services: 
  web:
    build:
      context: ./dir
      dockerfile: Dockerfile
      args:
        timezone: 1

2、container_name

指定容器名称,相当于docker run中的--name。默认将会使用 项目名称_服务名称_序号

version: '3'
services: 
  web:
    container_name: web-1

3、command

覆盖容器启动后默认执行的命令,覆盖DockerFile中的CMD或第三方镜像的启动命令

version: '3'
services: 
  web:
    command: echo 'ok'

4、environment

设置环境变量,相当于docker run中的-e

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

-e中值部分需要使用引号包裹, docker-compose.ymal中不需要用引号

version: '3'
services: 
  mysql:
    environment:
      - MYSQL_ROOT_PASSWORD=12345678
      - MYSQL_DATABASE=my-db
      
    environment:
      - MYSQL_ROOT_PASSWORD: 12345678

5、env_file

设置环境变量的文件路径,相当于docker run中的--env-file,文件必须是.env,内容中key=value

version: '3'
services: 
  web:
    env_file:
      - envfile_path.env
# this is a environment file
NAME=kk yy

LENGHT=18.8

6、image

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

version: '3'
services: 
  mysql:
    image: mysql:5.7

7、network_mode

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

version: '3'
services: 
  mysql:
    network_mode: 'host'
    network_mode: 'none'
    network_mode: 'bridge'

8、networks

services中指定容器连接的网络,配置/创建network

version: '3'
services:
  web:
    networks: 
      - network-demo
networks:
  network-demo
version: '3'
services:
  web:
    networks: 
      network-demo:
      		ipv4_address: 172.30.5.70
networks:
  network-demo

9、ports

暴露端口信息,使用宿主端口:容器端口(HOST:CONTAINER)格式,或者仅仅指定容器的端口(宿主将会随机选择端),相当与docker run中的-p

version: '3'
services:
  web:
    posrts: 
      - "8000:80"
      - "8080:8080"
      - "3000"	

10、volumes

数据卷所挂载路径设置,可以设置宿主机路径,同时支持相对路径,相当于docker run中的-v

:ro定义容器中的只读目录

version: '3'
services:
  web:
    volumes:
      -v ./config:/root/config
      -v /home/xx/config:/root/config
      -v ./nginx.conf:/etc/nginx/nginx.conf:ro

11、entrypoint

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

version: '3'
services:
  web:
    entrypoint: /root/start.sh

12、working_dir

指定容器中工作目录, 也可在Dockerfile中指定

version: '3'
services:
  web:
    working_dir: /root/proj

13、hostname

指定容器主机名,相当于docker run中的-h

version: '3'
services:
  web:
    hostname: web-1

14、restart

指定重启策略,相当于docker run中的--restart

version: '3'
services:
  web:
    restart: always

15、引用环境变量

Compose模板文件支持动态读取宿主机的系统环境变量和当前目录下 .env 文件中的变量。

例如,下面Compose文件将从运行它的环境中读取变量${MONGO_VERSION}的值,并写入执行的指令中

version: '3'
services:
  db: 
    image: "mongo:${MONGO_VERSION}"

16、expose

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

version: '3'
services: 
  mysql:
    expose:
      - "3306"

17、extra_hosts

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

version: '3'
services: 
  mysql:
    extra_hosts:
      - "baidu:8000"

18、healthcheck

通过命令检查容器是否正常运行

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

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

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

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

20、ulimits

指定容器的ulimits限制值。

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

version: '3'
services: 
  mysql:
    ulimits:
      nproc: 65535
      nofile:
        soft: 20000
        hard: 40000

21、user

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

version: '3'
services: 
  mysql:
    user: ubuntu

链接到其它服务的中的容器,可以指定服务名称也可以指定链接别名(SERVICE:ALIAS),与 Docker 客户端的 --link 有一样效果,会连接到其它服务中的容器。

version: '3'
services: 
    web:
      links:
       - db
       - db:database
       - 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
version: "3.7"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image:redis
  db:
    image:postgres

参考博文: https://www.cnblogs.com/itoak/p/12925544.html

原文地址:https://www.cnblogs.com/linagcheng/p/14000245.html