Docker 容器批量化管理神器 docker-compose 详解

阅读时长 8 分钟读完

在前端开发中,我们经常需要搭建各种服务,比如 API 服务、数据库服务、缓存服务等等。每个服务都需要一个独立的环境,并且需要在不同的机器上部署。在这样的情况下,如何管理这些服务的环境,如何进行快速的部署和升级成为一个很大的问题。

为了解决这个问题,Docker 技术应运而生。Docker 提供了一种轻量级的虚拟化技术,并且能够快速进行部署和升级。不过,在实际的使用中,有时候需要同时管理多个 Docker 容器,而手动进行容器的启停和配置显然是极其繁琐和不可行的。因此,Docker Compose 这个工具就是为了解决这样的问题而生的。

什么是 Docker Compose

Docker Compose 是 Docker 公司推出的多容器支持工具,它允许在一个 YAML 文件中定义多个 Docker 容器及其关联的配置,并且能够一键式的管理这些容器,包括在同一主机或者不同主机上的容器。使用 Docker Compose,我们可以快速的搭建和部署包含多个 Docker 容器的服务,实现快速的开发和生产环境切换。

安装 Docker Compose

首先需要安装 Docker Compose 工具,可以通过官方下载页面获得最新的可执行文件。

Docker Compose 安装完成后,使用 docker-compose --version 命令验证安装是否成功。

Docker Compose 基本概念

在使用 Docker Compose 之前,需要了解 Docker Compose 中各个组件的基本概念:

  • 服务 (services):本质上这是一个容器,实际上可能会包含多个容器实例。
  • 网络 (networks):Docker Compose 容器互相通信的管理方式。
  • 数据卷 (volumes):对容器数据进行持久化,不受容器停止导致数据丢失的影响。
  • 配置 (configs):在 Docker Swarm 模式中使用,Docker Compose 不支持配置。

Docker Compose 的使用

使用 Docker Compose 非常简单,只需要按照以下步骤执行即可:

  1. 创建一个 YAML 文件,或者通过命令行参数指定 YAML 文件的位置和名称。
  2. 在 YAML 文件中定义关于服务的相关信息和配置。
  3. 使用 docker-compose up 启动服务。
  4. 使用 docker-compose down 停止服务。

下面我们讲解一下 Docker Compose 详细的使用方法,并且提供一个具体的 Node.js 示例。

Docker Compose 示例

示例说明

本文的 Node.js 示例,包含三个服务:一个 Web 服务器、一个 Mongo 数据库、一个 Redis 数据库。Web 服务器需要连接到 Mongo 数据库和 Redis 数据库来获取和存储信息。

示例文件结构

Docker Compose 配置文件:docker-compose.yml

-- -------------------- ---- -------
-------- -----
---------
  ----
    ------ -
    -------- --- --- -----
    ------
      - -----------
    -----------
      - -----
      - -----
  ------
    ------ ------------------
    --------
      - ---------------------
    ------
      - -------------
  ------
    ------ ----------------
    --------
      - ------------------
    ------
      - -----------

以上 YAML 文件定义了三个服务:

  • app 服务:使用构建本地镜像的方法部署,启动命令是 npm run start,容器会将宿主机的 3000 端口映射到容器的 3000 端口,同时需要依赖 mongoredis 两个服务。
  • mongo 服务:使用官方的 MongoDB 镜像部署,容器会将宿主机的 27017 端口映射到容器的 27017 端口,并且将数据挂载到宿主机的 ./data/mongo 目录下。
  • redis 服务:使用官方的 Redis 镜像部署,容器会将宿主机的 6379 端口映射到容器的 6379 端口,并且将数据挂载到宿主机的 ./data/redis 目录下。

Web 服务器代码:app/app.js

-- -------------------- ---- -------
----- ------- - -------------------
----- -------- - --------------------
----- ----- - -----------------

----- --- - ----------

----- -------- - -------------------------------
----- -------- - --------

----- ----------- - -------------------- ----- -------- ---

----- -------- - -------
----- ----------- - --- -----------------
  ----- -------
---

----- ---------- - ---------------------- -------------

------------ ----- ----- ---- -- -
  ----- ---------- - ----- --- ----------------- -- -
    ------------------------- ----- ------- -- -
      ----------------
    ---
  ---

  --- ---------- - ---
  --- -
    ----- -------- - ----- -----------------------
    ---------- - -------- - ------------- - ---
  - ----- ----- -
    -------------------
  -

  ------------------------- ------- -------- ----- ----

  ---------------- -------------- -----------------
---

------ -- -- -
  ----- -------------------------- - ---------------- ---- ---
-----

---------------- -- -- ------------------- ------- -- ---- --------

以上是一个简单的 Web 服务器,连接到了 Mongo 数据库和 Redis 数据库,实现了“读操作”和“写操作”。

数据库初始化代码:mongo-init.js

-- -------------------- ---- -------
----- -------- - --------------------
----- -------- - -------------------------------

----- ----------- - --- -----------------
  ----- -------
---

----- ---------- - ---------------------- -------------

--------
  ------------------ - ---------------- ---- --
  -------- -- ------------------- ----- ------- -------- ---
  -------- -- -----------------------

以上代码用于初始化 MongoDB 数据库,创建一个名为 testdb 的数据库,并在里面创建一个名为 Test 的数据表,同时在数据表中插入一条数据。

Dockerfile 文件:Dockerfile

-- -------------------- ---- -------
---- --------------

------- ----

---- ------------- --

--- --- -------

---- - -

------ ----

--- ------- ------ --------

以上 Dockerfile 文件用于构建 Node.js 应用镜像。

  • 在 Docker 容器中创建一个工作目录 /app,并且设置工作目录为 /app
  • 将当前目录下的 package*.json 文件复制到容器的 /app 目录下。
  • 运行 npm install,安装依赖。
  • 将当前目录下的所有文件复制到容器的 /app 目录下。
  • 容器暴露 3000 端口。
  • 通过 CMD ["npm", "run", "start"] 命令启动应用。

部署

在项目目录下,执行如下命令,启动服务。

启动之后,访问 http://localhost:3000,可以看到返回值为:“Hello, Docker MongoDB, Hello, Redis!”。

停止服务,可以执行如下命令:

总结

Docker Compose 可以帮助我们快速的批量化管理多个 Docker 容器,并且在不同的服务器上实现快速的部署和升级。在使用 Docker Compose 时,需要注意定义服务之间的依赖关系,并且合理的使用数据卷来确保数据持久化。本文提供了一个简单的 Node.js 示例,希望对您有所帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6462fa61968c7c53b0404ecf

纠错
反馈