Docker Compose 是 Docker 官方提供的一个用于定义和运行多个 Docker 容器的工具。它可以通过一个 YAML 文件来定义应用的各个服务,然后使用一个命令就可以启动、停止和重启整个应用。
Docker Compose 的安装
Docker Compose 可以通过 pip 工具安装,前提是已经安装了 Docker。如果还没有安装 Docker,请先参考 Docker 官方文档进行安装。
安装 Docker Compose 的命令如下:
$ sudo pip install docker-compose
安装成功后,可以通过以下命令来检查版本:
$ docker-compose --version
Docker Compose 的使用
编写 Docker Compose 文件
Docker Compose 的核心是一个 YAML 文件,用于定义应用的各个服务。以下是一个简单的示例:
version: '3' services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine"
这个 YAML 文件定义了两个服务:web 和 redis。web 服务使用当前目录下的 Dockerfile 来构建镜像,并将容器的 5000 端口映射到主机的 5000 端口;redis 服务使用官方的 Redis 镜像。
启动应用
使用以下命令来启动应用:
$ docker-compose up
这个命令会启动所有定义的服务,并将它们的日志输出到终端。如果想在后台运行,可以使用 -d
参数:
$ docker-compose up -d
停止应用
使用以下命令来停止应用:
$ docker-compose down
这个命令会停止并删除所有容器和网络。
其他常用命令
以下是一些其他常用的 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