一个项目发布到 Docker 中,我们往往需要先编写 Dockerfile,在这个里面操作 Image 的安装,Container 的加载等操作,但像 Spring Cloud 这种一个项目下 N 个子服务(每个子服务独占一个进程)的大型项目,难道每一个子服务下都去编写 Dockerfile 吗?而且这里面还牵涉到子服务与子服务之间的通讯在 Docker 下如何去配置的问题。这种情况下,我们使用 Docker-Compose 是最适合不过的了。
1. 前言
首先上 Github 上的项目展示案例 liumapp/docker-compose-demo
接下来,我们简单介绍一下 docker-compose 的定义:
Docker Compose 是 Docker 三剑客的最后一个,第一个是 Machine,用来在不同平台下快速安装 Docker 的,第二个是 Swarm,帮助 Docker 在集群中运转,第三个便是 Docker Compose,用来帮助用户运行容器组(请注意,不是单独的容器)。
2. 使用
那么我们如何来使用 Docker Compose 呢?
在案例 liumapp/docker-compose-demo 中,我们使用 Spring Cloud 项目集群为例,来介绍如何通过 Docker Compose 将一个 Spring Cloud 项目群部署到 Docker 中。
2.1 操作步骤
2.1.1 安装 Image
第一步跟 Docker Compose 的关系不大,安装 Image,在案例中我们使用了 docker-maven-plugin 这一个插件来操作,然后编写了一个 build-image.sh 的脚本,一键完成所有项目的 Image 安装。
docker-maven-plugin 的配置如下:
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>liumapp/${project.artifactId}:${project.version}</imageName>
<baseImage>java:8</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
build-image.sh 的内容就不粘贴了,基本就是分别进入各个子服务的目录下,再依次执行
mvn clean package docker:build
来完成 Image 的安装。
2.1.2 编写 docker-compose.yml
docker-compose.yml 应该位于项目的根目录下,且在命名上不能有偏差。
在编写 docker-compose.yml 时,我们要注意,要定义的容器组位于 services 下,每一个 services 的 Id 一般跟子项目的 artifactId 保持一致,并在其下再去定义所采用的 Image、启动失败时是否重启、容器名称、主机名称、及监听和开放的端口号、依赖的服务等等内容。
具体对应的参数项为:
image: ${您采用的Image}
restart: ${是否在失败时重启,是的话为always}
container_name: ${运行时的容器名称}
hostname: ${配置网络的主机名称,可用于容器组内的通讯}
ports:
- "1234:1234" ${监听和开放的端口号}
depends_on:
- docker-compose-eureka ${依赖的服务}
那么案例中的 docker-compose.yml 的内容就不粘贴了,比较多,大家请去项目中查阅。
2.1.3 启动容器组
安装好 Image 后,我们可以使用:
docker-compose up -d
来启动,-d 表示以守护进程的形式运行。
2.1.4 停止容器组
想要关停容器组,我们可以使用:
docker-compose down
来停止。
2.1.5 删除 Image
案例中我们使用了 rm-images.sh 脚本来删除所安装的 Image,其内容为:
docker rmi liumapp/docker-compose-config:v1.0.0
docker rmi liumapp/docker-compose-eureka:v1.0.0
docker rmi liumapp/docker-compose-gateway:v1.0.0
docker rmi liumapp/demo-api-a:v1.0.0
docker rmi liumapp/demo-api-b:v1.0.0
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于