头条上看到一个权限管理系统的介绍,今天原本想研究一下,clone代码后发现工程自带了Dockfile和docker-compose.yml, 因而研究了一下Spring Boot工程的Docker化。以renren-admin工程为例,要将一个Spring Boot工程Docker化,须要的操做有:java
1)新建一个Dockfile在工程的根目录下:mysql
内容如:git
FROM java:8 EXPOSE 8080 VOLUME /tmp ADD target/renren-admin.jar app.jar RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-jar","/app.jar"]
2)经过mvn clean install生成jar包。spring
3)打开Docker Quickstart Terminal,进入renren-admin的根目录,经过build命令生成镜像。sql
docker build --tag=renren/admin .
4)查看imagedocker
docker image ls
5)启动数据库
docker run -d -p 8080:8080 renren/admin
6)查看containerapi
docker container ls
7)因为链接本地的mysql服务器,经过Docker启动Spring Boot应用会在一个虚拟机中,为使链接成立,有两种方式:bash
a:数据库url配置使用localhost,Docker启动带上参数 --net=host(该方法实验中不可行)服务器
docker run --net=host -d -p 8080:8080 renren/admin
b: 数据库url配置使用ip地址。
8)renren-api的docker化和服务启动可参考上述1)-7)步。
9)经过docker-compose.yml集群化部署:
可先经过docker container stop <conainerId>的方式中止renren-admin,renren-api服务。
docker-compose.yml的内容以下:
version: '3' services: renren-admin: image: renren/admin ports: - "8080:8080" environment: - spring.profiles.active=dev renren-api: image: renren/api ports: - "8081:8081" environment: - spring.profiles.active=dev
在deploy以前,确保renren/admin和renren/api两个image已build,确保有一个可用的swarm(可经过docker swarm init --advertise-addr=192.168.99.100生成一个swarm),而后:
docker stack deploy -c docker-compose.yml renren