使用 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配置SSL证书出错解决方案
Mar 31 Servers
nginx配置proxy_pass中url末尾带/与不带/的区别详解
Mar 31 Servers
Nginx+SpringBoot实现负载均衡的示例
Mar 31 Servers
图文详解Nginx版本平滑升级方案
Sep 15 Servers
Nginx虚拟主机的搭建的实现步骤
Jan 18 Servers
Windows Server 2008 修改远程登录端口以及配置防火墙
Apr 28 Servers
阿里云 Windows server 2019 配置FTP
Apr 28 Servers
Nginx HTTP跳转至HTTPS
May 15 Servers
TaiShan 200服务器安装Ubuntu 18.04的图文教程
Jun 28 Servers
Nginx配置使用详解
Jul 07 Servers
Linux在两个服务器直接传文件的操作方法
Aug 05 Servers
nginx配置指令之server_name的具体使用
Aug 14 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
在线增减.htpasswd内的用户
2006/10/09 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
2018/06/01 PHP
aspx中利用js实现确认删除代码
2010/07/22 Javascript
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
JS中表单的使用小结
2014/01/11 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
谈一谈js中的执行环境及作用域
2016/03/30 Javascript
Servlet实现文件上传,可多文件上传示例
2016/12/05 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
JS实现验证码倒计时的注册页面
2018/01/02 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
js的继承方法小结(prototype、call、apply)(推荐)
2019/04/17 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python 异或加密字符串的实例
2018/10/14 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
Python3从零开始搭建一个语音对话机器人的实现
2019/08/23 Python
Python如何在循环内使用list.remove()
2020/06/01 Python
python 模拟登陆163邮箱
2020/12/15 Python
捷克鲜花配送:Florea.cz
2018/10/29 全球购物
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
了解AppleShare protocol(AppleShare协议)吗
2015/08/28 面试题
物流专业求职计划书
2014/01/10 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
班级课外活动总结
2014/07/09 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
2014幼儿教师个人工作总结
2014/12/03 职场文书
妇联2016年六一国际儿童节活动总结
2016/04/06 职场文书
导游词之桂林
2019/08/20 职场文书