将SpringBoot应用部署到docker
手动创建image
- 在项目内创建Dockerfile
FROM maven:3.8.7-eclipse-temurin-11-focal
COPY . .
CMD ["mvn", "spring-boot:run", "-Dspring-boot.run.profiles=docker"]
# ENTRYPOINT ["mvn", "spring-boot:run", "-Dspring-boot.run.profiles=docker"]
- 创建Docker Image
# build过程中下载经常卡住(不知道是不是gfw,因为每次卡住的资源都不一样),
# 前面加DOCKER_BUILDKIT=1,使缓存生效,这样重试的时候已经下载过的资源就不会重新下载
sudo DOCKER_BUILDKIT=1 docker build -t spring-cloud-config-server .
- 运行docker实例
# -e 设置环境变量(TZ:实例的时区)
# -d 运行在后台
# --name spring-cloud-config-server_1 指定实例名
# -v /home/vu18/.m2:/root/.m2 将主机的maven仓库映射到docker实例,免得再次下载
# -p8888:8888 主机端口:docker实例端口映射
sudo docker run -e TZ=Etc/GMT-8 -d --name spring-cloud-config-server_1 -v ${HOME}/.m2:/root/.m2 -v ${PWD}/logs:/logs -p8888:8888 spring-cloud-config-server
使用spring-boot-maven-plugin创建image(需要当前用户有执行docker的权限)
mvn spring-boot:build-image
sudo docker run -e TZ=Etc/GMT-8 -d --name config-server_1 -e "SPRING_PROFILES_ACTIVE=docker" -v ${PWD}/logs:/logs -p8888:8888 config-server:0.0.1-SNAPSHOT
注意事项
第一个命令到最后会从github下载jre包,因为gfw会报错,需要在pom.xml中配置代理,而且代理只支持http代理,且不能使用localhost或者127.0.0.1作为ip,而应使用本机的网卡ip地址。(http代理尝试用shadowsocks-rust配了一下没成功,可能哪里配错了,用v2ray配置成功了)
pom.xml
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<image>
<env>
<HTTP_PROXY>http://proxy.example.com</HTTP_PROXY>
<HTTPS_PROXY>https://proxy.example.com</HTTPS_PROXY>
</env>
<!-- 防止重复下载buildpack -->
<pullPolicy>IF_NOT_PRESENT</pullPolicy>
</image>
</configuration>
</plugin>
</plugins>
</build>
</project>
v2ray-config.json
"inbounds": [
{
{
"port": 1086,
"listen": "0.0.0.0",
"protocol": "http",
"settings": {
"udp": false
}
}
}
]
reference
Updated: 2023-02-19 20:00
Created: 2023-02-05 20:00