docker 部署spring-boot (ubuntu)

一、项目改造

1.1、pom.xml 改造
    <!--  一、命名docker镜像名称-->
    <properties>
        <docker.image.prefix>fabric-contract-api</docker.image.prefix>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.example.fabriccontractapi.FabricContractApiApplication
                    </mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
   <!-- 二、添加docker-maven-plugin 配置 -->
            <!-- Docker maven plugin -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
            <!-- Docker maven plugin -->
        </plugins>
    </build>
1.2、配置Dockerfile
# 上面pom.xml中配置如:<dockerDirectory>src/main/docker</dockerDirectory>

# 在src/main目录下创建docker文件夹,并创建Dockerfile,加入以下内容

# ***************************************
#FROM openjdk:8-jdk-alpine
FROM java:8u111

# 设置工作目录
WORKDIR /app

# 拷贝文件并重命名
ADD fabric-contract-api-0.0.1-SNAPSHOT.jar fabric-contract-api.jar

# 将主机上的crypto-config目录挂载到容器中的/app/src/main/resources/crypto-config目录
VOLUME /app/src/main/resources/crypto-config

# 设置启动命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/fabric-contract-api.jar"]

# ***************************************

二、构建打包环境

2.1 安装docker
*****************************docker*****************************
# 安装docker
ds@ds-virtual-machine: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 将当前用户加入到用户组
ds@ds-virtual-machine: sudo usermod -aG docker $USER

# 查看docker版本
ds@ds-virtual-machine:~$ docker --version
Docker version 24.0.7, build afdd53b

# 镜像加速
ds@ds-virtual-machine:~$ sudo vim /etc/docker/daemon.json

# 选择国内的163镜像站,粘贴该内容到daemon.json,并保存
{"registry-mirrors":["https://hub-mirror.c.163.com/"]}

#启动 docker
ds@ds-virtual-machine:~$ systemctl start docker

#查看 docker 状态
ds@ds-virtual-machine:~$ systemctl status docker

# 安装docker-compose
ds@ds-virtual-machine:~$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o  /usr/local/bin/docker-compose

# 为docker-compose 增加可执行权限
ds@ds-virtual-machine:~$ sudo chmod +x /usr/local/bin/docker-compose
2.2 安装 jdk
# 安装
sudo apt install openjdk-8-jdk

ds@ds-virtual-machine:/usr/lib/jvm$ cd /etc/profile.d/
 
ds@ds-virtual-machine:/etc/profile.d$ sudo vi jdk8.sh
 # 加入如下内容,并保存;
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

ds@ds-virtual-machine:~$ java -version
openjdk version "1.8.0_382"
OpenJDK Runtime Environment (build 1.8.0_382-8u382-ga-1~22.04.1-b05)
OpenJDK 64-Bit Server VM (build 25.382-b05, mixed mode)
 
# 查看
ds@ds-virtual-machine:/etc/profile.d$ source /etc/profile
ds@ds-virtual-machine:/etc/profile.d$ echo $JAVA_HOME
/usr/lib/jvm/java-8-openjdk-amd64
2.3 安装 maven
# 安装
ds@ds-virtual-machine:~$ sudo apt install maven

ds@ds-virtual-machine:/usr/lib/jvm$ cd /etc/profile.d/
ds@ds-virtual-machine:/etc/profile.d$ sudo vi maven.sh
  # 加入如下内容,并保存;
MAVEN_HOME=/usr/share/maven
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin

# 查看
ds@ds-virtual-machine:/etc/profile.d$ source /etc/profile
ds@ds-virtual-machine:/etc/profile.d$ echo $MAVEN_HOME
/usr/share/maven

三、docker部署springboot项目

# 拉取jdk镜像
ds@ds-virtual-machine:~/raft-test/java/fabric-contract-api/fabric-contract-api$ docker pull java:8u111

# 将项目拷贝到服务器
ds@ds-virtual-machine:~/raft-test/java/fabric-contract-api$ ls
fabric-contract-api

# maven打包项目
ds@ds-virtual-machine:~/raft-test/java/fabric-contract-api/fabric-contract-api$ mvn clean package

# 打包成功
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  19:17 min
[INFO] Finished at: 2023-11-13T21:52:07-05:00
[INFO] ------------------------------------------------------------------------

# 启动项目
ds@ds-virtual-machine:~/raft-test/java/fabric-contract-api/fabric-contract-api$ java -jar target/fabric-contract-api-0.0.1-SNAPSHOT.jar

# 程序正常运行
lication in 5.729 seconds (JVM running for 6.711)
ServletInitializer 启动:fabric-contract-api
----------------------------------------------------------
http://127.0.1.1:8999
http://127.0.1.1:8999/doc.html
----------------------------------------------------------



# 使用dockerfile 构建镜像
ds@ds-virtual-machine:~/raft-test/java/fabric-contract-api/fabric-contract-api$ mvn package docker:build

Step 1/5 : FROM java:8u111

 ---> a3562aa0b991
Step 2/5 : WORKDIR /app

 ---> Running in 337c281cad3b
Removing intermediate container 337c281cad3b
 ---> 4c9b85376bb4
Step 3/5 : ADD fabric-contract-api-0.0.1-SNAPSHOT.jar fabric-contract-api.jar

 ---> dedadb53efc1
Step 4/5 : VOLUME /app/src/main/resources/crypto-config

 ---> Running in 4ca33d6acb77
Removing intermediate container 4ca33d6acb77
 ---> bf6394f2d106
Step 5/5 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/fabric-contract-api.jar"]

 ---> Running in af2b7e0fbca2
Removing intermediate container af2b7e0fbca2
 ---> 50c2146f268f
ProgressMessage{id=null, status=null, stream=null, error=null, progress=null, progressDetail=null}
Successfully built 50c2146f268f
Successfully tagged fabric-contract-api/fabric-contract-api:latest
[INFO] Built fabric-contract-api/fabric-contract-api
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  29.603 s
[INFO] Finished at: 2023-11-14T01:56:15-05:00
[INFO] ------------------------------------------------------------------------
 


# 查看镜像
ds@ds-virtual-machine:~/raft-test/java/fabric-contract-api/fabric-contract-api$ docker images
REPOSITORY                                            TAG            IMAGE ID       CREATED              SIZE
fabric-contract-api/fabric-contract-api              latest         b6d0e3c18535   About a minute ago   709MB
 
# 运行镜像
docker run -d -p 8999:8999 -v /home/ds/raft-test/java/fabric-contract-api/src/main/resources/crypto-config:/app/src/main/resources/crypto-config fabric-contract-api/fabric-contract-api

# 查看日志
ds@ds-virtual-machine:~/raft-test/java/fabric-contract-api$ docker logs -f 3c5a336234fabc20c55f054b8231ebe40a8d279df22251e132ebdd549c6a7336

2023-11-14 17:12:01.511  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8999 (http) with context path ''
2023-11-14 17:12:01.530  INFO 1 --- [           main] c.e.f.FabricContractApiApplication       : Started FabricContractApiApplication in 6.121 seconds (JVM running for 8.055)
ServletInitializer 启动:fabric-contract-api
----------------------------------------------------------
http://172.17.0.2:8999
http://172.17.0.2:8999/doc.html
----------------------------------------------------------
 
遇到问题:
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x0000000000003efe, pid=1, tid=0x00007f1943266b10
#
# JRE version: OpenJDK Runtime Environment (8.0_212-b04) (build 1.8.0_212-b04)
# Java VM: OpenJDK 64-Bit Server VM (25.212-b04 mixed mode linux-amd64 compressed oops)
# Derivative: IcedTea 3.12.0
# Distribution: Custom build (Sat May  4 17:33:35 UTC 2019)
# Problematic frame:
# C  0x0000000000003efe
#
# Core dump written. Default location: /app/core or core.1
#
# An error report file with more information is saved as:
# /app/hs_err_pid1.log
#
# If you would like to submit a bug report, please include
# instructions on how to reproduce the bug and visit:
#   https://icedtea.classpath.org/bugzilla
#
 
1、拉取这个版本的jdk镜像
docker pull java:8u111
 
# Dockerfile中的 jdk镜像来源改为 :openjdk:8-jdk-alpine 修改为  java:8u111
#FROM openjdk:8-jdk-alpine
FROM java:8u111

参考:
https://www.jianshu.com/p/026f4b9224f5
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容