使用 Docker Compose 构建复杂的多容器 App的方法

 更新时间:2022年04月30日 14:47:06   作者:小公鸡卡哇伊呀~  
Docker Compose 工具相当于 C/C++ 的 make 工具,使用 make 需要 Makefile,所有的编译链接设置都在Makefile 中指定,不需要为了运行程序而每次都在终端手动输入长串的指令,这篇文章主要介绍了使用 Docker Compose 构建复杂的多容器 App,需要的朋友可以参考下

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.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的文章就介绍到这了,更多相关Docker Compose 多容器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Kubernetes和Docke实现留言簿案例

    基于Kubernetes和Docke实现留言簿案例

    这篇文章主要介绍了基于Kubernetes和Docke实现留言簿案例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 详解docker部署SpringBoot及替换jar包的方法

    详解docker部署SpringBoot及替换jar包的方法

    这篇文章主要介绍了详解docker部署SpringBoot及替换jar包的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • docker如何快速搭建几个常用的第三方服务详解

    docker如何快速搭建几个常用的第三方服务详解

    这篇文章主要给大家介绍了关于利用docker如何快速搭建几个常用的第三方服务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • 将strapi打包成docker镜像的步骤详解

    将strapi打包成docker镜像的步骤详解

    在这个指南中,我们将学习如何将 Strapi 应用程序打包成 Docker 镜像,解决多环境部署问题,文末也会提供打包好的镜像地址,让同学们能够直接使用,需要的朋友可以参考下
    2024-01-01
  • docker编译IJKPlayer播放器记录详解

    docker编译IJKPlayer播放器记录详解

    这篇文章主要为大家介绍了docker编译IJKPlayer播放器记录详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Docker搭建MySQL双主复制详细教程

    Docker搭建MySQL双主复制详细教程

    Docker MySQL 双主复制是一种数据库高可用和数据冗余的技术,它利用 Docker 容器化的优势,在两个或多台MySQL服务器上同时运行并维护数据库副本,这两个主服务器可以互相同步数据更新,本文给大家介绍了Docker搭建MySQL双主复制详细教程,需要的朋友可以参考下
    2024-07-07
  • docker下安装Nginx的方法

    docker下安装Nginx的方法

    这篇文章主要介绍了docker下安装Nginx的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • Centos-docker文件迁移的解决办法

    Centos-docker文件迁移的解决办法

    Docker镜像默认存放在系统的根目录下,可能会导致根目录空间不足或其他风险,为了避免这些问题,可以将Docker镜像的存储位置更改到其他磁盘,本文介绍Centos-docker文件迁移的解决办法,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • Docker安装Oracle19c史上最全步骤

    Docker安装Oracle19c史上最全步骤

    本文主要介绍了Docker安装Oracle19c,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Docker构建Maven+Tomcat基础镜像的实现

    Docker构建Maven+Tomcat基础镜像的实现

    这篇文章主要介绍了Docker构建Maven+Tomcat基础镜像的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09

最新评论