在日常開發過程中,會將項目進行打包,並運行到服務器上。在本文中介紹使用docker的方式,將本地jar包推送到docker私服,並運行在遠程服務器上。
步驟
- 新建一個maven項目,目錄結構如下:
- 將maven編譯打包插件、docker打包插件引入到pom文件中
2.1. 多環境配置
pom文件中profile下的profile.name要與application-{env} 中的{env}保持一致
2.2. Maven編譯打包插件
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<compilerArguments>
<bootclasspath>${env.JAVA_HOME}\jre\lib\rt.jar;${env.JAVA_HOME}\jre\lib\jce.jar</bootclasspath>
</compilerArguments>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${maven.compiler.encoding}</encoding>
<verbose/>
</configuration>
</plugin>
<plugin>
<!--打包跳過測試-->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>${maven-resources-plugin.version}</version>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>woff</nonFilteredFileExtension>
<nonFilteredFileExtension>eot</nonFilteredFileExtension>
<nonFilteredFileExtension>ttf</nonFilteredFileExtension>
<nonFilteredFileExtension>svg</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
2.3. docker打包插件配置
<!-- docker打包插件 -->
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.33.0</version>
<configuration>
<verbose>true</verbose>
<!-- docker遠程管理url -->
<dockerHost>tcp://ip:2375</dockerHost>
<registry>registry.cn-hangzhou.aliyuncs.com</registry>
<authConfig>
<!-- docker私服賬戶密碼 -->
<push>
<username>zfl_aliases@163.com</username>
<password>123456</password>
</push>
</authConfig>
<buildArgs>
<JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
<images>
<image>
<!-- 鏡像名稱 命名空間/倉庫名稱:鏡像版本號 -->
<name>${docker.image.prefix}/${project.artifactId}:${project.version}</name>
<build>
<dockerFile>${project.basedir}/src/main/docker/Dockerfile</dockerFile>
<assembly>
<name>/</name>
<!-- artifact是預定義的值,表示將項目打包后的jar拷貝到編譯上下文中,便於Dockerfile ADD指令 -->
<descriptorRef>artifact</descriptorRef>
</assembly>
</build>
<run>
<!-- 運行時容器名稱 -->
<containerNamePattern>${project.artifactId}</containerNamePattern>
<extraHosts>
<extraHost>服務器ip</extraHost>
</extraHosts>
</run>
</image>
</images>
</configuration>
</plugin>
- 編寫Dockerfile
// FROM 可根據實際情況來編寫 openjdk:8
FROM registry.cn-hangzhou.aliyuncs.com/lee/jdk8-lee:1.0.0
MAINTAINER zhangfalu zfl_aliases@163.com 2021-01-25
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
EXPOSE 8063
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-Duser.timezone=GMT+08", "-jar", "/app.jar"]
-
打包
命令:mvn clean package -Dmaven.skip.tests=true -P online
查看classes下打包好的文件信息
-
本地測試
-
將本地打好的jar包,打成鏡像推動到遠程私服,並運行docker容器
命令:mvn docker:stop docker:remove docker:build docker:push docker:start
-
查看私服
-
查看容器運行狀態
使用idea集成Docker,來本地管理鏡像的生成,刪除、容器的啟動與停止,避免使用命令。還可以更好的查看容器運行日志信息。
- 點擊 File-Settings
- 填完之后點擊apply,在開發工具下方會多出一個Docker窗口
- 點擊打開進行連接
打開Containers,查看制定容器,可方便的查看容器日志
注:項目地址