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

这篇具有很好参考价值的文章主要介绍了三、Docker:Compose安装、使用、文件结构、配置参数与命令详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

 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安装、使用、文件结构、配置参数与命令详解

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

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

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

Mac/Windows

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

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

Docker-compose使用示例

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

1、定义Flask应用服务

目录结构

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

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安装、使用、文件结构、配置参数与命令详解

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

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

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

此种通过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

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

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

docker-compose up -d

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

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

docker-compose up --build

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

5、添加文件绑定挂载volumes

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

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

通过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_add,cap_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安装、使用、文件结构、配置参数与命令详解

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】关注后,获取更多,我们一起学习交流。

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


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

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

到了这里,关于三、Docker:Compose安装、使用、文件结构、配置参数与命令详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker_安装使用_容器镜像_Docker-compose_常用指令_网络配置

    相关概念 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署,环境不一定一致,会遇到各种问题。 Docker解决依赖的兼容问题: Docker允

    2024年02月02日
    浏览(58)
  • 使用docker/docker-compose通过自定义的redis.conf文件启动redis 7.2.3,附上docker-compose.yml的redis配置

    目录 一.复制以及使用自定义的redis.conf文件 1.在官网拷贝对应版本的配置文件内容新建redis.conf文件进行粘贴。(推荐) 2.也可以去官网下载对应版本的redis的tar.gz包,解压后在根目录下找到redis.conf文件复制也可也可。 二.配置redis.conf文件(这里有个小坑) 1.注释掉bind 127.0.0.1

    2024年02月03日
    浏览(59)
  • Docker Compose的常用命令与docker-compose.yml脚本属性配置

    注意:需要在docker-compose配置文件同目录下执行命令 不然提示如下: 下面命令可以输出 web服务 5000 端口所绑定的公共端口 会优雅地停止服务,即发送 SIGTERM 信号给容器,等待一段时间(默认为 10 秒)让容器执行清理操作,然后再发送 SIGKILL 信号强制关闭容器。这样可以确保

    2024年02月15日
    浏览(45)
  • 解析Docker与docker-compose中volume参数的使用

    目录 数据卷Volume的概念 数据挂载的实现方式 宿主机路径挂载在docker/docker-compose中的使用 卷标映射挂载在docker/docker-compose中的使用 A.匿名挂载 B.具名挂载 参考文献: 在docker内有个“数据卷持久化”的概念,也就是我们常说的“数据挂载”。它的作用是,将宿主机上的数据与

    2024年02月01日
    浏览(41)
  • docker、 docker-compose在Ubuntu下安装及其常用命令

    国内镜像源 docker官方国内镜像仓库地址 阿里云 个人ID获取https://cr.console.aliyun.com/#/accelerator 网易 科大 切换方法 编辑配置文件 没有 /etc/docker 文件夹就创建,没有 daemon.json 文件也创建。 复制以下内容写入文件 daemon.json 中 重启docker生效 以下连接 二选一 即可,推荐使用daocl

    2024年02月11日
    浏览(51)
  • Docker Compose的yaml文件配置

    1、第一步是确认应使用的Compose版本 (1)去看官方文档,根据给出的文档选择对应的Compose版本 https://docs.docker.com/compose/compose-file/compose-file-v3/ Compose和Docker Engine版本对比截图: (2)使用以下命令查看自己的docker engine版本 效果图: (3)由图可知我的Docker Engine版本为20.10.17,根据官方

    2024年02月11日
    浏览(54)
  • Docker Compose文件中配置说明及示例

    Docker Compose是用于定义和运行多个Docker容器应用程序的工具,其配置文件(docker-compose.yml)采用YAML格式。 以下是docker-compose.yml文件中的配置说明: version:指定Compose文件版本。 services:定义需要启动的服务及它们所需的镜像、端口映射、环境变量、挂载到主机上的目录等相关

    2024年02月15日
    浏览(46)
  • docker-compose安装成功但命令无法执行(没有报错)

    由于docker和docker-compose时间太久,不记得当时是如何下载的,但是在进行漏洞复现时发现docker-compose无法成功启动(命令执行无报错),目录不存在 查看docker-compose版本发现目录不存在 因此以为docker-compose并未成功下载 于是重新下载docker-compose,提示dokcer-compose已经存在了 但是

    2024年02月13日
    浏览(45)
  • nacos docker compose安装配置

    docker-compose.yml nacos_config数据库安装文件

    2024年02月09日
    浏览(42)
  • MySQL docker compose安装配置

    docker-compose.yml confmy.cnf

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包