SpringBoot打包到docker(idea+傳統方式)
- 2021 年 10 月 22 日
- 筆記
- JAVA, linux, springboot在docker部署
作者:故事我忘了¢
個人微信公眾號:程序猿的月光寶盒

個人微信公眾號:程序猿的月光寶盒
1. 方式1.通過idea 遠程發佈
1.1 修改docker.service文件
1. 進入服務器
vim /usr/lib/systemd/system/docker.service
2. 修改ExecStart行為下面內容,把原來的注掉
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \
3. 重加載
systemctl daemon-reload // 1,加載docker守護線程
systemctl restart docker // 2,重啟docker
4. docker相關命令進行重開原有服務
1.2 驗證
1. 查看端口情況
netstat -nlpt
2. 調用
curl //127.0.0.1:2375/version
3. 出現下面的就表示成功
{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"20.10.6","Details":{"ApiVersion":"1.41","Arch":"amd64","BuildTime":"2021-04-09T22:43:57.000000000+00:00","Experimental":"false","GitCommit":"8728dd2","GoVersion":"go1.13.15","KernelVersion":"3.10.0-1127.19.1.el7.x86_64","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"containerd","Version":"1.4.4","Details":{"GitCommit":"05f951a3781f4f2c1911b05e61c160e9c30eaa8e"}},{"Name":"runc","Version":"1.0.0-rc93","Details":{"GitCommit":"12644e614e25b05da6fd08a38ffa0cfe1903fdec"}},{"Name":"docker-init","Version":"0.19.0","Details":{"GitCommit":"de40ad0"}}],"Version":"20.10.6","ApiVersion":"1.41","MinAPIVersion":"1.12","GitCommit":"8728dd2","GoVersion":"go1.13.15","Os":"linux","Arch":"amd64","KernelVersion":"3.10.0-1127.19.1.el7.x86_64","BuildTime":"2021-04-09T22:43:57.000000000+00:00"}
Tips
1.vim 搜索字符串
1. 命令模式下,輸入:/字符串
比如搜索user, 輸入/user
2. 查看下一個匹配,按下n(小寫n)
3. 跳轉到上一個匹配,按下N(大寫N)
4. 搜索後,我們打開別的文件,發現也被高亮了,怎麼關閉高亮?
命令模式下,
輸入:nohlsearch
也可以:set nohlsearch
當然,可以簡寫:
noh
或者 set noh。
2.安全組記得開
3.idea配置,名字可以改
然後會在service窗口中出現
點擊左上角運行就能看到服務器上已經在的容器
4.配置阿里雲鏡像加速器,不會的百度吧
1.3 編輯代碼pom.xml
<properties>
<java.version>1.8</java.version>
<!-- Step.1 設置docker鏡像前綴-->
<docker.image.prefix>jinsc</docker.image.prefix>
</properties>
<!-- Step.2 添加插件-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<!--遠程docker地址-->
<dockerHost>//x.x.x.x:2375</dockerHost>
<!--鏡像名稱,前綴/項目名-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--dockerFile的位置-->
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<!--默認的target文件夾位置-->
<directory>${project.build.directory}</directory>
<!--最終名稱.jar-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
1.4 main中新建文件夾docker,並新建Dockerfile文件
Dockerfile
FROM java:8
VOLUME /tmp
ADD provider-0.0.1-SNAPSHOT.jar /test.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test.jar"]
其中 provider-0.0.1-SNAPSHOT.jar是打出來的jar包名字
1.5 運行maven命令
maven的clean+package
在運行插件中docker的build
就能遠程推送到遠端
//鏡像id
Successfully built 13b4c048a7e6
// 項目名和版本號
Successfully tagged jinsc/provider:latest
[INFO] Built jinsc/provider
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 52.797 s
[INFO] Finished at: 2021-10-22T15:07:58+08:00
[INFO] ------------------------------------------------------------------------
連上服務器,已經有了
1.6 idea 服務窗口的docker中右鍵創建容器
點擊運行就已經創建了
訪問就有了
我這裡是ws測試地址
用寫的客戶端已經連接並解析到
2. 方式2.傳統模式
2.1 maven package 打包
2.2 把打的包放到服務器上
2.3 在服務器上創建文件夾
[root@VM-0-9-centos /]# cd usr/local/
[root@VM-0-9-centos local]# ls
bin etc games include lib lib64 libexec qcloud sbin share src yd.socket.server
[root@VM-0-9-centos local]# mkdir docker
[root@VM-0-9-centos local]# ls
bin docker etc games include lib lib64 libexec qcloud sbin share src yd.socket.server
[root@VM-0-9-centos local]# cd docker/
[root@VM-0-9-centos docker]# ls
[root@VM-0-9-centos docker]# mkdir SB4WS
[root@VM-0-9-centos docker]# ls
SB4WS
[root@VM-0-9-centos docker]#
2.4 把jar放進去
2.5 創建並編輯Dockerfile
vim Dockerfile
FROM java:8
VOLUME /tmp
ADD provider-0.0.1-SNAPSHOT.jar /provider.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/provider.jar"]
意思分別是
FROM :
表示基礎鏡像.運行環境
VOLUME /tmp:
是創建tmp目錄並持久化到Docker數據文件夾,因為sb使用的是內嵌的Tomcat,默認使用/tmp作為工作目錄
ADD:
拷貝文件並重命名,就是把前面的複製到後面的
EXPOSE :
並不是正真的發佈端口,這個只是容器部署人員和建立image人員之間的交流,即簡歷image的人員告訴容器部署人員容器應該映射哪個端口給外界
ENTRYPOINT(入口點):
容器啟動時運行的命令 ,相當於在命令行中輸入 java -jar xxx.jar,為了縮短Tomcat 的啟動時間,添加java.security.egd的系統屬性指向 /dev/./urandom 作為ENTRYPOINT
2.6 創建鏡像(在剛才的文件夾下)
docker build -t provider .
已經ok
2.7 創建容器
docker run -d --rm --name provider-8080 -p 8080:8080 provider
PS 另一個(可以部署多個容器) 外網的:程序定的
docker run -d --rm --name provider-8081 -p 8081:8080 provider
Tips:
1.查看日誌
docker logs -f --tail=500 provide-8080
2.進入容器內部 -it(交互) 後跟id號
docker exec -it 96f93cc3b918 bash
3.在docker內部安裝vim
實際在使用過程中,運行 apt-get update,然後執行 apt-get install -y vim,下載地址由於是海外地址,下載速度異常慢而且可能中斷更新流程,所以做下面配置
mv /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb //mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.list
echo "deb //mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
echo "deb-src //mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
echo "deb-src //mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
apt-get update
apt-get install vim