Docker Compose 的使用及案例分析

阅读时长 8 分钟读完

Docker Compose 是 Docker 官方提供的一个用于定义和运行多个 Docker 容器的工具。它可以通过一个 YAML 文件来定义应用的各个服务,然后使用一个命令就可以启动、停止和重启整个应用。

Docker Compose 的安装

Docker Compose 可以通过 pip 工具安装,前提是已经安装了 Docker。如果还没有安装 Docker,请先参考 Docker 官方文档进行安装。

安装 Docker Compose 的命令如下:

安装成功后,可以通过以下命令来检查版本:

Docker Compose 的使用

编写 Docker Compose 文件

Docker Compose 的核心是一个 YAML 文件,用于定义应用的各个服务。以下是一个简单的示例:

这个 YAML 文件定义了两个服务:web 和 redis。web 服务使用当前目录下的 Dockerfile 来构建镜像,并将容器的 5000 端口映射到主机的 5000 端口;redis 服务使用官方的 Redis 镜像。

启动应用

使用以下命令来启动应用:

这个命令会启动所有定义的服务,并将它们的日志输出到终端。如果想在后台运行,可以使用 -d 参数:

停止应用

使用以下命令来停止应用:

这个命令会停止并删除所有容器和网络。

其他常用命令

以下是一些其他常用的 Docker Compose 命令:

  • docker-compose ps:查看当前运行的容器。
  • docker-compose logs:查看容器的日志输出。
  • docker-compose build:构建所有服务的镜像。
  • docker-compose restart:重启所有服务。
  • docker-compose stop:停止所有服务。

Docker Compose 的案例分析

Flask 应用

以下是一个使用 Docker Compose 运行 Flask 应用的示例。

Dockerfile

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

------- ----

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

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

---- - -

--- ---------- ---------
展开代码

这个 Dockerfile 使用 Python 3.7 的 Alpine 版本作为基础镜像,并安装应用所需的 Python 包。最后启动应用的入口是 app.py 文件。

docker-compose.yml

-- -------------------- ---- -------
-------- ---
---------
  ----
    ------ -
    ------
      - -----------
    --------
      - ------
    -----------
      - --
    ------------
      - ---------------------
      - ----------------
  ---
    ------ ------------------
    ------------
      - ----------------------
      - --------------------------
      - -----------------
展开代码

这个 YAML 文件定义了两个服务:web 和 db。web 服务使用当前目录下的 Dockerfile 来构建镜像,并将容器的 5000 端口映射到主机的 5000 端口;另外还将当前目录挂载到容器的 /app 目录,以便在开发过程中进行实时调试。web 服务还依赖于 db 服务,因此在启动时会先启动 db 服务。db 服务使用官方的 PostgreSQL 镜像,并设置了默认的用户名、密码和数据库名。

app.py

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

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

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

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

-- -------- -- -----------
    ----------------------- ----------
展开代码

这个 app.py 文件定义了一个简单的 Flask 应用,其中使用了 SQLAlchemy 来访问 PostgreSQL 数据库。在数据库中定义了一个 User 表,并在首页中显示所有用户的姓名。

Node.js 应用

以下是一个使用 Docker Compose 运行 Node.js 应用的示例。

Dockerfile

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

------- ----

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

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

---- - -

--- ------- --------
展开代码

这个 Dockerfile 使用 Node.js 12 的 Alpine 版本作为基础镜像,并安装应用所需的 Node.js 包。最后启动应用的入口是 package.json 文件中定义的 start 命令。

docker-compose.yml

-- -------------------- ---- -------
-------- ---
---------
  ----
    ------ -
    ------
      - -----------
    --------
      - ------
    -----------
      - --
    ------------
      - --------------------
      - ----------
  ---
    ------ ------------------
    ------------
      - ----------------------
      - --------------------------
      - -----------------
展开代码

这个 YAML 文件定义了两个服务:web 和 db。web 服务使用当前目录下的 Dockerfile 来构建镜像,并将容器的 3000 端口映射到主机的 3000 端口;另外还将当前目录挂载到容器的 /app 目录,以便在开发过程中进行实时调试。web 服务还依赖于 db 服务,因此在启动时会先启动 db 服务。db 服务使用官方的 PostgreSQL 镜像,并设置了默认的用户名、密码和数据库名。

app.js

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

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

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

---------------- -- -- -
  ---------------- --------- -- ---- --------
---
展开代码

这个 app.js 文件定义了一个简单的 Express 应用,其中使用了 pg 库来访问 PostgreSQL 数据库。在数据库中定义了一个 users 表,并在首页中显示所有用户的姓名。

总结

Docker Compose 是一个非常实用的工具,可以方便地管理多个容器的运行。在实际开发中,可以根据不同的需求来编写不同的 Docker Compose 文件,以提高开发效率和运维管理能力。

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

纠错
反馈

纠错反馈