使用 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搭建rtmp直播服务器实现代码
Mar 31 Servers
apache基于端口创建虚拟主机的示例
Apr 22 Servers
Linux中Nginx的防盗链和优化的实现代码
Jun 20 Servers
Windows下用Nginx配置https服务器及反向代理的问题
Sep 25 Servers
zabbix自定义监控nginx状态实现过程
Nov 01 Servers
nginx内存池源码解析
Nov 20 Servers
Z-Order加速Hudi大规模数据集方案分析
Mar 31 Servers
ubuntu下常用apt命令介绍
Jun 05 Servers
使用Apache Camel表达REST服务的方法
Jun 10 Servers
在虚拟机中安装windows server 2008的图文教程
Jun 28 Servers
TaiShan 200服务器安装Ubuntu 18.04的图文教程
Jun 28 Servers
windows系统搭建WEB服务器详细教程
Aug 05 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第一次无法获取cookie问题处理
2014/12/15 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
AngularJS实践之使用ng-repeat中$index的注意点
2016/12/22 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
python基础教程之匿名函数lambda
2017/01/17 Python
python安装cx_Oracle模块常见问题与解决方法
2017/02/21 Python
Python set常用操作函数集锦
2017/11/15 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
Django框架模板介绍
2019/01/15 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
高三语文教学反思
2014/01/15 职场文书
水果超市创业计划书
2014/01/27 职场文书
优秀教师演讲稿
2014/05/06 职场文书
反邪教宣传工作方案
2014/05/07 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
2015年仓库管理工作总结
2015/05/25 职场文书
html form表单基础入门案例讲解
2021/07/21 HTML / CSS
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android