三、Docker:Compose安装、使用、文件结构、配置参数与命令详解

三、Docker:Compose安装、使用、文件结构、配置参数与命令详解_第1张图片

注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料,将在公众号CTO Plus发布,请关注公众号:CTO Plus

三、Docker:Compose安装、使用、文件结构、配置参数与命令详解_第2张图片 

 Docker-compose 是用于定义和运行多容器 Docker 应用程序的编排工具。使用 docker-compose 后不再需要逐一创建和启动容器。可以使用YML文件来配置应用程序需要的所有服务,然后使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。

Compose简介

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

安装Docker Compose

pip安装docker-compose

pip install docker-compose

三、Docker:Compose安装、使用、文件结构、配置参数与命令详解_第3张图片

Linux

Github 上下载它的二进制包来使用,最新发行的版本地址:Releases · docker/compose · GitHub

运行以下命令以下载 Docker Compose 的当前稳定版本:

curl -L "https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

通过替换 v2.15.1来安装其他版本的Compose

如果GitHub访问太慢,也可以通过执行下面的命令,高速安装 Docker Compose

curl -L https://get.daocloud.io/docker/compose/releases/download/v2.15.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

添加可执行权限

chmod +x /usr/local/bin/docker-compose

创建软链:

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

测试是否安装成功:docker-compose version

注意 对于 alpine,需要以下依赖包:py-pippython-devlibffi-devopenssl-devgcclibc-dev,和 make

Mac/Windows

Mac/Windows Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Windows 用户不需要单独安装 Compose

Docker-compose使用示例

通过docker-compose构建一个在docker中运行的基于python flask框架的web应用。确保已经安装了Docker Engine和Docker Compose。

1、定义Flask应用服务

目录结构

三、Docker:Compose安装、使用、文件结构、配置参数与命令详解_第4张图片

2、创建 Dockerfile 文件

composetest 目录中,创建一个名为 Dockerfile 的文件,内容如下:
 

FROM python:3.11
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
COPY . .
RUN pip install -r ./src/requirements.txt
WORKDIR /code/src
CMD ["python", "main.py"]

Dockerfile 内容解释:

  • FROM python:3.11: Python 3.11 映像开始构建镜像。
  • WORKDIR /code: 将容器的工作目录设置为 /code
  • COPY . .: . 项目中的当前目录复制到 . 镜像中的工作目录。
  • RUN pip install -r requirements.txt

复制 requirements.txt 并安装 Python 依赖项。

  • CMD ["flask", "run"]: 容器提供默认的执行命令为:flask run

使用flask run启动服务需要定义成app.py文件

三、Docker:Compose安装、使用、文件结构、配置参数与命令详解_第5张图片

比较简单的使用指定文件名启动flask服务
 

FROM python:3.11
COPY src/ /opt/src
WORKDIR /opt/src
RUN pip install -r requirements.txt
CMD ["python", "main.py"]

三、Docker:Compose安装、使用、文件结构、配置参数与命令详解_第6张图片

此种通过COPY的方式,在构建时静态复制到容器中的,即通过Dockerfile文件中的COPY src /opt/src命令实现物理主机中的源码复制到容器中,这样在后续物理主机src目录中代码的更改不会反应到容器中。

3、创建 docker-compose.yml

docker-compose.yml 配置文件内容

# yaml 配置
version'3'
services:
  web:
    build.
    ports:
     - "5000:5000"
  redis:
    image"redis:alpine"

Compose 文件定义了两个服务:web redis

  • Web容器:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000
  • Redis容器:该 redis 服务使用 Docker Hub 的公共 Redis 映像。

4、使用 Compose 命令构建和运行应用

docker-compose.yml文件所在目录下执行以下命令来启动应用程序:

docker-compose up

如果想在后台执行该服务可以加上 -d 参数:

docker-compose up -d

若不使用默认的docker-compose.yml 文件名:

docker-compose -f docker-compose-volumes.yml up -d

docker-compose up --build

5、添加文件绑定挂载volumes

编辑compose文件,可以通过volumes 关键字实现物理主机目录挂载到容器中的功能(同时删除Dockerfile中的COPY指令,不需要创建镜像时将代码打包进镜像,而是通过volums动态挂载,容器和物理host共享数据卷):

三、Docker:Compose安装、使用、文件结构、配置参数与命令详解_第7张图片

通过volumes(卷)将主机上的项目目录(dockercompose/src)挂载到容器中的/opt/src目录,允许即时修改代码,而无需重新构建镜像。

6、重新构建和运行应用程序

使用更新的compose文件构建应用程序,然后运行

$ docker-compose up -d

Docker-compose文件结构

# docker-compose.yaml 配置实例

version: '3'
services:
  web:
    build: .
    ports:
   - "5000:5000"
    volumes:
   - .:/code
    - logvolume01:/var/log
    links:
   - redis
  
# redis:
  #  image: redis

  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]
volumes:
  logvolume01: {}

networks:
  frontend:
  backend:
 
volumes:
  db-data:

Docker Compose yml常用服务配置指令

Compose文件是一个定义服务,网络和卷的YAML文件。 Compose文件的默认文件名为docker-compose.yml,也可以docker-compose.yaml

docker运行一样,默认情况下,Dockerfile中指定的选项(例如CMDEXPOSEVOLUMEENV)都被遵守,不需要在docker-compose.yml中再次指定它们。

同时可以使用类似Bash$ {VARIABLE} 语法在配置值中使用环境变量,有关详细信息,请参阅:变量替换Compose File Specificationhttps://docs.docker.com/compose/compose-file/#variable-substitution

version

指定本 yml 依从的 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文件的目录路径,或者是git仓库的URL。 
    当提供的值是相对路径时,它被解释为相对于当前compose文件的位置。 该目录也是发送到Docker守护程序构建镜像的上下文。
  • dockerfile:指定构建镜像的 Dockerfile 文件名。Compose将使用备用文件来构建。 还必须指定构建路径。
  • args:添加构建镜像的参数,这是只能在构建过程中访问的环境变量。

在Dockerfile中指定要使用的参数:

ARG buildno

ARG password

 

RUN echo "Build number: $buildno"

RUN script-requiring-password.sh "$password"

在args键下指定参数,可以传递映射或列表:

build:

  context: .

  args:

    buildno: 1

    password: secret

 

build:

  context: .

  args:

    - buildno=1

- password=secret

注意:YAML布尔值(true,false,yes,no,on,off)必须用引号括起来,以便解析器将它们解释为字符串。

  • labels:设置构建镜像的标签。
  • target:多层构建,可以指定构建哪一层。

webapp服务将会通过./dir目录下的Dockerfile-alternate文件构建容器镜像。 
如果同时指定image和build,则compose会通过build指定的目录构建容器镜像,而构建的镜像名为image中指定的镜像名和标签。

build: ./dir

image: webapp:tag

这将由./dir构建的名为webapp和标记为tag的镜像。

cap_addcap_drop

添加或删除容器拥有的宿主机的内核功能。

cap_add:

  - ALL # 开启全部权限

cap_drop:

  - SYS_PTRACE # 关闭 ptrace权限

cgroup_parent

为容器指定父 cgroup 组,意味着将继承该组的资源限制。

cgroup_parent: m-executor-abcd

container_name

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

container_name: my-web-container

由于Docker容器名称必须是唯一的,因此如果指定了自定义名称,则无法将服务扩展到多个容器。

command

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

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

command: bundle exec thin -p 3000

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

注意:web 服务不会等待 redis db 完全启动 之后才启动。

deploy

指定与服务的部署和运行有关的配置。只在 swarm 模式下才会有用。

version: "3.7"
services:
  redis:
    image: redis:alpine
    deploy:
      mode:replicated
      replicas: 6
      endpoint_mode: dnsrr
      labels: 
        description: "This redis service label"
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s

可以选参数:

endpoint_mode:访问集群服务的方式。

endpoint_mode: vip

# Docker 集群服务一个对外的虚拟 ip。所有的请求都会通过这个虚拟 ip 到达集群服务内部的机器。

endpoint_mode: dnsrr

# DNS 轮询(DNSRR)。所有的请求会自动轮询获取到集群 ip 列表中的一个 ip 地址。

labels:在服务上设置标签。可以用容器上的 labels(跟 deploy 同级的配置) 覆盖 deploy 下的 labels

mode:指定服务提供的模式。

  • replicated:复制服务,复制指定服务到集群的机器上。
  • global:全局服务,服务将部署至集群的每个节点。
  • 图解:下图中黄色的方块是 replicated 模式的运行情况,灰色方块是 global 模式的运行情况。

三、Docker:Compose安装、使用、文件结构、配置参数与命令详解_第8张图片

replicasmode  replicated 时,需要使用此参数配置具体运行的节点数量。

resources:配置服务器资源使用的限制,例如上例子,配置 redis 集群运行需要的 cpu 的百分比 内存的占用。避免占用资源过高出现异常。

restart_policy:配置如何在退出容器时重新启动容器。

  • condition:可选 noneon-failure 或者 any(默认值:any)。
  • delay:设置多久之后重启(默认值:0)。
  • max_attempts:尝试重新启动容器的次数,超出次数,则不再尝试(默认值:一直重试)。
  • window:设置容器重启超时时间(默认值:0)。

rollback_config:配置在更新失败的情况下应如何回滚服务。

  • parallelism:一次要回滚的容器数。如果设置为0,则所有容器将同时回滚。
  • delay:每个容器组回滚之间等待的时间(默认为0s)。
  • failure_action:如果回滚失败,该怎么办。其中一个 continue 或者 pause(默认pause)。
  • monitor:每个容器更新后,持续观察是否失败了的时间 (ns|us|ms|s|m|h)(默认为0s)。
  • max_failure_ratio:在回滚期间可以容忍的故障率(默认为0)。
  • order:回滚期间的操作顺序。其中一个 stop-first(串行回滚),或者 start-first(并行回滚)(默认 stop-first )。

update_config:配置应如何更新服务,对于配置滚动更新很有用。

  • parallelism:一次更新的容器数。
  • delay:在更新一组容器之间等待的时间。
  • failure_action:如果更新失败,该怎么办。其中一个 continuerollback 或者pause (默认:pause)。
  • monitor:每个容器更新后,持续观察是否失败了的时间 (ns|us|ms|s|m|h)(默认为0s)。
  • max_failure_ratio:在更新过程中可以容忍的故障率。
  • order:回滚期间的操作顺序。其中一个 stop-first(串行回滚),或者 start-first(并行回滚)(默认stop-first)。

:仅支持 V3.4 及更高版本。

devices

指定设备映射列表。

devices:

  - "/dev/ttyUSB0:/dev/ttyUSB0"

dns

自定义 DNS 服务器,可以是单个值或列表的多个值。

dns: 8.8.8.8

dns:

  - 8.8.8.8

  - 9.9.9.9

dns_search

自定义 DNS 搜索域。可以是单个值或列表。

dns_search: example.com

dns_search:

  - dc1.example.com

  - dc2.example.com

entrypoint

覆盖容器默认的 entrypoint

entrypoint: /code/entrypoint.sh

也可以是以下格式:

entrypoint:

    - php

    - -d

    - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so

    - -d

    - memory_limit=-1

    - vendor/bin/phpunit

env_file

从文件添加环境变量。可以是单个值或列表的多个值。

env_file: .env

也可以是列表格式:

env_file:

  - ./common.env

  - ./apps/web.env

  - /opt/secrets.env

environment

添加环境变量。可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True False只给定名称的变量会自动获取它在 Compose 主机上的值,可以用来防止泄露不必要的数据。

environment:

  RACK_ENV: development

  SHOW: 'true'

environment:

  RACK_ENV: development

  SHOW: 'true'

  SESSION_SECRET:

environment:

  - RACK_ENV=development

  - SHOW=true

  - SESSION_SECRET

注意:如果的服务指定了build选项,那么在构建过程中通过environment定义的环境变量将不会起作用。 将使用build的args子选项来定义构建时的环境变量。

expose

暴露端口,但不映射到宿主机,只被连接的服务访问。

仅可以指定内部端口为参数:

expose:

 - "3000"

 - "8000"

extra_hosts

添加主机名映射。类似 docker client --add-host

extra_hosts:

 - "somehost:192.123.123.82"

 - "otherhost:50.45.45.56"

以上会在此服务的内部容器中 /etc/hosts 创建一个具有 ip 地址和主机名的映射关系:

192.123.123.82  somehost

50.45.45.56   otherhost

healthcheck

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

healthcheck:

  test: ["CMD", "curl", "-f", "http://localhost"] # 设置检测程序

  interval: 1m30s # 设置检测间隔

  timeout: 10s # 设置检测超时时间

  retries: 3 # 设置重试次数

  start_period: 40s # 启动后,多少秒开始启动检测程序

image

指定容器运行的镜像,可以是镜像仓库/标签或者镜像id(或者id的前一部分)。以下格式都可以:

image: redis

image: ubuntu:14.04

image: tutum/influxdb

image: example-registry.com:4000/postgresql

image: a4bc65fd # 镜像id

如果镜像不存在,Compose将尝试从官方镜像仓库将其pull下来,如果还指定了build,在这种情况下,它将使用指定的build选项构建它,并使用image指定的名字和标记对其进行标记。

logging

服务的日志记录配置。

driver:指定服务容器的日志记录驱动程序,默认值为json-file。有以下三个选项

driver: "json-file"

driver: "syslog"

driver: "none"

仅在 json-file 驱动程序下,可以使用以下参数,限制日志得数量和大小。

logging:

  driver: json-file

  options:

    max-size: "200k" # 单个文件大小为200k

    max-file: "10" # 最多10个文件

当达到文件限制上限,会自动删除旧得文件。

syslog 驱动程序下,可以使用 syslog-address 指定日志接收地址。

logging:

  driver: syslog

  options:

    syslog-address: "tcp://192.168.0.42:123"

network_mode

设置网络模式。

network_mode: "bridge"

network_mode: "host"

network_mode: "none"

network_mode: "service:[service name]"

network_mode: "container:[container name/id]"

networks

配置容器连接的网络,引用顶级 networks 下的条目

services:

  some-service:

    networks:

      some-network:

        aliases:

         - alias1

      other-network:

        aliases:

         - alias2

networks:

  some-network:

    # Use a custom driver

    driver: custom-driver-1

  other-network:

    # Use a custom driver which takes special options

    driver: custom-driver-2

aliases :同一网络上的其他容器可以使用服务名称或此别名来连接到对应容器的服务。

restart

  • no:是默认的重启策略,在任何情况下都不会重启容器。
  • always:容器总是重新启动。
  • on-failure:在容器非正常退出时(退出状态非0),才会重启容器。
  • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

restart: "no"

restart: always

restart: on-failure

restart: unless-stopped

注:swarm 集群模式,请改用 restart_policy

secrets

存储敏感数据,例如密码:

version: "3.1"

services:

mysql:

  image: mysql

  environment:

    MYSQL_ROOT_PASSWORD_FILE: /run/secrets/my_secret

  secrets:

    - my_secret

secrets:

  my_secret:

    file: ./my_secret.txt

security_opt

修改容器默认的 schema 标签。

security-opt

  - label:user:USER   # 设置容器的用户标签

  - label:role:ROLE   # 设置容器的角色标签

  - label:type:TYPE   # 设置容器的安全策略标签

  - label:level:LEVEL  # 设置容器的安全等级标签

stop_grace_period

指定在容器无法处理 SIGTERM (或者任何 stop_signal 的信号),等待多久后发送 SIGKILL 信号关闭容器。

stop_grace_period: 1s # 等待 1

stop_grace_period: 1m30s # 等待 1 30

默认的等待时间是 10 秒。

stop_signal

设置停止容器的替代信号。默认情况下使用 SIGTERM

以下示例,使用 SIGUSR1 替代信号 SIGTERM 来停止容器。

stop_signal: SIGUSR1

sysctls

设置容器中的内核参数,可以使用数组或字典格式。

sysctls:

  net.core.somaxconn: 1024

  net.ipv4.tcp_syncookies: 0

sysctls:

  - net.core.somaxconn=1024

  - net.ipv4.tcp_syncookies=0

tmpfs

在容器内安装一个临时文件系统。可以是单个值或列表的多个值。

tmpfs: /run

tmpfs:

  - /run

  - /tmp

ulimits

覆盖容器默认的 ulimit

ulimits:

  nproc: 65535

  nofile:

    soft: 20000

    hard: 40000

volumes

将主机的数据卷或文件挂载到容器里。卷挂载路径设置。可以设置宿主机路径 HOST:CONTAINER 或加上访问模式 HOST:CONTAINER:ro,挂载数据卷的默认权限是读写(rw),可以通过ro指定为只读。 可以在主机上挂载相对路径,该路径将相对于当前正在使用的Compose配置文件的目录进行扩展。 相对路径应始终以 . 或者 .. 开始。

version: "3.7"

services:

  db:

    image: postgres:latest

    volumes:

      - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"

      - "/localhost/data:/var/lib/postgresql/data"

volumes:

  # 只需指定一个路径,让引擎创建一个卷

  - /var/lib/mysql

  # 指定绝对路径映射

  - /opt/data:/var/lib/mysql

  # 相对于当前compose文件的相对路径

  - ./cache:/tmp/cache

  # 用户家目录相对路径

  - ~/configs:/etc/configs/:ro

  # 命名卷

  - datavolume:/var/lib/mysql

但是,如果要跨多个服务并重用挂载卷,请在顶级volumes关键字中命名挂在卷,但是并不强制,如下的示例亦有重用挂载卷的功能,但是不提倡。

version: "3"

services:

  web1:

    build: ./web/

    volumes:

      - ../code:/opt/web/code

  web2:

    build: ./web/

    volumes:

      - ../code:/opt/web/code

注意:通过顶级volumes定义一个挂载卷,并从每个服务的卷列表中引用它, 这会替换早期版本的Compose文件格式中volumes_from

version: "3"

services:

  db:

    image: db

    volumes:

      - data-volume:/var/lib/db

  backup:

    image: backup-service

    volumes:

      - data-volume:/var/lib/backup/data

volumes:

  data-volume:

links

链接到另一个服务中的容器。指定服务名称和链接别名(SERVICE:ALIAS),或者仅指定服务名称。

web:

  links:

   - db

   - db:database

   - redis

在当前的web服务的容器中可以通过链接的db服务的别名database访问db容器中的数据库应用,如果没有指定别名,则可直接使用服务名访问。

链接不需要启用服务进行通信 - 默认情况下,任何服务都可以以该服务的名称到达任何其他服务。 (实际是通过设置/etc/hosts的域名解析,从而实现容器间的通信。故可以像在应用中使用localhost一样使用服务的别名链接其他容器的服务,前提是多个服务容器在一个网络中可路由联通)

links也可以起到和depends_on相似的功能,即定义服务之间的依赖关系,从而确定服务启动的顺序。

external_links

外部链接 :目的是让Compose能够连接那些不在docker-compose.yml中定义的单独运行容器,甚至并非 Compose 管理的容器。参数格式跟 links 类似

external_links:

 - redis_1

 - project_db_1:mysql

 - project_db_1:postgresql

ports

暴露端口信息。

常用的简单格式:使用宿主:容器 (HOST:CONTAINER)格式或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。

注意:当使用 HOST:CONTAINER 格式来映射端口时,如果使用的容器端口小于 60 可能会得到错误得结果,因为 YAML 将会解析 xx:yy 这种数字格式为 60 进制。所以建议采用字符串格式。

ports:

 - "3000"

 - "3000-3005"

 - "8000:8000"

 - "9090-9091:8080-8081"

 - "49100:22"

 - "127.0.0.1:8001:8001"

 - "127.0.0.1:5000-5010:5000-5010"

 - "6060:6060/udp"

在v3.2中ports的长格式的语法允许配置不能用短格式表示的附加字段。 
长格式:

ports:

  - target: 80

    published: 8080

    protocol: tcp

mode: host

target:容器内的端口 
published:物理主机的端口 
protocol:端口协议(tcp或udp) 
mode:host 和ingress 两总模式,host用于在每个节点上发布主机端口,ingress 用于被负载平衡的swarm模式端口。

pid

将PID模式设置为主机PID模式。 这就打开了容器与主机操作系统之间的共享PID地址空间。 使用此标志启动的容器将能够访问和操作裸机的命名空间中的其他容器,反之亦然。即打开该选项的容器可以相互通过进程 ID 来访问和操作。

pid: "host"

Docker-compose命令大全

默认使用docker-compose.yml构建镜像

docker-compose build

不带缓存的构建

docker-compose build --no-cache

指定不同yml文件模板用于构建镜像

docker-compose build -f docker-compose1.yml

列出Compose文件构建的镜像

docker-compose images

启动所有编排容器服务

docker-compose up -d

查看正在运行中的容器

docker-compose ps

查看所有编排容器,包括已停止的容器

docker-compose ps -a

进入指定容器执行命令

docker-compose exec nginx bash

docker-compose exec web python manage.py migrate –noinput

查看web容器的实时日志

docker-compose logs -f web

停止所有up命令启动的容器

docker-compose down

停止所有up命令启动的容器,并移除数据卷

docker-compose down -v

重新启动停止服务的容器

docker-compose restart web

暂停web容器

docker-compose pause web

恢复web容器

docker-compose unpause web

删除web容器,删除前必需停止stop web容器服务

docker-compose rm web

查看各个服务容器内运行的进程

docker-compose top

参考资料

  • Docker 官网:https://www.docker.com
  • Docker DocsDocker Docs: How to build, share, and run applications
  • Docker Blog: Blog | Docker
  • Docker Store: https://store.docker.com
  • Docker Cloud: https://cloud.docker.com
  • Docker Hub: https://hub.docker.com
  • Docker GitHub: https://github.com/moby/moby
  • Docker Release: Docker release notes
  • Docker EngineDocker Engine 23.0 release notes
  • Docker DesktopDocker Desktop release notes
  • Docker HubDocker Hub release notes
  • Docker Compose overview:Docker Compose overview
  • Docker ComposeDocker Compose release notes
  • Use Docker Compose:https://docs.docker.com/get-started/08_using_compose/
  • Docker Buildhttps://docs.docker.com/build/release-notes/
  • Docker Fag: Docker frequently asked questions (FAQ)
  • Docker SDK API: Develop with Docker Engine SDKs
  • Docker CEGitHub - docker/docker-ce: This repository is deprecated and will be archived (Docker CE itself is NOT deprecated) see the https://github.com/docker/docker-ce/blob/master/README.md


更多资料 · 微信公众号搜索【CTO Plus】关注后,获取更多,我们一起学习交流。

关于公众号的描述访问如下链接


关于Articulate“做一个知识和技术的搬运工。做一个终身学习的爱好者。做一个有深度和广度的技术圈。”一直以来都想把专业领域的技https://mp.weixin.qq.com/s/0yqGBPbOI6QxHqK17WxU8Q

你可能感兴趣的:(docker,容器,docker-compose)