Appearance
Docker发布
使用 Docker 部署 Spring Boot
注意
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单。
项目添加 Docker 支持
- plugins 中添加 Docker 构建插件
xml
<!-- docker打包插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-maven-plugin.version}</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<tag>${acuity-project.version}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
<!-- docker打包插件 -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>${dockerfile-maven-plugin.version}</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<tag>${acuity-project.version}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
dockerfile
- 创建 Dockerfile 文件,Dockerfile 文件用来说明如何来构建镜像。
shell
FROM openjdk:11-jre
MAINTAINER acuity acuier@163.com
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
ARG JAR_FILE="target/XXX-server.jar" #貌似取不到JAR_FILE
ADD ${JAR_FILE} /app.jar # or COPY ${JAR_FILE} /app.jar
ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-Ddruid.mysql.usePingMethod=false", "-jar", "/app.jar"]
CMD ["--spring.profiles.active=docker"]
FROM openjdk:11-jre
MAINTAINER acuity acuier@163.com
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone
ARG JAR_FILE="target/XXX-server.jar" #貌似取不到JAR_FILE
ADD ${JAR_FILE} /app.jar # or COPY ${JAR_FILE} /app.jar
ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-Ddruid.mysql.usePingMethod=false", "-jar", "/app.jar"]
CMD ["--spring.profiles.active=docker"]
必要的服务docker-compose.yml示例
使用docker部署的支持服务,
yaml
version: '3.1'
services:
db:
image: mysql:8.0.24
container_name: acuity_mysql8
restart: always
environment:
MYSQL_ROOT_PASSWORD: 20180101
MYSQL_USER: acuier # 设置另一个用户 test
MYSQL_PASS: Gyhcqd0408 # acuier的密码
TZ: Asia/Shanghai
default-time_zone: '+8:00'
# docker安全验证
security_opt:
- seccomp:unconfined
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 13306:3306
volumes:
- ./data:/var/lib/mysql
- ./conf:/etc/mysql/conf.d
- ./logs:/logs
version: '3.1'
services:
db:
image: mysql:8.0.24
container_name: acuity_mysql8
restart: always
environment:
MYSQL_ROOT_PASSWORD: 20180101
MYSQL_USER: acuier # 设置另一个用户 test
MYSQL_PASS: Gyhcqd0408 # acuier的密码
TZ: Asia/Shanghai
default-time_zone: '+8:00'
# docker安全验证
security_opt:
- seccomp:unconfined
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 13306:3306
volumes:
- ./data:/var/lib/mysql
- ./conf:/etc/mysql/conf.d
- ./logs:/logs
yaml
version: '3'
services:
minio:
image: minio/minio:latest
container_name: myminio
ports:
- 9000:9000
- 9001:9001
volumes:
- ./data:/data
- ./config:/root/.minio
environment:
MINIO_ROOT_USER: "root"
MINIO_ROOT_PASSWORD: "root"
command: server --console-address ':9001' /data
restart: always
privileged: true
version: '3'
services:
minio:
image: minio/minio:latest
container_name: myminio
ports:
- 9000:9000
- 9001:9001
volumes:
- ./data:/data
- ./config:/root/.minio
environment:
MINIO_ROOT_USER: "root"
MINIO_ROOT_PASSWORD: "root"
command: server --console-address ':9001' /data
restart: always
privileged: true
yaml
version: '3'
services:
redis:
image: redis:6.0.8
container_name: redis
volumes:
- ./conf/redis.conf:/etc/redis.conf
- ./conf/sysctl.conf:/etc/sysctl.conf
ports:
- '6379:6379'
command: [ "redis-server", "/etc/redis.conf" ]
restart: always
version: '3'
services:
redis:
image: redis:6.0.8
container_name: redis
volumes:
- ./conf/redis.conf:/etc/redis.conf
- ./conf/sysctl.conf:/etc/sysctl.conf
ports:
- '6379:6379'
command: [ "redis-server", "/etc/redis.conf" ]
restart: always
yaml
version: '2'
services:
rabbitmq:
container_name: rabbitMQ
hostname: rabbitmq
environment:
RABBITMQ_DEFAULT_USER: "acuier"
RABBITMQ_DEFAULT_PASS: "20180101"
image: "rabbitmq:3.8.16-management"
restart: always
volumes:
- "./data:/var/lib/rabbitmq"
- "./log:/var/log/rabbitmq/log"
ports:
- "15672:15672"
- "5672:5672"
version: '2'
services:
rabbitmq:
container_name: rabbitMQ
hostname: rabbitmq
environment:
RABBITMQ_DEFAULT_USER: "acuier"
RABBITMQ_DEFAULT_PASS: "20180101"
image: "rabbitmq:3.8.16-management"
restart: always
volumes:
- "./data:/var/lib/rabbitmq"
- "./log:/var/log/rabbitmq/log"
ports:
- "15672:15672"
- "5672:5672"