使用 Docker Compose 构建复杂的多容器App


Posted in Servers onApril 30, 2022

1 为什么需要 Docker Compose

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

2 什么是 Docker Compose

Docker Compose 工具相当于 C/C++ 的 make 工具,使用 make 需要 Makefile,所有的编译链接设置都在Makefile 中指定,不需要为了运行程序而每次都在终端手动输入长串的指令。

Docker Compose 同样也需要一个配置文件: docker-compose.yaml(文件扩展名也可以是 yml).

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

3 Docker Compose 的使用

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

使用 Docker Compose 构建复杂的多容器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 获取官方image
    image: "mongo" 
	# 命名卷: 持久化保存数据库数据
    volumes:
      - data:/data/db
    
    # 环境变量,在文件 ./env/mongo.env 里保存
    env_file:
      - ./env/mongo.env
  backend:
    build: ./backend
    ports:
      - "80:80"
    volumes:
      # 命名卷
      - logs:/app/logs
      # 绑定挂载,不同于命令,此文件中可以使用相对路径,
      # 手动运行命令则需绝对路径
      - ./backend:/app
      # 匿名卷
      - /app/node_modules
    env_file:
      - ./env/backend.env
    depends_on:
      - mongodb
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    volumes:
      - ./frontend/src:/app/src
	
	# stdin_open 和 tty 对应手动执行命令时的 -it
    stdin_open: true
    tty: true
    
    # 仅仅在容器 backend 运行后,才会运行此 frontend
    depends_on:
      - backend
      - 
# 这里是整个 App 的命名卷
# 匿名卷和 bind-mounts 不能在这里指定
volumes:
  data:
  logs:

3.1 启动容器

docker-compose up

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

docker-compose up -d

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

3.2 停止并删除容器

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

不管是单容器还是多容器,使用 Docker Compose 能极大简化容器的创建、管理和维护,由此可见,Docker Compose 是一个强大的非常有用的工具。

到此这篇关于使用 Docker Compose 构建复杂的多容器 App的文章就介绍到这了!


Tags in this post...

Servers 相关文章推荐
查看nginx配置文件路径和资源文件路径的方法
Mar 31 Servers
win10安装配置nginx的过程
Mar 31 Servers
Nginx配置https原理及实现过程详解
Mar 31 Servers
Nginx下配置Https证书详细过程
Apr 01 Servers
排查Tomcat进程假死的问题
May 06 Servers
Nginx HTTP跳转至HTTPS
May 15 Servers
linux目录管理方法介绍
Jun 01 Servers
腾讯云服务器部署前后分离项目之前端部署
Jun 28 Servers
Nginx跨域问题解析与解决
Aug 05 Servers
Nginx 502 bad gateway错误解决的九种方案及原因
Aug 14 Servers
CentOS7设置ssh服务以及端口修改方式
Dec 24 Servers
搭建Yolov5服务器
KVM基础命令详解
Apr 30 #Servers
Win10 Anaconda安装python-pcl
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
Apr 29 #Servers
解决IIS7下无法绑定https主机的问题
IIS服务器中设置HTTP重定向访问HTTPS
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
You might like
php生成静态文件的多种方法分享
2012/07/17 PHP
setcookie中Cannot modify header information-headers already sent by错误的解决方法详解
2013/05/08 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
php字符集转换
2017/01/23 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
PHP实现唤起微信支付功能
2019/02/18 PHP
JS小框架 fly javascript framework
2009/11/26 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
python查看zip包中文件及大小的方法
2015/07/09 Python
python实现读取并显示图片的两种方法
2017/01/13 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
Python操作json的方法实例分析
2018/12/06 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
Python用input输入列表的实例代码
2020/02/07 Python
Marmot土拨鼠官网:美国专业户外运动品牌
2018/01/11 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
荷兰天然和有机产品网上商城:BigGreenSmile.nl
2020/07/26 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
自我鉴定的范文
2013/10/03 职场文书
出国留学介绍信
2014/01/13 职场文书
运动员口号
2014/06/09 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
军训个人总结
2015/03/03 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
使用Python拟合函数曲线
2022/04/14 Python