准备工作
这次部署两个项目,一个是 web 站点项目,一个是爬虫的后台应用项目。
- 两个项目的 jar 包,分别为 app.jar,spider.jar
- 两个应用都依赖 redis 和 mysql
- 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
执行打包部署。