使用 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
nginx proxy_cache 缓存配置详解
Mar 31 Servers
详解Nginx 工作原理
Mar 31 Servers
nginx请求限制配置方法
Jul 09 Servers
Rhit高效可视化Nginx日志查看工具
Nov 01 Servers
CentOS安装Nginx并部署vue
Apr 12 Servers
使用 Docker Compose 构建复杂的多容器App
Apr 30 Servers
nginx 配置缓存
May 11 Servers
Nginx本地配置SSL访问的实例教程
May 30 Servers
openEuler 搭建java开发环境的详细过程
Jun 10 Servers
git stash(储藏)的用法总结
Jun 25 Servers
Fluentd搭建日志收集服务
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
关于js与php互相传值的介绍
2013/06/25 PHP
jquery中常用的SET和GET
2009/01/13 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
javascript去掉前后空格的实例
2013/11/07 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
JavaScript实现弹出广告功能
2017/03/30 Javascript
设置cookie指定时间失效(实例代码)
2017/05/28 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
教你如何编写Vue.js的单元测试的方法
2018/10/17 Javascript
vue实现路由监听和参数监听
2019/10/29 Javascript
Vue父组件向子组件传值以及data和props的区别详解
2020/03/02 Javascript
将Django项目部署到CentOs服务器中
2018/10/18 Python
Python二进制文件读取并转换为浮点数详解
2019/06/25 Python
Python3 批量扫描端口的例子
2019/07/25 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
大唐电信科技股份有限公司java工程师面试经历
2016/12/09 面试题
南京软件公司的.net程序员笔试题
2014/08/31 面试题
领导党性分析材料
2014/02/15 职场文书
公司门卫岗位职责
2014/03/15 职场文书
事假请假条范文
2014/04/11 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
爱心捐赠活动简讯
2015/07/20 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
漫画「你在春天醒来」第10卷封面公开
2022/03/21 日漫
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python