HA

将SpringBoot应用部署到docker

Tags:

手动创建image

  1. 在项目内创建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"]
  1. 创建Docker Image
# build过程中下载经常卡住(不知道是不是gfw,因为每次卡住的资源都不一样),
# 前面加DOCKER_BUILDKIT=1,使缓存生效,这样重试的时候已经下载过的资源就不会重新下载
sudo DOCKER_BUILDKIT=1 docker build -t spring-cloud-config-server .
  1. 运行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