使用Docker部署SpringBoot項目
點擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”
優(yōu)質(zhì)文章,第一時間送達(dá)
? 作者?|??LanceLi
來源 |? urlify.cn/eQvaea ? ??
一、環(huán)境 | 步驟
使用的虛擬機安裝Ubuntu20.04,Ubuntu里面安裝了docker,還需要安裝JDK和Maven
在Win10上的Idea寫好一個SpringBoot的Demo項目打包后傳到Ubuntu中
先用mvn package打包項目并運行 測試項目是否能成功跑起來
最后用mvn package docker:build 打成Docker鏡像
注意事項(看了其他的博客,然后打鏡像的時候報各種異常):
項目名也就是artifactId最好也是小寫
docker鏡像名最好要小寫
二、新建一個SpringBoot項目
2.1pom.xml
<parent>
????????<groupId>org.springframework.bootgroupId>
????????<artifactId>spring-boot-starter-parentartifactId>
????????<version>2.0.4.RELEASEversion>
????parent>
????<dependencies>
????????<dependency>
????????????<groupId>org.springframework.bootgroupId>
????????????<artifactId>spring-boot-starter-webartifactId>
????????dependency>
????????<dependency>
????????????<groupId>org.springframework.bootgroupId>
????????????<artifactId>spring-boot-starter-testartifactId>
????????????<scope>testscope>
????????dependency>
????dependencies>
????
????<properties>
????????<docker.image.prefix>dockerdemoservicedocker.image.prefix>
????properties>
????<build>
????????<plugins>
????????????<plugin>
????????????????<groupId>org.springframework.bootgroupId>
????????????????<artifactId>spring-boot-maven-pluginartifactId>
????????????plugin>
????????????
????????????<plugin>
????????????????<groupId>com.spotifygroupId>
????????????????<artifactId>docker-maven-pluginartifactId>
????????????????<version>1.0.0version>
????????????????<configuration>
????????????????????<imageName>${docker.image.prefix}/${project.artifactId}imageName>
????????????????????<dockerDirectory>src/main/dockerdockerDirectory>
????????????????????<resources>
????????????????????????<resource>
????????????????????????????<targetPath>/targetPath>
????????????????????????????<directory>${project.build.directory}directory>
????????????????????????????<include>${project.build.finalName}.jarinclude>
????????????????????????resource>
????????????????????resources>
????????????????configuration>
????????????plugin>
????????????
????????plugins>
????build>
2.2啟動類
@SpringBootApplication
public?class?Application?{
????public?static?void?main(String[] args)?{
????????SpringApplication.run(Application.class,args);
????}
}2.3Controller
@RestController
public?class?DockerController?{
????@GetMapping("/docker")
????public?String getString()?{
????????return?"dockerDemo is run";
????}
}2.4在src/main下新建一個docker的目錄
也就是src/main/docker。注意是目錄不是package
在src/main/docker下新建一個Dockerfile的文件???
FROM?openjdk:8-jdk-alpine
VOLUME /tmp
ADD dockerdemoservice-1.0-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]這個 Dockerfile 文件很簡單,構(gòu)建 Jdk 基礎(chǔ)環(huán)境,添加 Spring Boot Jar 到鏡像中:
FROM ,表示使用 Jdk8 環(huán)境 為基礎(chǔ)鏡像,如果鏡像不是本地的會從 DockerHub 進(jìn)行下載
VOLUME ,VOLUME 指向了一個
/tmp的目錄,由于 Spring Boot 使用內(nèi)置的Tomcat容器,Tomcat 默認(rèn)使用/tmp作為工作目錄。這個命令的效果是:在宿主機的/var/lib/docker目錄下創(chuàng)建一個臨時文件并把它鏈接到容器中的/tmp目錄ADD ,拷貝文件并且重命名
ENTRYPOINT ,為了縮短 Tomcat 的啟動時間,添加
java.security.egd的系統(tǒng)屬性指向/dev/urandom作為 ENTRYPOINT在本地運行沒問題,然后傳到Ubuntu里解壓
三、打docker鏡像
項目打壓縮包放到Ubuntu里
正常的應(yīng)該是用git或svn拉代碼,這里為了方便直接copy到服務(wù)器里
cd?/home/lanceli/code/dockerdemoservice # dockerdemoservice 是我的demo項目
ls # 可以看到src pom.xml 就是在這一級目錄使用mvn打包
mvn package # 先打成jar包,然后會生成一個target目錄
cd?target
java -jar dockerdemoservice-1.0-SNAPSHOT.jar # 可以看到spring boot的Log,然后請求controller 如果成功說明沒問題
cd?/home/lanceli/code/dockerdemoservice # 回到項目的目錄中
mvn package docker:build # 打成docker鏡像,看到BUILD SUCCESS后說明成功查看鏡像并運行
sudo?docker images # openjdk之前是沒有的,自動pull下來的
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerdemoservice/dockerdemoservice latest ea60d12b0337 24?minutes ago 121MB
jenkins/jenkins lts 697d76eba014 8?days ago 677MB
nginx latest 4bb46517cac3 11?days ago 133MB
portainer/portainer latest 62771b0b9b09 4?weeks ago 79.1MB
openjdk 8-jdk-alpine a3562aa0b991 15?months ago 105MB
sudo docker run -d -p 8080:8080?dockerdemoservice/dockerdemoservice # 運行剛剛打好的鏡像測試訪問
我在win10上訪問ubuntu的IP,加上映射的8080端口
http://192.168.18.135:8080/docker?可以訪問到我的接口
粉絲福利:108本java從入門到大神精選電子書領(lǐng)取
???
?長按上方鋒哥微信二維碼?2 秒 備注「1234」即可獲取資料以及 可以進(jìn)入java1234官方微信群
感謝點贊支持下哈?
