springboot項(xiàng)目中使用docker進(jìn)行遠(yuǎn)程部署的實(shí)現(xiàn)
springboot項(xiàng)目中使用docker進(jìn)行遠(yuǎn)程部署,這個(gè)過程,其實(shí)就是先將項(xiàng)目打包為springboot的jar包,再遠(yuǎn)程連接到docker主機(jī)上將springboot的jar包構(gòu)建為docker鏡像。最后運(yùn)行docker run [鏡像名稱] ,以docker容器方式運(yùn)行我們的應(yīng)用。
方式一: idea中安裝docker 集成插件,進(jìn)行docker遠(yuǎn)程部署。
安裝完成后,重啟idea。 在setting--》build,execution,deployment--》下找到docker ,添加/配置一個(gè)docker主機(jī)(可以是遠(yuǎn)程的docker主機(jī))。當(dāng)然,需要注意的是,遠(yuǎn)程主機(jī)上的必須有安裝docker,并且開啟了docker的遠(yuǎn)程訪問。
新建一個(gè)簡單的springboot項(xiàng)目 。new --》project --》spring initializr --》勾選 web ,devtool即可,項(xiàng)目名稱填寫為 docker-demo1 。
springboot啟動(dòng)類:
package com.tingcream.dockerdemo1; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.text.SimpleDateFormat; import java.util.Date; @SpringBootApplication @RestController public class DockerDemo1Application { @Value("${spring.application.name}") private String applicationName; @Value("${server.port}") private String port; public static void main(String[] args) { SpringApplication.run(DockerDemo1Application.class, args); } @RequestMapping("/") public String index(){ String date= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); System.out.println("當(dāng)前時(shí)間:"+date); return "hello: "+applicationName+",端口為:" +port+",當(dāng)前時(shí)間為:"+date; } }
application.yml
server: port: 8081 spring: application: name: docker-demo1 #日志 logging: level: root: INFO org.springframework.web: INFO org.springframework.jdbc: debug com.tingcream: DEBUG file: /log/docker-demo1.log
在項(xiàng)目根目錄中,創(chuàng)建一個(gè)Dockerfile文件,內(nèi)容如下:
FROM frolvlad/alpine-oraclejre8 VOLUME /tmp # 配置環(huán)境變量 ENV LANG="en_US.UTF-8" \ LANGUAGE="en_US:en" \ LC_ALL="en_US.UTF-8" # 復(fù)制jar包 ADD target/docker-demo1.jar /app.jar # 修改容器時(shí)區(qū)為北京時(shí)間 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories &&\ apk --no-cache add tzdata && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone #聲明要暴露的端口 EXPOSE 8081 5005 #入口 #ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-jar","/app.jar"] #入口,開啟遠(yuǎn)程調(diào)試(5005端口) ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-Djava.security.egd=file:/dev/./urandom",\ "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","-jar","/app.jar"]
在idea中,編輯一個(gè)configuration (run/debug--》edit configuration)
完成后,我們編寫好項(xiàng)目代碼,先執(zhí)行mvn clean package ,將項(xiàng)目打包,再找到docker-demo1 的運(yùn)行選項(xiàng) ,點(diǎn)擊綠色三角啟動(dòng)按鈕執(zhí)行,即可將我們的springboot jar包,并自動(dòng)構(gòu)建docker鏡像上傳到我們的指定的docker主機(jī)上。
方式二 :pom中引入一個(gè)docker插件進(jìn)行項(xiàng)目docker遠(yuǎn)程部署
1、pom.xml 配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.tingcream</groupId> <artifactId>docker-demo1</artifactId> <version>0.1</version> <name>docker-demo1</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <finalName>docker-demo1</finalName> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*</include> </includes> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> <excludes> <exclude>**/*.java</exclude> </excludes> </resource> </resources> <plugins> <!--springboot 打execute jar包--> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <!--JDK8 編譯--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <target>1.8</target> <source>1.8</source> <encoding>utf-8</encoding> </configuration> </plugin> <!--docker 的maven插件 --> <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <executions> <execution> <phase>package</phase> <goals> <goal>build</goal> </goals> </execution> </executions> <configuration> <!--docker主機(jī)的地址--> <dockerHost>http://192.168.11.10:2375</dockerHost> <!--打包的鏡像名稱--> <imageName>jellyflu/${project.build.finalName}:${version}</imageName> <!--Dockerfile所在的目錄--> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <!--<dockerDirectory>${project.basedir}</dockerDirectory>--> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin> </plugins> </build> </project>
如上,其中最主要的就是引入了一個(gè)docker 的maven插件包,該插件包會(huì)將我們的docker build命令綁定到maven的package執(zhí)行階段。
也就是說,當(dāng)我們?cè)陧?xiàng)目中執(zhí)行mvn clean package 時(shí),會(huì)先自動(dòng)打包(springboot 包),再遠(yuǎn)程連接到docker主機(jī)上進(jìn)行鏡像的構(gòu)建。
2、在項(xiàng)目根src/main中創(chuàng)建docker目錄,里面再新建一個(gè)Dockerfile文件。
Dockerfile文件的內(nèi)容如下:
FROM frolvlad/alpine-oraclejre8 VOLUME /tmp ENV LANG="en_US.UTF-8" \ LANGUAGE="en_US:en" \ LC_ALL="en_US.UTF-8" #ENV LANG en_US.UTF-8 #ENV LANGUAGE en_US:en #ENV LC_ALL en_US.UTF-8 ADD docker-demo1.jar /app.jar # 修改容器時(shí)區(qū)為北京時(shí)間 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories &&\ apk --no-cache add tzdata && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ echo "Asia/Shanghai" > /etc/timezone #聲明要暴露的端口 EXPOSE 8081 5005 #入口 #ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-jar","/app.jar"] #入口,開啟遠(yuǎn)程調(diào)試 ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-Djava.security.egd=file:/dev/./urandom",\ "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005","-jar","/app.jar"]
3、編寫好項(xiàng)目代碼后,運(yùn)行mvn clean package 即可自動(dòng)將項(xiàng)目打包,并將springboot包構(gòu)建為docker鏡像。 注意這時(shí)鏡像并沒有自動(dòng)run出一個(gè)容器,需要我們手動(dòng)到docker主機(jī)上執(zhí)行docker run命令,如
docker run -d -p 8081:8081 -p 5005:5005 -v /log:/log --name docker-demo1 jellyflu/docker-demo1:0.1
查看容器運(yùn)行日志 :
docker logs -f docker-demo1 或者 tail -f /log/docker-demo1.log
附: docker主機(jī)上如何開啟遠(yuǎn)程訪問
1、修改docker.service配置文件
vi /usr/lib/systemd/system/docker.service
[Service] ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
:x保存退出
2、重啟docker的守護(hù)進(jìn)程
systemctl daemon-reload systemctl restart docker
到此這篇關(guān)于springboot項(xiàng)目中使用docker進(jìn)行遠(yuǎn)程部署的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)springboot docker遠(yuǎn)程部署內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springcloud gateway網(wǎng)關(guān)服務(wù)啟動(dòng)報(bào)錯(cuò)的解決
這篇文章主要介紹了springcloud gateway網(wǎng)關(guān)服務(wù)啟動(dòng)報(bào)錯(cuò)的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Springboot實(shí)現(xiàn)Java郵件任務(wù)過程解析
這篇文章主要介紹了Springboot實(shí)現(xiàn)Java郵件任務(wù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Spring Boot應(yīng)用開發(fā)初探與實(shí)例講解
這篇文章主要介紹了Spring Boot應(yīng)用開發(fā)初探與實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07FuncGPT慧函數(shù)保護(hù)數(shù)據(jù)安全提高代碼質(zhì)量減少軟件故障(java示例)
這篇文章主要為大家介紹了FuncGPT慧函數(shù)保護(hù)數(shù)據(jù)安全提高代碼質(zhì)量減少軟件故障(java示例),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10java web服務(wù)器實(shí)現(xiàn)跨域訪問
這篇文章主要為大家詳細(xì)介紹了java web服務(wù)器實(shí)現(xiàn)跨域訪問,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08MybatisPlus的LambdaQueryWrapper用法詳解
LambdaQueryWrapper<Tag>?是 MyBatis-Plus 框架中的一個(gè)功能強(qiáng)大的查詢構(gòu)造器,它用于構(gòu)建 SQL 查詢條件,具有一定的參考價(jià)值,感興趣的可以了解一下2024-10-10關(guān)于spring項(xiàng)目中無法加載resources下文件問題及解決方法
在學(xué)習(xí)Spring過程中,TestContext框架試圖檢測(cè)一個(gè)默認(rèn)的XML資源位置,再resources下創(chuàng)建了一個(gè)com.example的文件夾,執(zhí)行時(shí),報(bào)錯(cuò),本文給大家介紹spring項(xiàng)目中無法加載resources下文件,感興趣的朋友跟隨小編一起看看吧2023-10-10JAVA使用JDBC連接oracle數(shù)據(jù)庫的詳細(xì)過程
JDBC是一種用于執(zhí)行SQL語句的Java API,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成,下面這篇文章主要給大家介紹了關(guān)于JAVA使用JDBC連接oracle數(shù)據(jù)庫的詳細(xì)過程,需要的朋友可以參考下2023-05-05SpringBoot集成WebSocket【基于純H5】進(jìn)行點(diǎn)對(duì)點(diǎn)[一對(duì)一]和廣播[一對(duì)多]實(shí)時(shí)推送
這篇文章主要介紹了SpringBoot集成WebSocket【基于純H5】進(jìn)行點(diǎn)對(duì)點(diǎn)[一對(duì)一]和廣播[一對(duì)多]實(shí)時(shí)推送,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08