使用 Docker-Compose 打包多个应用

准备工作

这次部署两个项目,一个是 web 站点项目,一个是爬虫的后台应用项目。

  1. 两个项目的 jar 包,分别为 app.jar,spider.jar
  2. 两个应用都依赖 redis 和 mysql
  3. mysql 初始化需要的 sql 文件

docker file 文件

docker file 是 使用 docker 部署应用的命令。 具体的命令可以参考 Docker 命令.

由于是两个文件,所以需要两个不同的 Dockerfile .具体的 build 的内容如下:

Dockerfile web 的 build 文件

1
2
3
4
5
6
7
8
9
10
FROM java:8
MAINTAINER fuwei<laofu_online@163.com>

COPY oncesearch-portal-1.0-SNAPSHOT.jar /app.jar

CMD ["--server.port=80"]
EXPOSE 80

ENTRYPOINT ["java","-jar","/app.jar"]

爬虫的文件

1
2
3
4
5
6
7
8
FROM java:8
MAINTAINER fuwei<laofu_online@163.com>

COPY oncesearch-spider-1.0.0.jar /spider.jar


ENTRYPOINT ["java","-jar","/spider.jar"]

Compose 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
version: "3.0"
services:
portal:
build:
dockerfile: Dockerfile
context: .
image: portal
depends_on:
- redis
- mysql
ports:
- 80:80
spider:
build:
dockerfile: DockerfileSpider
context: .
image: spider
depends_on:
- redis
- mysql
redis:
image: "library/redis:alpine" # 版本
mysql:
image: "mysql:latest"
environment:
MYSQL_ROOT_PASSWORD: "Abc12345++++"
MYSQL_USER: 'root'
MYSQL_PASS: "Abc12345++++"
volumes: # 挂载目录
- "./db:/var/lib/mysql"
- "./conf/my.cnf:/etc/my.cnf"
- "./init:/docker-entrypoint-initdb.d/" # 初始化的 sql
\ ports: # 对内和对外的端口
- "3307:3306"


最终文件的目录:

1
2
3
4
5
6
7
8
9
.
├── Dockerfile
├── DockerfileSpider
├── docker-compose.yml
├── init
│   └── ITBlog.sql
├── oncesearch-portal-1.0-SNAPSHOT.jar
└── oncesearch-spider-1.0.0.jar

如何访问 DB 和 Redis.

由于 docker compose 会自动创建一个虚拟的内网环境,所以在访问 MySQL 和 Redis 只需要使用镜像的名称即可解析到对应的域名。

1
2
3
# DB 连接字符串,直接使用镜像的名称即可
url: jdbc:mysql://mysql:3306/ITBlog?serverTimezone=UTC

最后直接执行 docker-compose执行打包部署。