欢迎光临
我们一直在努力

Docker Compose容器编排

Docker Compose容器编排

  • 一.Docker Compose
    • 1.概述
    • 2.功能
    • 3.使用场景
  • 二.docker-compose.yml
    • 1.文件语法版本
    • 2.文件基本结构及常见指令
  • 三.Docker Compose 命令清单
    • 1.命令格式
    • 2.常见选项说明
    • 3.常见命令说明

一.Docker Compose

1.概述

docker-compose 是 Docker 官方的开源项目,使用 python 编写,实现上调用了 Docker 服务的 API 进行容器管理及编排,其官方定义为定义和运行多个 Docker 容器的应用。

docker-compose 中有两个非常重要的概念:

  • 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
  • 项目( project ):由一组关联的应用容器组成的一个完整业务单元,在 dockercompose.yml 文件中定义, 整个 docker-compose.yml 定义一个项目。 Compose 的默认管理对象是项目,通过子命令对项目中的一组容器进行便捷地生命周 期管理。

通过 compose 可以方便的管理多个服务。 在这里插入图片描述

  • Docker 是一个轻量化的应用程序, Docker 官方推荐每个 Docker 容器中只运行一 个进程。
  • 如果一个应用需要涉及到 MySQL、 nginx 等环境, 那么我们需要分别为应用、数 据库和 nginx 创建单独的 docker 容器,然后分别启动容器。
  • 想象一下,当我们构建好 Docker 之后,每次启动应用,都至少需要 docker run 三次, 或者写一些脚本来实现, 这样会比较繁琐。 -另外,这些 docker 容器都是分散独立的,也不方便镜像管理。那既然这些 docker 容器 都是为了同一个应用服务,我们就应该把它们放到一起,这就引出了 docker compose 来解决这类型的问题

2.功能

  • 使用步骤 Compose 使用的步骤:
    • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中 一起运行。
    • 最后,执行 docker compose up 命令来启动并运行整个应用程序。
  • 核心功能 Compose 具有管理应用程序整个生命周期的命令:
    • 启动,停止和重建服务
    • 查看正在运行的服务的状态
    • 流式传输运行服务的日志输出
    • 在服务上运行一次性命令

    3.使用场景

    单主机部署

    快速搭建一个单节点开发或者测试环境,方便使用。

    不同环境隔离

    通过指定 project 来运行不同的环境,实现隔离的目的。

    二.docker-compose.yml

    1.文件语法版本

    目前官方支持三个大版本, 即 Version 1、 Version 2 及 Version 3, 其中 Version 1 已 经被废弃掉了。

    当前最新的版本是 3.8,它支持的 Docker Engine 版本不得低于 19.03.0。 本课程主 要基于 3.8 版本的 Compose file 语法进行讲解,其他版本介绍参见官方文档 在这里插入图片描述

    2.文件基本结构及常见指令

    version: "3.8" # 定义版本, 表示当前使用的 docker-compose 语法的版本
    services: # 服务,可以存在多个servicename: # 服务名字,它也是内部 bridge 网络可以使用的 DNS name,
    如果不是集群模式相当于 docker run 的时候指定的一个名称,
    #集群(Swarm)模式是多个容器的逻辑抽象
    image: # 必选,镜像的名字
    command: # 可选,如果设置,则会覆盖默认镜像里的 CMD 命令
    environment: # 可选,等价于 docker container run 里的 –env 选项
    设置环境变量
    volumes: # 可选,等价于 docker container run 里的 -v 选项 绑定数据
    卷
    networks: # 可选,等价于 docker container run 里的 –network 选项
    指定网络
    ports: # 可选,等价于 docker container run 里的 -p 选项指定端口映
    射
    expose: # 可选,指定容器暴露的端口
    build: #构建目录
    depends_on: #服务依赖配置
    env_file: #环境变量文件
    servicename2:
    image:
    command:
    networks:
    ports:
    servicename3:
    #…
    volumes: # 可选,等价于 docker volume create
    networks: # 可选,等价于 docker network create

    常见字段格式语法

    image

    指定容器运行的镜像。以下格式都可以:

    image: redis
    image: redis:5
    image:
    redis@sha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398
    bc4b991aac7
    image: library/redis
    image: docker.io/library/redis
    image: my_private.registry:5000/redis

    在这里插入图片描述在这里插入图片描述

    command

    覆盖容器启动的默认命令

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

    在这里插入图片描述在这里插入图片描述

    entrypoint

    覆盖容器默认的 entrypoint。

    entrypoint: /code/entrypoint.sh

    也可以是以下格式:

    entrypoint:
    – php
    – –d
    – zend_extension=/usr/local/lib/php/extensions/no-debug-nonzts–20100525/xdebug.so
    – –d
    – memory_limit=–1
    – vendor/bin/phpunit

    在这里插入图片描述在这里插入图片描述

    environment

    添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以 确保 YML 解析器不会将其转换为 True 或 False。

    #map 语法
    environment:
    RACK_ENV: development
    SHOW: "true"
    USER_INPUT:
    #数组语法
    environment:
    – RACK_ENV=development
    – SHOW=true
    – USER_INPUT

    在这里插入图片描述 在这里插入图片描述

    networks 指定容器运行的网络:配置容器网络

    services:
    frontend:
    image: awesome/webapp
    networks:
    – front-tier
    – back-tier
    monitoring:
    image: awesome/monitoring
    networks:
    – admin
    backend:
    image: awesome/backend
    networks:
    back-tier:
    aliases:
    – database
    admin:
    aliases:
    – mysql
    networks:
    front-tier:
    back-tier:
    admin:

    配置网络驱动和子网信息

    services:
    frontend:
    image: awesome/webapp
    networks:
    front-tier:
    ipv4_address: 172.16.238.10
    networks:
    front-tier:
    ipam:
    driver: defaultconfig:
    – subnet: "172.16.238.0/24"

    在这里插入图片描述 在这里插入图片描述

    volumes

    将主机的数据卷或者文件挂载到容器里。

    #短语法
    services:
    db:
    image: postgres:latest
    volumes:
    – "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
    – "/localhost/data:/var/lib/postgresql/data"
    #完整语法
    services:
    backend:
    image: awesome/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:

    在这里插入图片描述 在这里插入图片描述

    ports

    指定端口映射。以下格式都可以:

    #完整语法
    ports:
    – target: 80
    host_ip: 127.0.0.1
    published: 8080protocol: tcp
    mode: host
    – target: 80
    host_ip: 127.0.0.1
    published: 8000-9000
    protocol: tcp
    mode: host
    #短语法
    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"

    在这里插入图片描述 在这里插入图片描述

    expose

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

    expose:
    – "3000"
    – "8000"

    在这里插入图片描述 在这里插入图片描述

    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"

    • context:上下文路径。
    • dockerfile:指定构建镜像的 Dockerfile 文件名。
    • args:添加构建参数,这是只能在构建过程中访问的环境变量。
    • labels:设置构建镜像的标签。

    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

    可以指定条件, healthy 需要配置 healthcheck 来完成

    services:
    web:
    build: .
    depends_on:
    db:
    condition: service_healthy
    redis:
    condition: service_started
    redis:
    image: redis
    db:
    image: postgres

    health check 样例

    version: "3.8"
    services:
    web:
    image: nginx:1.24.0
    environment:
    TEST: 1
    depends_on:
    mysql:
    condition: service_healthy
    mysql:
    image: mysql:5.7
    environment:
    MYSQL_ROOT_PASSWORD: "bit@123"
    volumes:
    – /data/maxhou/mysqldata/varlib/:/var/lib/mysql
    healthcheck:
    test: mysql —user=root —password='bit@123' –e "SELECT 1;"
    interval: 10s
    timeout: 5s
    retries: 10

    在这里插入图片描述 在这里插入图片描述

    env_file

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

    env_file: .env 也可以是列表格式:

    env_file:
    – ./common.env
    – ./apps/web.env
    – /opt/secrets.env

    在这里插入图片描述 在这里插入图片描述在这里插入图片描述在这里插入图片描述

    其他的指令可以参考官方文档

    三.Docker Compose 命令清单

    在这里插入图片描述在这里插入图片描述

    官方文档

    1.命令格式

    对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的 服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服 务都会受到命令影响。

    docker-compose 命令的基本的使用格式为

    docker compose [OPTIONS] COMMAND [ARGS…]

    2.常见选项说明

    • -f, –file 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可 以多次指定
    • -p, –project-name 指定项目名称,默认将使用所在目录名称作为项目名

    在这里插入图片描述

    3.常见命令说明

    up 该命令的作用十分强大,它会尝试自动完成包括构建镜像、(重新)创建服务、启动服 务并关联服务相关容器的一系列操作,可以直接通过该命令来启动一个项目。

    docker compose up [options] [SERVICE…]

    • -d 在后台运行服务容器, 推荐在生产环境下使用该选项
    • –force-recreate 强制重新创建容器,不能与 –no-recreate 同时使用
    • –no-recreate 如果容器已经存在了,则不重新创建,不能与 –forcerecreate 同时使用

    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

    down 停止所有容器,并删除容器和网络

    docker compose down [options] [SERVICE…]

    • -v, –volumes 删除容器同时删除目录映射

    在这里插入图片描述 在这里插入图片描述

    run 该命令可以在指定服务容器上执行相关的命令Shell

    #例如:启动一个 ubuntu 服务容器,并执行 ping docker.com 命令
    #docker compose run ubuntu ping docker.com
    docker compose run [options] SERVICE [COMMAND] [ARGS…]

    • -d 后台运行容器
    • –name NAME 为容器指定一个名字
    • –entrypoint CMD 覆盖默认的容器启动指令
    • -e KEY=VAL 设置环境变量值,可多次使用选项来设置多个环境变量
    • -u, –user=“” 指定运行容器的用户名或者 uid
    • –rm 运行命令后自动删除容器
    • -p, –publish=[] 映射容器端口到本地主机

    在这里插入图片描述 在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » Docker Compose容器编排
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址