使用 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 相关文章推荐
使用Apache的rewrite
Mar 09 Servers
nginx常用命令放入shell脚本详解
Mar 31 Servers
Nginx设置日志打印post请求参数的方法
Mar 31 Servers
提升Nginx性能的一些建议
Mar 31 Servers
使用Nginx搭载rtmp直播服务器的方法
Oct 16 Servers
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
Feb 12 Servers
Windows和Linux上部署Golang并运行程序
Apr 22 Servers
Windows server 2012搭建FTP服务器
Apr 29 Servers
vscode内网访问服务器的方法
Jun 28 Servers
vscode远程免密登入Linux服务器的配置方法
Jun 28 Servers
教你nginx跳转配置的四种方式
Jul 07 Servers
教你使用Ubuntu搭建DNS服务器
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
这部好评如潮的动漫 知名梗频出 但是画风劝退很多人
2020/03/08 日漫
PHP默认安装产生系统漏洞
2006/10/09 PHP
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
PHP汉字转换拼音的函数代码
2015/12/30 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
js null,undefined,字符串小结
2010/08/21 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
JS调用页面表格导出excel示例代码
2014/03/18 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
浅谈js中的变量名和函数名重名
2017/02/13 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
vue 解决uglifyjs-webpack-plugin打包出现报错的问题
2020/08/04 Javascript
微信小程序实现星星评分效果
2020/11/01 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
简单介绍Python中的struct模块
2015/04/28 Python
Python中isnumeric()方法的使用简介
2015/05/19 Python
如何使用Python 打印各种三角形
2019/06/28 Python
Python企业编码生成系统总体系统设计概述
2019/07/26 Python
Python  Django 母版和继承解析
2019/08/09 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
Python3获取cookie常用三种方案
2020/10/05 Python
德国玩具商店:Planet Happy DE
2021/01/16 全球购物
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
创业计划书如何编写
2014/02/06 职场文书
2016年元旦致辞
2015/08/01 职场文书