使用 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
uwsgi+nginx代理Django无法访问静态资源的解决
May 10 Servers
Nginx反向代理至go-fastdfs案例讲解
Aug 02 Servers
nginx中proxy_pass各种用法详解
Nov 07 Servers
nginx配置限速限流基于内置模块
May 02 Servers
排查Tomcat进程假死的问题
May 06 Servers
tomcat下部署jenkins的方法
May 06 Servers
Nginx 常用配置
May 15 Servers
Apache Kafka 分区重分配的实现原理解析
Jul 15 Servers
Centos7 Shell编程之正则表达式、文本处理工具详解
Aug 05 Servers
Tomcat安装使用及部署Web项目的3种方法汇总
Aug 14 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
PHP新手上路(七)
2006/10/09 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
javascript中2个感叹号的用法实例详解
2014/09/04 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
2016/06/05 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
Vue引入Stylus知识点总结
2020/01/16 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
简单介绍Python中的JSON模块
2015/04/08 Python
python3中int(整型)的使用教程
2017/03/23 Python
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
python字典操作实例详解
2017/11/16 Python
python实现二叉树的遍历
2017/12/11 Python
Python实现Event回调机制的方法
2019/02/13 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
OnePlus加拿大官网:中国国际化手机品牌
2020/10/13 全球购物
数据库的约束含义
2012/09/09 面试题
保送生自荐信范文
2013/10/06 职场文书
学生个人自我鉴定范文
2014/03/28 职场文书
建筑节能汇报材料
2014/08/22 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
财务整改报告范文
2014/11/05 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
gtx1650怎么样 gtx1650显卡相当于什么级别
2022/04/08 数码科技