ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【Docker】容器编排

【Docker】容器编排 个人主页秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 系列专栏Docker_秦jh_的博客-CSDN博客​​​​​目录Docker Compose(容器编排)什么是 Docker Compose为什么要 Docker ComposeDocker Compose 的功能Docker Compose 使用场景Docker Compose 文件docker-compose.yml文件语法版本文件基本结构及常见指令Docker Compose 命令清单命令格式常见选项说明常见命令说明常见问题前言 hello! 各位铁子们大家好哇。今日更新了Docker相关内容 欢迎大家关注点赞收藏⭐️留言Docker Compose(容器编排)什么是 Docker Composedocker-compose 是 Docker 官方的开源项目使用 python 编写实现上调用了 Docker 服务的 API 进行容器管理及编排其官方定义为定义和运行多个 Docker 容器的应用。docker-compose 中有两个非常重要的概念:• 服务 ( service )一个应用的容器实际上可以包括若干运行相同镜像的容器实例。• 项目( project )由一组关联的应用容器组成的一个完整业务单元在 dockercompose.yml 文件中定义, 整个 docker-compose.yml 定义一个项目。Compose 的默认管理对象是项目通过子命令对项目中的一组容器进行便捷地生命周 期管理。通过 compose 可以方便的管理多个服务。为什么要 Docker Compose• Docker 是一个轻量化的应用程序Docker 官方推荐每个 Docker 容器中只运行一 个进程。• 如果一个应用需要涉及到 MySQL、nginx 等环境 那么我们需要分别为应用、数 据库和 nginx 创建单独的 docker 容器然后分别启动容器。• 想象一下当我们构建好 Docker 之后每次启动应用都至少需要 docker run 三次 或者写一些脚本来实现 这样会比较繁琐。• 另外这些 docker 容器都是分散独立的也不方便镜像管理。那既然这些 docker 容器 都是为了同一个应用服务我们就应该把它们放到一起这就引出了 dockercompose 来解决这类型的问题。Docker Compose 的功能1. 使用步骤Compose 使用的步骤• 使用 docker-compose.yml 定义构成应用程序的服务这样它们可以在隔离环境中 一起运行。• 最后执行 docker compose up 命令来启动并运行整个应用程序。2. 核心功能Compose 具有管理应用程序整个生命周期的命令• 启动停止和重建服务• 查看正在运行的服务的状态• 流式传输运行服务的日志输出• 在服务上运行一次性命令Docker Compose 使用场景单主机部署快速搭建一个单节点开发或者测试环境方便使用。不同环境隔离通过指定 project 来运行不同的环境实现隔离的目的。Docker Compose 文件docker-compose.yml文件语法版本目前官方支持三个大版本 即 Version 1、Version 2 及 Version 3 其中 Version 1 已 经被废弃掉了。这里主 要基于 3.8 版本的 Compose file 语法进行讲解。文件基本结构及常见指令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:redissha256:0ed5d5928d4737458944eb604cc8509e245c3e19d02ad83935398bc4b991aac7 image: library/redis image: docker.io/library/redis image: my_private.registry:5000/rediscommand覆盖容器启动的默认命令。command: [bundle, exec, thin, -p, 3000] command: bundle exec thin -p 3000entrypoint覆盖容器默认的 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/phpunitenvironment添加环境变量。您可以使用数组或字典、任何布尔值布尔值需要用引号引起来以 确保 YML 解析器不会将其转换为 True 或 False。#map 语法 environment: RACK_ENV: development SHOW: true USER_INPUT: #数组语法 environment: - RACK_ENVdevelopment - SHOWtrue - USER_INPUTnetworks指定容器运行的网络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: default config: - subnet: 172.16.238.0/24volumes将主机的数据卷或者文件挂载到容器里。#短语法 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: 8080 protocol: 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/udpexpose暴露端口但不映射到宿主机只被连接的服务访问。仅可以指定内部端口为参数:expose: - 3000 - 8000build指定为构建镜像上下文路径例如 webapp 服务指定为从上下文路径 ./dir/Dockerfile 所构建的镜像version: 3.7 services: webapp: build: ./dir或者作为具有在上下文指定的路径的对象以及可选的 Dockerfile 和 args• 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 之前停止可以指定条件healthy 需要配置 healthcheck 来完成health check 样例env_file从文件添加环境变量。可以是单个值或列表的多个值。env_file: .env也可以是列表格式Docker Compose 命令清单命令格式对于 Compose 来说大部分命令的对象既可以是项目本身也可以指定为项目中的 服务或者容器。如果没有特别的说明命令对象将是项目这意味着项目中所有的服 务都会受到命令影响。docker-compose 命令的基本的使用格式为docker compose [OPTIONS] COMMAND [ARGS...]常见选项说明• -f, --file 指定使用的 Compose 模板文件默认为 docker-compose.yml可 以多次指定• -p, --project-name 指定项目名称默认将使用所在目录名称作为项目名常见命令说明up该命令的作用十分强大它会尝试自动完成包括构建镜像、重新创建服务、启动服 务并关联服务相关容器的一系列操作可以直接通过该命令来启动一个项目。docker compose up [options] [SERVICE...]• -d 在后台运行服务容器 推荐在生产环境下使用该选项• --force-recreate 强制重新创建容器不能与 --no-recreate 同时使用• --no-recreate 如果容器已经存在了则不重新创建不能与 --forcere-create 同时使用down停止所有容器并删除容器和网络docker compose down [options] [SERVICE...]• -v, --volumes 删除容器同时删除目录映射run该命令可以在指定服务容器上执行相关的命令# 例如:启动一个 ubuntu 服务容器并执行 ping docker.com 命令# docker compose run ubuntu ping docker.comdocker compose run [options] SERVICE [COMMAND] [ARGS...]• -d 后台运行容器• --name NAME 为容器指定一个名字• --entrypoint CMD 覆盖默认的容器启动指令• -e KEYVAL 设置环境变量值可多次使用选项来设置多个环境变量• -u, --user 指定运行容器的用户名或者 uid• --rm 运行命令后自动删除容器• -p, --publish[] 映射容器端口到本地主机常见问题1. up、run 和 start 之间有什么区别通常你想要 docker compose up. 用于 up 启动或重新启动 docker-compose.yml. 在默认的“附加”模式下会看到来自所有容器的所有日志。在“分离”模式 ( -d) 中启 动容器后 Compose 退出但容器继续在后台运行。该 docker compose run 命令用于运行“一次性”或“临时”任务。它需要您要运行的服 务名称并且只为正在运行的服务所依赖的服务启动容器。用于 run 运行测试或执行 管理任务例如从数据卷容器中删除或添加数据。该 run 命令的作用类似于 docker run -ti 它打开容器的交互式终端并返回与容器中进程的退出状态匹配的退出状态。docker compose start 命令仅对重新启动先前创建但已停止的容器有用。它从不创建新容器。2. 如何在同一主机上运行 Compose 文件的多个副本Compose 使用项目名称为项目的所有容器和其他资源创建唯一标识符。要运行项目的 多个副本请使用-p 命令行选项 或 COMPOSE_PROJECT_NAME 环境变量设置自定 义项目名称。3. 可以控制服务启动顺序吗可以控制启动顺序通过依赖指定并且可以配合 healthcheck 等健康检查成功以后 再启动。
返回列表