Docker——Docker Compose总结

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介:  Docker Compose 是一种工具,用于帮助定义和共享多容器应用程序。 通过 Compose,你可以创建 YAML 文件来定义服务,并且只需一个命令,就可以启动或清理所有内容。

简介

Docker Compose 是一种工具,用于帮助定义和共享多容器应用程序。 通过 Compose,你可以创建 YAML 文件来定义服务,并且只需一个命令,就可以启动或清理所有内容。

 使用 Compose 的巨大优点是,你可以在文件中定义应用程序堆栈,使其位于项目存储库的根目录下(它现在受版本控制),并方便其他人参与你的项目。 其他人只需克隆你的存储库即可开始撰写应用。 事实上,你可能会看到 GitHub/GitLab 上的很多项目现在都是这样做的。

那么,如何开始?

Docker Compose的使用步骤

1、安装 Docker Compose

如果你为 Windows 或 Mac 安装了 Docker Desktop,则你已拥有 Docker Compose! Play-with-Docker 实例也已安装 Docker Compose。 如果你使用的是 Linux 计算机,则需要按照此处的说明安装 Docker Compose。

安装教程

 安装后,你应该能够运行以下内容并查看版本信息。

docker-compose version

2、创建 Compose 文件

 在应用项目的根目录中,创建名为 docker-compose.yml 的文件。

  

在 Compose 文件中,我们将首先定义架构版本。 在大多数情况下,最好使用支持的最新版本。 你可以查看 Compose 文件参考获取当前架构版本和兼容性矩阵。

version: "3.7"

接下来,定义要作为应用程序的一部分运行的服务(或容器)列表。

version: "3.7"
services:

  现在,你将开始一次将服务迁移到 Compose 文件中。

3、定义应用服务

  请记住,这是用于定义应用容器的命令(在 Windows PowerShell 中,请将 ` 字符替换为 \)。

docker run -dp 3000:3000 \
  -w /app -v ${PWD}:/app \
  --network todo-app \
  -e MYSQL_HOST=mysql \
  -e MYSQL_USER=root \
  -e MYSQL_PASSWORD=secret \
  -e MYSQL_DB=todos \
  node:12-alpine \
  sh -c "yarn install && yarn run dev"

 首先,定义容器的服务项和映像。 你可为服务选择任何名称。 该名称将自动成为网络别名,这在定义 MySQL 服务时非常有用。

version: "3.7"
services:
  app:
    image: node:12-alpine

 通常,你会看到命令接近 image 定义,尽管对排序没有要求。 接下来,将其移到该文件中。

version: "3.7"
services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"

 通过为服务定义 ports 来迁移命令的 -p 3000:3000 部分。 你将在此使用短语法,但此处还提供了更详细的长语法。

version: "3.7"
services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000

接下来,使用 working_dir 和 volumes 定义迁移工作目录 (-w /app) 和卷映射 (-v ${PWD}:/app)。 卷还有短语法和长语法。

  Docker Compose 卷定义的一个优点是你可以使用当前目录中的相对路径。

version: "3.7"
services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app

 最后,使用 environment 键迁移环境变量定义。

version: "3.7"
services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

定义 MySQL 服务

  现在,可以定义 MySQL 服务了。 用于该容器的命令如下(在 Windows PowerShell 中,请将 \ 字符替换为 `):

docker run -d \
  --network todo-app --network-alias mysql \
  -v todo-mysql-data:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=secret \
  -e MYSQL_DATABASE=todos \
  mysql:5.7

 首先,定义新服务并将其命名为 mysql,以便它自动获取网络别名。 同时指定要使用的映像。

version: "3.7"
services:
  app:
    # The app service definition
  mysql:
    image: mysql:5.7

接下来,定义卷映射。 使用 docker run 运行容器时,会自动创建命名卷。 但是,使用 Compose 运行时,则不会。 你需要在最上面的 volumes: 部分定义卷,然后在服务配置中指定装载点。只需仅提供卷名,即可使用默认选项。 不过,还有很多可用选项。

version: "3.7"
services:
  app:
    # The app service definition
  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
volumes:
  todo-mysql-data:

 最后,只需指定环境变量。

version: "3.7"
services:
  app:
    # The app service definition
  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment: 
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos
volumes:
  todo-mysql-data:

 此时,完整的 docker-compose.yml 应如下所示:

version: "3.7"
services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos
  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment: 
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos
volumes:
  todo-mysql-data:

4、运行应用程序堆栈

现在你已经有了 docker-compose.yml 文件,启动它吧!

 首先,确保应用和数据库的其他副本未运行(docker ps 和 docker rm -f <ids>)。

 使用 docker-compose up 命令启动应用程序堆栈。 添加 -d 标志以在后台运行所有内容。 或者,你可以右键单击 Compose 文件,然后选择 VS Code 侧边栏上的“启动”选项。

docker-compose up -d

运行此操作时,你应该会看到如下输出:

Creating network "app_default" with the default driver
Creating volume "app_todo-mysql-data" with default driver
Creating app_app_1   ... done
Creating app_mysql_1 ... done

你会注意到已创建卷和网络! 默认情况下,Docker Compose 会自动创建一个专门针对应用程序堆栈的网络(这就是为什么你在 Compose 文件中没有定义网络)。

 使用 docker-compose logs -f 命令查看日志。 你将看到来自每个服务的日志交汇形成一个流。 当你想要关注与时间相关的问题时,这非常有用。 -f 标志指示“跟踪”日志,因此会在生成时显示实时输出。

 如果尚未这样做,你会看到如下所示的输出:

mysql_1  | 2019-10-03T03:07:16.083639Z 0 [Note] mysqld: ready for connections.
mysql_1  | Version: '5.7.27'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  MySQL Community Server (GPL)
app_1    | Connected to mysql db at host mysql
app_1    | Listening on port 3000

服务名称显示在行的开头(通常为彩色),以帮助区分消息。 如果要查看特定服务的日志,可以将服务名称添加到日志命令的末尾(例如 docker-compose logs -f app)。

提示

 在启动应用前等待 DB 当应用启动时,它实际上会等待 MySQL 启动并准备就绪,然后再尝试连接到它。Docker 没有任何内置支持,无法等待另一个容器完全启动、运行并准备就绪,然后再启动另一个容器。 对于基于节点的项目,你可以使用 wait-port 依赖项。 其他语言/框架有类似的项目。

 此时,你应能够打开应用并看到它正在运行。 嗨! 你只需要一个命令!

全部清理

 当你准备好全部清理时,只需运行 docker-compose down,或者在 VS Code Docker 扩展的容器列表中,右键单击应用程序,然后选择“停止”。 容器将停止,网络将删除。

警告

删除卷 默认情况下,运行 docker-compose down 时,Compose 文件中的命名卷不会删除。 如果要删除卷,则需要添加 --volumes 标志。

 清理后,你可以切换到另一个项目,运行 docker-compose up,并准备好参与该项目! 真的没有比这更简单的了!

概括

 在本部分中,你了解了 Docker Compose,以及它如何帮助显著简化多服务应用程序的定义和共享。 你通过将所使用的命令转换为适当的 Compos 格式,创建了 Compos 文件。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
12天前
|
人工智能 前端开发 Docker
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
在 AI 智能体开发中,开发者常面临本地调试与云端部署的矛盾。本文介绍如何通过 Docker Compose 与 Docker Offload 解决这一难题,实现从本地快速迭代到云端高效扩容的全流程。内容涵盖多服务协同、容器化配置、GPU 支持及实战案例,助你构建高效、一致的 AI 智能体开发环境。
165 0
从本地到云端:用 Docker Compose 与 Offload 构建可扩展 AI 智能体
|
27天前
|
运维 数据可视化 开发者
2025年 三个 Docker Compose 可视化管理器测评
本文对比了三款主流的 Docker Compose 可视化管理工具。随着 Docker 的普及,Compose 已成为多容器应用部署的标准,但 YAML 配置复杂、协作困难等问题也日益突出。三款工具各有侧重:Docker Desktop 适合个人本地开发,Portainer 适合小团队运维管理,而 Websoft9 则通过 GitOps 实现了强大的版本控制与团队协作能力。文章从可视化编辑、部署便捷性、版本管理等方面进行评测,为不同使用场景提供了推荐方案,展望了未来 Compose 管理向 GitOps 深度融合的发展趋势。
134 1
2025年 三个 Docker Compose 可视化管理器测评
|
数据可视化 开发工具 git
GitOps 驱动的 Docker Compose 可视工具化来了,图形化编辑器上玩转容器编排
Docker Compose 简化了多容器应用的部署,但随着应用复杂度上升,文本配置方式逐渐暴露出维护难、协作效率低等问题。基于 GitOps 的可视化 Docker Compose 工具应运而生,通过图形界面降低使用门槛,提升配置准确性和团队协作效率。结合 GitOps,实现配置变更的版本追踪、自动化部署与环境一致性,为多容器应用管理提供高效、安全的解决方案。
|
2月前
|
NoSQL Redis Docker
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
317 11
|
2月前
|
NoSQL 安全 Redis
Docker Compose :从入门到企业级部署
Docker Compose 是用于定义和运行多容器应用的工具,支持服务、网络和卷三大核心要素。通过简洁的 YAML 文件,可实现应用的快速部署与管理,适用于开发、测试及生产环境。
207 1
|
4月前
|
网络协议 Ubuntu Docker
Docker Compose--命令说明
Docker Compose--命令说明
831 30
|
4月前
|
网络协议 NoSQL Redis
Docker Compose--模板文件
Docker Compose--模板文件
327 29
|
4月前
|
Linux Docker Windows
Docker Compose
Docker Compose
487 29
|
4月前
|
关系型数据库 MySQL 数据库
Docker Compose-实战
Docker Compose-实战
153 5