Docker——Docker Compose总结

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 1个月
简介:  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 文件。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5天前
|
关系型数据库 MySQL API
|
18天前
|
缓存 监控 持续交付
|
1天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
1天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
5 1
|
12天前
|
负载均衡 监控 开发者
深入浅出:掌握 Docker Compose 的高级用法
【10月更文挑战第22天】本文深入探讨了 Docker Compose 的高级用法,包括环境变量、服务扩展、网络配置和数据卷管理。通过实例详细介绍了如何利用这些功能提升开发效率和应用部署的灵活性。适合希望深入了解 Docker Compose 的开发者阅读。
|
1月前
|
资源调度 关系型数据库 MySQL
docker制作compose
本文介绍了Docker Compose的基本使用,包括安装、创建`docker-compose.yml`文件定义服务,以及如何使用环境变量和卷来配置多容器应用的步骤。
33 1
docker制作compose
|
1天前
|
NoSQL Redis Docker
【赵渝强老师】使用Docker Compose管理容器
Docker Compose 通过 YAML 文件管理多个容器,简化复杂系统的部署和管理。本文介绍了 Docker Compose 的基本概念,并通过一个包含 Redis DB 和 Python Web 模块的示例,展示了如何使用 Docker Compose 部署和管理多容器应用。手动部署和 Docker Compose 部署的对比突显了 Docker Compose 在系统复杂度增加时的优势。
|
1天前
|
前端开发 开发者 Docker
深入探索Docker Compose:简化多容器应用的部署
深入探索Docker Compose:简化多容器应用的部署
8 0
|
25天前
|
Ubuntu Linux 网络安全
Docker&Docker Compose安装(离线+在线)
Docker&Docker Compose安装(离线+在线)
168 1
|
1月前
|
存储 Kubernetes 持续交付
Docker Compose
【10月更文挑战第3天】
46 6
下一篇
无影云桌面