Docker(14)-- Docker Compose

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Docker Compose

Docker Compose

一、简介

定义:

Dpcker Compose 就是使用 YAML file 配置文件 来定义、运行多个容器。

作用:

批量编排容器。

只要配置好yaml文件,通过一条命令,docker-compose 可以一次构建运行起整个项目的容器。

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

single command。 命令有哪些?

Compose is a tool for defining and running multi-container Docker applications. With Compose,

you use a YAML file to configure your application’s services. Then, with a single command, you

create and start all the services from your configuration. To learn more about all the features of

Compose, see the list of features.

所有的环境都可以使用 Compose。

Compose works in all environments: production, staging, development, testing, as well as CI

workflows. You can learn more about each case in Common Use Cases.

使用的三步骤:

Using Compose is basically a three-step process:

1、Define your app’s environment with a Dockerfile so it can be reproduced anywhere.

  • Dockerfile 保证我们的项目在任何地方可以运行。

2、Define the services that make up your app in docker-compose.yml so they can be run

together in an isolated environment.

  • services 什么是服务。
  • docker-compose.yml 这个文件怎么写!

3、Run docker-compose up and Compose starts and runs your entire app.

  • 启动项目

二、安装

1、下载

sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker- compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 
# 这个可能快点! 
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker- compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

2、授权

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

三、命令

# docker-compose 后台构建运行 容器
docker-compose up -d
docker-compose -f docker-compose.yml up -d
# 停止和删除容器、网络、卷、镜像。
docker-compose down
docker-compose down [options]
# 重启 docker-compose 服务
docker-compose restart web-app
# 停止 docker-compose 服务
docker-compose stop
# 查看 docker-compose 日志
docker-compose logs web-app
# 构建(重新构建)项目中的服务容器
docker-compose build
docker-compose build [options] [–build-arg key=val…] [SERVICE…]
# 查看 docker-compose 正在运行的服务
docker-compose ps
# 删除 docker-compose 服务
docker-compose rm
# 显示正在运行的进程
docker-compose top
# 在指定服务上执行一个命令。 在指定容器上执行一个ping命令。
docker-compose run
docker-compose run [options] [-v VOLUME…] [-p PORT…] [-e KEY=VAL…] SERVICE [COMMAND] [ARGS…]
docker-compose run ubuntu ping www.baidu.com

四、yaml 规则

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

container_name

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

container_name: my-web-container

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 完全启动 之后才启动。

command

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

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

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。

environment:
  RACK_ENV: development
  SHOW: 'true'

expose

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

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

expose:
 - "3000"
 - "8000"

dns

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

dns: 8.8.8.8
dns:
  - 8.8.8.8
  - 9.9.9.9

extra_hosts

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

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

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

162.242.195.82  somehost
50.31.209.229   otherhost

image

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

image: redis
image: ubuntu:14.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd # 镜像id

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"

volumes

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

version: "3.7"
services:
  db:
    image: postgres:latest
    volumes:
      - "/localhost/postgres.sock:/var/run/postgres/postgres.sock"
      - "/localhost/data:/var/lib/postgresql/data"

五、docker-compose.yml 示例

version: '2'
services:
  operation-manage:
    container_name: operation-manage
    image: 192.168.31.10:30002/dispatch-ai-wlmq/operation-manage:2.2.0
    ports:
      - 9001:9001
      - 12001:12001
    volumes:
      - /data/services/operation-manager/applog:/var/log/logs/operation-manager
      - /data/services/operation-manager/config:/apps/config
      - /data/services/operation-manager/log:/apps/log
    environment:
      JAVA_OPTS: '-Xms256M -Xmx512M -XX:-OmitStackTraceInFastThrow'
      PARAMS: '--server-ip=192.168.31.207 --server-port=9001'
    extra_hosts:
      - "cdh1:192.168.31.73"
      - "cdh2:192.168.31.74"
      - "cdh3:192.168.31.75"
  dispatch-brain:
    container_name: dispatch-brain
    image: 192.168.31.10:30002/dispatch-ai-wlmq/dispatch-brain:2.2.0
    ports:
      - 9002:9002
    volumes:
      - /data/services/dispatch-brain/applog:/var/log/logs/dispatch-brain
      - /data/services/dispatch-brain/config:/apps/config
      - /data/services/dispatch-brain/log:/apps/log
    environment:
      JAVA_OPTS: '-Xms256M -Xmx512M'
      PARAMS: '--server-ip=192.168.31.207 --server-port=9002'
    extra_hosts:
      - "cdh1:192.168.31.73"
      - "cdh2:192.168.31.74"
      - "cdh3:192.168.31.75"
目录
相关文章
|
16天前
|
存储 监控 安全
【专栏】探讨Docker Compose的核心概念、使用方法及最佳实践,助你轻松驾驭容器编排的世界
【4月更文挑战第27天】Docker Compose是款轻量级容器编排工具,通过YAML文件统一管理多容器应用。本文分三部分深入讨论其核心概念(服务、网络、卷和配置)、使用方法及最佳实践。从快速入门到高级特性,包括环境隔离、CI/CD集成、资源管理和安全措施。通过案例分析展示如何构建多服务应用,助力高效容器编排与管理。
|
2月前
|
存储 机器学习/深度学习 中间件
快速上手 Elasticsearch:Docker Compose 部署详解
本文介绍了如何使用Docker Compose快速搭建Elasticsearch学习环境。Elasticsearch是一款用于实时搜索和分析的分布式中间件,适用于多种场景,如搜索、日志分析、机器学习等。首先,创建docker网络,拉取最新版8.12.2镜像。接着,编写docker-compose.yml文件,配置单节点集群,设置端口映射、内存限制及数据卷挂载。然后,创建并配置数据卷目录,允许远程访问和跨域。最后,启动服务并验证,通过浏览器访问确认服务运行正常。本文为初学者提供了一个简便的Elasticsearch部署方法。
226 4
快速上手 Elasticsearch:Docker Compose 部署详解
|
2月前
|
关系型数据库 MySQL Java
Docker Compose详细教程(从入门到放弃)
Docker Compose详细教程(从入门到放弃)
234 0
|
4月前
|
存储 数据可视化 数据安全/隐私保护
使用 Docker Compose 部署 Docker Registry
【1月更文挑战第2天】 在内网环境中,我们期望能够在本地共享镜像。为了解决这一问题,Docker Registry成为了我们的救星。Docker Registry是一个用于存储和管理Docker镜像的开源工具。通过在本地部署Docker Registry,您可以轻松地构建、存储和分享自己的Docker镜像。
171 3
使用 Docker Compose 部署 Docker Registry
|
2月前
|
Java Docker 微服务
如何使用Docker和Docker Compose部署微服务
【2月更文挑战第12天】
303 0
|
6天前
|
前端开发 API 数据库
【Docker专栏】Docker Compose实战:编排多容器应用
【5月更文挑战第7天】Docker Compose是Docker的多容器管理工具,通过YAML文件简化多容器应用部署。它能一键启动、停止服务,保证开发、测试和生产环境的一致性。安装后,创建`docker-compose.yml`文件定义服务,如示例中的web和db服务。使用`docker-compose up -d`启动服务,通过`docker-compose ps`、`stop`、`down`和`logs`命令管理服务。
【Docker专栏】Docker Compose实战:编排多容器应用
|
13天前
|
Shell 应用服务中间件 nginx
6.Docker Compose
6.Docker Compose
|
19天前
|
NoSQL Redis Docker
[docker] Compose 简介
[docker] Compose 简介
|
24天前
|
NoSQL 数据库 Docker
《Docker 简易速速上手小册》第5章 Docker Compose 与服务编排(2024 最新版)
《Docker 简易速速上手小册》第5章 Docker Compose 与服务编排(2024 最新版)
46 0
|
1月前
|
NoSQL Redis Docker
Docker Compose、Swarm、Stack、Secret、Config
Docker Compose、Swarm、Stack、Secret、Config