1. 程式人生 > 其它 >SpringBoot打包到docker(idea+傳統方式)

SpringBoot打包到docker(idea+傳統方式)

docker 部署 springboot 兩種(idea + 傳統) 作者:故事我忘了
個人微信公眾號:程式猿的月光寶盒

目錄

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 http://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>http://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 http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.list
    echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
    echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
apt-get update
apt-get install vim