Docker Compose 可以很方便地将一组相互依赖的容器组合在一起,因此很适合用于测试和开发,以及持续集成环境中。使用 Docker Compose,使用 docker-compose up
即可启动一组服务,极大地提高了开发和测试效率。
注:本篇文章基于 spring-security-react-ant-design-polls-app ,这个项目实现了一个由 Spring Boot 后端、React 前端和 MySQL 数据库组成的 Polling App(投票应用)。
一、Docker Compose 简介
安装详情可以查阅官方文档,简单来说,Mac 系统下 Docker Desktop 里已经包含 docker-compose
可执行文件。如果是 Linux 系统,则:
# 下载 docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 加上可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 测试是否安装成功
docker-compose --version
使用 Docker Compose 分为三个步骤:
- 使用
Dockerfile
打包应用; - 创建
docker-compose.yml
来描述一组容器之间的关系; - 运行
docker-compose up
启动一组容器。
一个 docker-compose.yml
结构如下:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
docker-compose.yml
的具体参数含义可以查阅这里。
二、快速体验
git clone https://github.com/callicoder/spring-security-react-ant-design-polls-app.git
cd spring-security-react-ant-design-polls-app
docker-compose up
注:第一次执行需要编译 Docker 镜像,需要一些时间,之后执行则直接从缓存的本地镜像库取出。
如果编译过程中,网络连接国外服务器较慢,可以使用我已经编译好的镜像,将 build
部分注释:
app-server:
image: leopeng1995/spring-security-react-ant-design-polls-app_app-server:0.1
# # Configuration for building the docker image for the backend service
# build:
# context: polling-app-server # Use an image built from the specified dockerfile in the `polling-app-server` directory.
# dockerfile: Dockerfile
app-client:
image: leopeng1995/spring-security-react-ant-design-polls-app_app-client:0.1
# build:
# context: polling-app-client # Use an image built from the specified dockerfile in the `polling-app-client` directory.
# dockerfile: Dockerfile
# args:
# REACT_APP_API_BASE_URL: http://127.0.0.1:8080/api
打开浏览器,访问 http://localhost:9090/ 。
开启一个新终端,执行 docker ps
查看当前运行的容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd37efa0362f spring-security-react-ant-design-polls-app_app-client "nginx -g 'daemon of…" 2 hours ago Up 40 minutes 0.0.0.0:9090->80/tcp spring-security-react-ant-design-polls-app_app-client_1
826edac574a8 spring-security-react-ant-design-polls-app_app-server "java -cp app:app/li…" 2 hours ago Up 40 minutes 0.0.0.0:8080->8080/tcp spring-security-react-ant-design-polls-app_app-server_1
72fd3bac4e36 mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 40 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp spring-security-react-ant-design-polls-app_db_1
输出列出了 docker-compose.yml
中描述的三个服务。
可以直接 Ctrl+C
终止 Docker Compose 启动的一组服务,如果使用 docker-compose up -d
(后台运行),则使用 docker-compose down
一键停止 。
三、细节详解
体验过 Docker Compose 的效果,下面来解释该项目的一些细节。项目目录下有三个子文件夹:
- deployments:这里是用于创建 Kubernetes 资源文件,在本篇中略过不表。
- polling-app-server:Polling App 的后端,由 Spring Boot 实现。
- polling-app-client:Polling App 的前端,由 React 实现。
前后端应用的 Dockerfile 不是本文的重点,略过不表。重点看项目目录下的 docker-compose.yml
:
version: '3.7' # docker-compose.yml 的格式版本为 3.7
四、常见的 Docker Compose 应用场景
- ELK Stack
网友评论