1 为什么需要 Docker Compose

在创建容器过程中,特别是在代码调试阶段,一般需要重复运行一些命令, 如 docker builddocker run 等等,这些命令有时冗长而复杂,手动逐个重复运行这些命令十分繁琐,对于多容器的复杂应用尤其如此。使用 Docker Compose 工具能极大地简化容器的创建、管理和维护。

2 什么是 Docker Compose

Docker Compose 工具相当于 C/C++ 的 make 工具,使用 make 需要 Makefile,所有的编译链接设置都在Makefile 中指定,不需要为了编译链接代码以生成 .exe 而每次都在终端重复手动输入长串的指令。

Docker Compose 同样也需要一个配置文件: docker-compose.yaml(文件扩展名也可以是 yml),创建容器所需的一系列指令都在此文件中设定。

关于 yaml 格式:YAML 是一种人类可读的数据序列化语言,通常用于配置文件和存储或传输数据的应用程序,YAML 使用 python 那样的缩进以指示嵌套关系。缩进通常使用两个空格,但是实际上没有限制,同 python,使用 # 表示注释。

3 Docker Compose 的使用

如下是一个 Mern Stack App 项目结构:

docker-compose.yaml 文件内容如下:

# docker compose 规范的版本,下面的网站可查
# https://docs.docker.com/compose/compose-file/compose-versioning/
version: "3.8"
# 此 mern 将创建3个容器,下面的3个服务
# mongodb, backend, frontend 将自动被翻译成3个容器
services:  mongodb:# 从 hub.docker.com 获取官方imageimage: "mongo" # 命名卷: 持久化保存数据库数据volumes:- data:/data/db# 环境变量,在文件 ./env/mongo.env 里保存env_file:- ./env/mongo.envbackend:build: ./backendports:- "80:80"volumes:# 命名卷- logs:/app/logs# 绑定挂载,不同于命令,此文件中可以使用相对路径,# 手动运行命令则需绝对路径- ./backend:/app# 匿名卷- /app/node_modulesenv_file:- ./env/backend.envdepends_on:- mongodbfrontend:build: ./frontendports:- "3000:3000"volumes:- ./frontend/src:/app/src# stdin_open 和 tty 对应手动执行命令时的 -itstdin_open: truetty: true# 仅仅在容器 backend 运行后,才会运行此 frontenddepends_on:- backend-
# 这里是整个 App 的命名卷
# 匿名卷和 bind-mounts 不能在这里指定
volumes:data:logs:

3.1 启动容器

docker-compose up

对于上面的 mern app,运行此命令将同时生成3个容器:frontend, backend 和 mongoDB。

docker-compose up 默认以附加模式运行,如果需要以分离模式运行则在命令后加 -d:

docker-compose up -d

也因为此原因,docker-compose.yaml 里没有设置 -d 的选项。

3.2 停止并删除容器

docker-compose down

对于上面的 mern app,运行此命令将同时停止并删除3个容器:frontend, backend 和 mongoDB。

  • 使用 Docker Compose, Dockerfile 文件仍然必不可少。 Docker
    Compose 创建一个默认网络并将所有容器添加到该网络,故 docker-compose.yaml 里不需要指定网络。

  • docker-compose down 命令将停止并删除容器,因此 docker-compose.yaml 没有选项 --rm

不管是单容器还是多容器 App 都能使用 Docker Compose,Docker Compose 是一个强大的非常有用的工具。

使用 Docker Compose 构建复杂的多容器 App相关推荐

  1. Docker与Docker Compose的安装以及Portainer容器管理工具

    Docker官网 概述 Docker 是一个用于开发.发布和运行应用程序的开放平台.Docker 能够将应用程序与基础架构分离,以便可以快速交付软件.使用 Docker,可以像管理应用程序一样管理基础 ...

  2. Docker折腾记: (3)Docker Compose构建Gitlab,从配置(https,邮箱验证)到基本可用

    前言 gitlab 11.1内置了CI/CD,这个特性从gitlab 8+就开始有了,不过配置比较琐碎 经过几个大版本的迭代,现在已经简化了使用方式,也修复了一些坑,这个特性大大吸引了我; gitla ...

  3. docker xware下载慢_win7环境下Docker快速构建及阿里云容器加速配置

    上篇Docker中提到的是MAC系统中的构建,本篇会简单介绍win7中Docker的构建和加速. Docker 官网 下载之前的步骤本文中不再重提,直接去Docker官网中下载win7版本进行安装,安 ...

  4. 使用Docker Compose构建ZigBee基础架构

    For me, the first half of 2020 was a start for ZigBee and home automation basics. After the lockdown ...

  5. 【云原生】Docker Compose 构建 Jenkins

  6. Docker compose 容器编排

    1. 概述 问题:如果要使用 Docker 运行 LNMP 架构,那么 Nginx.MySQL.PHP. Linux三个服务运行在一个容器里,还是运行在多个容器里呢? 答案是都可以. 你可以分别放在三 ...

  7. Docker容器虚拟化技术---Docker运维管理(Docker Compose)4

    Docker容器虚拟化技术-Docker运维管理(Docker Compose)4 Docker Compose 通过前面的讲解我们知道使用一个Dockerfile模板文件,可以很方便地定义一个单独的 ...

  8. docker compose dns 缓存_Docker深入浅出 | Docker Compose多容器实战

    Docker已经上市很多年,不是什么新鲜事物了,很多企业或者开发同学以前也不多不少有所接触,但是有实操经验的人不多,本系列教程主要偏重实战,尽量讲干货,会根据本人理解去做阐述,具体官方概念可以查阅官方 ...

  9. Docker(容器、数据卷、Docker Compose)

    Docker 本次介绍以下几个内容: Docker概念 容器数据卷 Dockerfile 应用部署 服务编排 私有仓库 Docker概念 Docker 是一个开源的应用容器引擎 • 诞生于 2013 ...

最新文章

  1. idea中设置指向源代码Scala
  2. 11.2.2 例题11-3 Buy or Build
  3. 干粉灭火器的维护保养
  4. 集体奔赴农业战场 互联网巨头对话中国农民丰收节交易会
  5. input标签获取图片文件尺寸
  6. 关闭Android电池温度告警框,android电源信息查看(电量、温度、电压)实例代码
  7. 嵌套矩形——DAG上的动态规划
  8. 文件操作函数(读写)
  9. Cloud一分钟 | 阿里云发布飞天2.0操作系统;京东云串联生态伙伴专治“看病难”...
  10. Android 系统(165)---在apns-conf文件中配置一个read_only字段,使APN不可被编辑
  11. Bailian2726 采药【模拟】
  12. 添加用户到sudoers
  13. 2021-01-31
  14. 一半嫁妆钱,换了90000张照片,一个老爹的摄影计划
  15. [Django项目案例]搭建用户与商品后台管理系统
  16. czl蒻蒟的OI之路9
  17. PNP三极管的分析方法
  18. 中文命名实体识别(ner)迁移学习
  19. 从 pdf 中提取表格信息、合并、解析、输出数据
  20. 【116】Python 保留字(关键字)、标识符

热门文章

  1. 红米手机开发版怎么样获取ROOT权限
  2. 搜狗输入法,输英语单词自动提示
  3. ou邮箱用qq邮箱服务器地址,QQ邮箱怎么设置
  4. c c++ 画点 画线
  5. 创建达梦到Oracle的DBLINK(OCI方式)
  6. [游戏代码]求生之路插件:人物获得武器
  7. 收录拒绝指定ip请求黑名单lua脚本、拒绝ip频次请求的lua脚本
  8. python海龟图画龙珠_DeepOps的Python小笔记-天池龙珠计划-Python训练营-Task 02:DAY4
  9. 计算机图形学之二维平移旋转缩放代码
  10. 笔记 ~ 第三章 - 3.2 数据查询