使用 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 proxy_cache 缓存配置详解
Mar 31 Servers
阿里云Nginx配置https实现域名访问项目(图文教程)
Mar 31 Servers
apache基于端口创建虚拟主机的示例
Apr 24 Servers
学习nginx基础知识
Sep 04 Servers
Nginx的基本概念和原理
Mar 21 Servers
iSCSI服务器CHAP双向认证配置
Apr 01 Servers
Apache Hudi 加速传统的批处理模式
Apr 24 Servers
nginx日志格式分析和修改
Apr 28 Servers
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
May 11 Servers
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
May 25 Servers
windows server2012 R2下安装PaddleOCR服务的的详细步骤
Sep 23 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
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
CI框架常用函数封装实例
2016/11/21 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
PHP array_reduce()函数的应用解析
2018/10/28 PHP
新鲜出炉的js tips提示效果
2011/04/03 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
2016/12/22 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
关于vue-router的那些事儿
2018/05/23 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
Vue数字输入框组件的使用方法
2019/10/19 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
Python中的hypot()方法使用简介
2015/05/18 Python
Python中使用不同编码读写txt文件详解
2015/05/28 Python
Python部署web开发程序的几种方法
2017/05/05 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
python实现一组典型数据格式转换
2018/12/15 Python
Python3实现的判断环形链表算法示例
2019/03/07 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
Python 字符串类型列表转换成真正列表类型过程解析
2019/08/26 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
使用python库xlsxwriter库来输出各种xlsx文件的示例
2020/09/01 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
台湾SHOPRO购物行家:亚洲首创影视.3C.家电.优质购物平台
2018/05/07 全球购物
法国最大的在线眼镜店:EasyLunettes
2019/08/26 全球购物
2014年情人节活动方案
2014/02/16 职场文书
大学生村官承诺书
2014/03/28 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
win10如何快速切换窗口 win10切换窗口快捷键分享
2022/07/23 数码科技