Docker五部曲之四:Docker Compose

这篇具有很好参考价值的文章主要介绍了Docker五部曲之四:Docker Compose。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文翻译自官方文档。

Compose应用程序模型

Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以通过compose.yml文件来配置应用程序的服务,然后,使用一个命令,从配置中创建并启动所有服务。compose.yml文件的编写规范由Compose规范定义。Compose规范允许您定义与平台无关的基于容器的应用程序。这样的应用程序被设计为一组容器,这些容器必须与足够的共享资源和通信通道一起运行。

  • 服务:应用程序的组件被定义为服务。服务是一个抽象概念,通过一次或多次运行相同的容器镜像和配置在平台上实现。
  • 网络:服务通过网络相互通信。在Compose规范中,网络是一个平台功能抽象,用于在连接在一起的服务中的容器之间建立IP路由
  • 卷:服务将持久数据存储和共享到卷中。规范将这种持久化数据描述为具有全局选项的高级文件系统挂载。实际的特定于平台的实现细节被分组到卷定义中,并且可能部分地在某些平台上实现。
  • 配置:有些服务需要依赖于运行时或平台的配置数据。为此,规范定义了一个专用的配置概念。从服务容器的角度来看,配置与卷类似,因为它们是挂载到容器中的文件。但实际的定义涉及不同的平台资源和服务,这些资源和服务是由这种类型抽象出来的。
  • 项目:项目是应用程序规范在平台上的单独部署。使用顶级名称属性设置的项目名称用于将资源分组在一起,并将它们与其他应用程序或具有不同参数的相同Compose指定应用程序的其他安装隔离开来。

Docker五部曲之四:Docker Compose,Docker,docker,容器

Compose规范

顶层属性

顶级属性是由规范定义的,用于向后兼容。它只是提供信息。

service

  • build:指定用于从源创建容器镜像的构建配置,请看下文构建规范。
  • image:指定要从哪个镜像启动容器。
    image: redis
    image: redis:5
    image: redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398bc4b991aac7
    image: library/redis
    image: docker.io/library/redis
    image: my_private.registry:5000/redis
  • command:用于覆盖容器镜像声明的默认命令
command: bundle exec thin -p 3000
  • configs:见下文configs
  • container_name:指定自定义容器名称的字符串,如果Compose文件指定了container_name,则Compose不会将服务扩展到一个容器之外。
  • depends_on:表示服务之间的启动和关闭依赖关系。
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres
  • deploy:见下文部署规范
  • develop:见下文开发规范
  • entrypoint:声明了服务容器的默认入口点。这将覆盖服务的Dockerfile中的ENTRYPOINT指令。
entrypoint: /code/entrypoint.sh
  • env_file:见下文环境变量
  • environment:见下文环境变量
  • extends:见下文多compose.yml文件共享与扩展
  • ports:公开容器端口
ports:
  - "3000"
  - "3000-3005"
  - "8000:8000"
  - "9090-9091:8080-8081"
  - "49100:22"
  - "8000-9000:80"
  - "127.0.0.1:8001:8001"
  - "127.0.0.1:5000-5010:5000-5010"
  - "6060:6060/udp"
  • profiles:见下文Profiles
  • restart:定义平台在容器终止时应用的策略
    restart: "no"
    restart: always
    restart: on-failure
    restart: unless-stopped
  • volumes:定义可由服务容器访问的挂载主机路径或命名卷
services:
  backend:
    image: example/backend
    volumes:
      - type: volume
        source: db-data
        target: /data
        volume:
          nocopy: true
      - type: bind
        source: /var/run/postgres/postgres.sock
        target: /var/run/postgres/postgres.sock

volumes:
  db-data:

network

  • driver:指定该网络应使用哪个驱动程序
networks:
  db-data:
    driver: overlay
  • attachable:如果attachable设置为true,那么除了服务之外,独立容器应该能够连接到这个网络。如果一个独立容器连接到网络,它可以与服务和其他也连接到网络的独立容器通信。
networks:
  mynet1:
    driver: overlay
    attachable: true
  • external:如果设置为true
    • 指定在应用程序生命周期之外维护该网络的生命周期。Compose不会尝试创建这些网络,如果不存在则返回错误。
    • 除了名称以外的所有其他属性都无关紧要。如果Compose检测到任何其他属性,它会将Compose文件视为无效而拒绝。
services:
  proxy:
    image: example/proxy
    networks:
      - outside
      - default
  app:
    image: example/app
    networks:
      - default

networks:
  outside:
    external: true
  • internal:默认情况下,Compose提供到网络的外部连接。当该属性设置为true时,允许您创建外部隔离的网络。
  • name:为网络设置自定义名称
networks:
  network1:
    name: my-app-net

它也可以与外部属性一起使用来定义Compose应该检索的平台网络:

networks:
  network1:
    external: true
    name: "${NETWORK_ID}"

volumes

  • external:
    • 指定此卷已经存在于平台上,并且其生命周期在应用程序生命周期之外进行管理。然后Compose不会创建卷,如果卷不存在则返回错误。
    • 除了名称以外的所有其他属性都无关紧要。如果Compose检测到任何其他属性,它会将Compose文件视为无效而拒绝。
services:
  backend:
    image: example/database
    volumes:
      - db-data:/etc/data

volumes:
  db-data:
    external: true
  • name:设置卷的自定义名称
volumes:
  db-data:
    name: "my-app-data"

configs

如有需要可查看官网

secrets

如有需要可查看官网

环境变量

使用Compose,您可以通过多种方式在容器中设置环境变量。您既可以使用Compose文件,也可以使用CLI。

.env文件

Docker Compose中的.env文件是一个文本文件,用于定义环境变量,这些变量在运行Docker Compose up时应该对Docker容器可用。该文件通常包含环境变量的键值对,它允许您在一个地方集中和管理配置。如果需要存储多个环境变量,.env文件很有用。.env文件是在容器中设置环境变量的默认方法。env文件应该放在项目目录的根目录中,紧邻compose.yaml文件。

$ cat .env
TAG=v1.5

在compose.yml中可以直接引用.env文件中定义的变量:

$ cat compose.yml
services:
  web:
    image: "webapp:${TAG}"

您可以在撰写中使用多个.env文件。Docker Compose会按照指定的顺序读取它们。如果同一个变量在多个文件中定义,最后一个定义优先:

services:
  webapp:
    image: my-webapp-image
    env_file:
      - .env
      - .env.override

.env文件的语法如下:

  • 以#开头的行被当作注释处理,并被忽略。
  • 空白行江被忽略
  • 值类型应该被加引号,插值类型不加引号
  • ${VAR:-default} :VAR的值已设置且不为空,否则VAR的值为default
  • ${VAR-default}:VAR的值已设置,否则VAR的值为default
  • ${VAR:?error}:VAR的值已设置且不为空,否则异常退出
  • ${VAR?error}:VAR的值已设置,否则异常退出
  • ${VAR:+replacement}:如果VAR的值已设置且非空,则替换,否则为空
  • ${VAR+replacement}:如果VAR的值已设置且非空,则替换,否则为空

environment属性

您可以直接在Compose文件中设置环境变量,而无需使用.env文件,在Compose .yml中使用environment属性。。

web:
  environment:
    - DEBUG=1

主机shell中的环境变量

您可以在主机或执行docker compose命令的shell环境中使用现有的环境变量。如果未设置环境变量,Compose将使用空字符串代替。

Profiles(剖面)

通过剖面可以有选择地启动服务,帮助您调整Compose应用程序模型,以适应各种用途和环境。这是通过将每个服务分配给零个或多个剖面来实现的。服务通过profiles属性实现剖面,该属性接受一个剖面名称数组:

services:
  frontend:
    image: frontend
    profiles: [frontend]

  phpmyadmin:
    image: phpmyadmin
    depends_on: [db]
    profiles: [debug]

  backend:
    image: backend

  db:
    image: mysql

启动剖面

  • 启动指定剖面
docker compose --profile debug up
  • 启动多个剖面
docker compose --profile frontend --profile debug up

自动启动剖面和依赖项解析

如果在使用docker compose up时没有指定剖面,则只启动没有profiles属性的服务,此外,docker compose up不会启动不同剖面的依赖项,这意味着目标服务依赖的任何其他服务都应该:

  • 共享一个相同的剖面
  • 或通过显式的指定剖面来启动

多compose.yml文件共享与扩展

  • 分块
  • 扩展
  • 合并
  • 包含

构建规范

Compose可以从service下的build属性和image属性构建服务:

  • build:从自定义构建定义构建服务
  • image:从已存在镜像构建服务

不要同时使用buildimage属性,当这两个属性同时出现时,Compose会有一个默认的处理逻辑,并且这个逻辑用户可以自定义配置。

构建属性

build属性值可以是以下两种类型:

  • 构建上下文的路径字符串:在这种情况下Compose会在这个上下文中寻找一个规范的Dockerfile来进行构建。
  • 详细的构建定义:在这种情况下可以指定构建参数。

使用字符串语法,构建上下文可以构建为:

  • 一个相对路径。该路径必须为目录,且必须包含Dockerfile:
services:
  webapp:
    build: ./dir
  • Git存储库URL:
services:
  webapp:
    build: https://github.com/mycompany/example.git#branch_or_tag:subdirectory

build也可以是一个对象,其字段定义如下:

  • context:定义了一个包含Dockerfile的目录的路径,或者一个指向Git仓库的URL。
build:
  context: ./dir
  • dockerfile:指定Dockerfile:
build:
  context: .
  dockerfile: webapp.Dockerfile
  • dockerfile_inline:将Dockerfile内容定义为Compose文件中的内联字符串,该属性不能和dockerfile属性同时出现:
build:
  context: .
  dockerfile_inline: |
    FROM baseimage
    RUN some command
  • args:定义构建参数,即Dockerfile的ARG值:
build:
  context: .
  args:
    GIT_COMMIT: cdc3b19
  • target:定义要构建的阶段:
build:
  context: .
  target: prod

此外还有许多属性,详情请看官方文档。

部署规范

部署规范用于定义在部署时的资源配置等元数据,详情请看官方文档。

开发规范

开发规范用于定义本地开发时的开发钩子,以便加快本地开发工作流速度,详情请看官方文档。

Compose指令

docker compose up指令用于为服务创建、启动和附加容器。如果进程遇到错误,该命令的退出码为1。如果使用SIGINT(ctrl + C)或SIGTERM中断进程,则容器停止,退出代码为0。

docker compose up [OPTIONS] [SERVICE...]

常用的OPTIONS如下:

  • --attach/--no-attachdocker compose up命令聚合每个容器的输出。可以使用--attach标志选择要附加的服务子集,或者使用--no-attach排除某些服务,以防止输出被一些冗长的服务淹没。
  • --detach:当命令退出时,所有容器都停止。运行docker compose up --detach会在后台启动容器,并让它们继续运行。
  • --no-recreate:如果一个服务有现有的容器,并且该服务的配置或映像在容器创建后发生了更改,docker compose up会通过停止并重新创建容器(保留已挂载的卷)来获取更改。要防止Compose获取更改,请使用--no-recreate标志。
  • --force-recreate:如果您想强制Compose停止并重新创建所有容器,请使用该标志。
  • --profile:用于指定剖面

更多指令请查阅官方文档。文章来源地址https://www.toymoban.com/news/detail-800183.html

到了这里,关于Docker五部曲之四:Docker Compose的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Docker六 | Docker Compose容器编排

    目录 Docker Compose 基本概念 使用步骤  常用命令  Docker-Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose可以管理多个Docker容器组成一个应用。 需要定义一个YAML格式的配置文件docker-compose.yml,写好多个容器之间的调用关系,然后只需一个命令就能同时

    2024年02月02日
    浏览(11)
  • Docker 容器编排利器 Docker Compose

    Docker 容器编排利器 Docker Compose

    目录 一、Docker Compose 简介 二、Docker Compose 安装 2.1 Mac、Windows 平台默认支持 2.2 Linux 安装(通过包管理) 2.2.1 安装 2.2.2 测试 2.2.3 卸载 2.3 使用PIP 安装与卸载 2.3.1 PIP安装 2.3.2 PIP 卸载 三、基本使用 3.1 术语 3.2 部署Flask 应用 四、Compose 常用命令 4.1 命令对象与格式 4.2 docker-compose

    2024年03月26日
    浏览(9)
  • Docker进阶:Docker Compose(容器编排) 管理多容器应用—实战案例演示

    Docker进阶:Docker Compose(容器编排) 管理多容器应用—实战案例演示

    💖The Begin💖点点关注,收藏不迷路💖 在开始之前,我们需要确保已经安装了 Docker 。 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如

    2024年02月08日
    浏览(12)
  • Docker Compose 容器编排

    Docker Compose 容器编排

    Docker compose 实现单机容器集群编排管理(使用一个模板文件定义多个应用容器的启动参数和依赖关系,并使用docker compose来根据这个模板文件的配置来启动容器) 通俗来说就是把之前的多条docker run启动容器命令 转换为docker-compose.yml配置文件。 Docker compose 三大概念 项目/工程

    2024年02月15日
    浏览(7)
  • 4.docker容器编排(docker compose 与 docker swarm)

    4.docker容器编排(docker compose 与 docker swarm)

    容器编排:就是针对容器生命周期的管理,对容器的生命周期进行更快速方便的方式进行管理。 实例:一个java程序,依赖了mysql,redis,要想把 java 程序运行起来,则必须要先启动 mysql、redis。那么这三者这件就存在了依赖关联。   容器编排存在的意义: 依赖管理,当一个容

    2024年02月03日
    浏览(14)
  • docker笔记9:Docker-compose容器编排

    docker笔记9:Docker-compose容器编排

    目录 1.是什么? 2. 能干嘛? 3.去哪下? 4.安装步骤  ​编辑 5.卸载步骤   6.Compose核心概念  6.1概念 6.2 Compose常用命令   7.Compose编排微服务 7.1改造升级微服务工程docker_boot 7.2不用Compose 7.2.1 单独的mysql容器实例 7.3 swagger测试 7.4上面成功了,有哪些问题? 7.5 使用Compose  7.5.1

    2024年02月09日
    浏览(10)
  • 04-docker compose容器编排

    ​ Compose 是Docker公司推出的一个工具软件,可以管理多个Dokcer容器组成一个应用。你需要定义一个YAML格式的配置文件 docker-compose.yml , 写好多个容器之间的调用关系 。然后,只要一个命令,就能同时启动/关闭这些容器 简单来说,Docker Compose 是Docker官方的开源项目, 负责实

    2024年02月09日
    浏览(20)
  • Docker高级:Compose 容器编排

    Docker高级:Compose 容器编排

    Compose 是Docker公司推出的一个软件,可以管理多个Docker容器组成一个应用。我们只需要定义一个 YAML 格式的配置文件 docker-compose.yaml 配置好多个容器之间的调用关系 ,最后只需要一个命令,就可以同时控制这些容器进行启动 / 关闭。Compose 允许用户通过一个单独的 docker-compo

    2024年02月06日
    浏览(7)
  • Docker Compose一键管理容器

    可以一键批量管理docker的容器。将所有需要创建的容器定义在compose配置文件中,通过一个命令一键可以创建并运行这些容器,而不需要一个一个启动。可以批量启动停止服务。 Docker Compose 使用 YAML 文件来定义多服务的应用。YAML 是 JSON 的一个子集,因此也可以使用JSON。 Doc

    2024年02月11日
    浏览(7)
  • Docker——compose单机容器集群编排

    Docker——compose单机容器集群编排

    Docker-compose是一个基于Docker的容器编排工具。它使用一个YAML文件来定义和配置多个容器的集群。通过使用Docker-compose,我们可以轻松地定义、配置和协同运行多个Docker容器,而无需手动管理它们的启动和通信。 1.为何需要Docker-compose 在现代应用程序开发中,容器化技术已经成

    2024年02月16日
    浏览(11)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包