您好,登錄后才能下訂單哦!
這篇文章給大家介紹SpringBoot如何利用docker進行部署,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Dockerfile文件
創建Dockerfile文件,后面會用到。
# Docker image for springboot file run # VERSION 0.0.1 # Author: toutou # 基礎鏡像使用java FROM java:8 # VOLUME 指定了臨時文件目錄為/tmp。 # 其效果是在主機 /var/lib/docker 目錄下創建了一個臨時文件,并鏈接到容器的/tmp # VOLUME /tmp # 將jar包添加到容器中并更名為app.jar ADD learn-web-0.0.1-SNAPSHOT.jar app.jar # 運行jar包 RUN bash -c 'touch /app.jar' ENTRYPOINT ["java","-jar","/app.jar"] ###聲明啟動端口號 #EXPOSE 8301
在服務器新建/data/docker/hellolearn文件夾(文件路徑可自定義),將maven打包好的jar包和上文中創建的Dockerfile文件復制到服務器新建的文件夾(/data/docker/hellolearn)。
docker build -t hellolearn .
docker build -t 鏡像名稱:標簽 Dockerfile的相對位置,點號代表當前目錄,不寫tag默認是latest。
docker run -d -p 8301:8301 --name hellolearn hellolearn
docker start hellolearn
-d參數是讓容器后臺運行;--name為指定容器的名稱;-p 是做端口映射,此時將服務器中的8301(冒號前的端口)端口映射到容器中的8301(冒號后的端口)端口(application.properties配置的是8301)
按照上文的步驟已足可以輕松應對docker部署springboot的全流程。但是這樣在啟動容器后,每次需更新jar包時,都得重新制作鏡像,再重新制作容器。流程及其繁瑣,效率極低。那如何在不更新鏡像或者容器的前提下直接更新jar包完成部署呢?
5.1 更新Dockerfile
# Docker image for springboot file run # VERSION 0.0.1 # Author: toutou # 基礎鏡像使用java FROM java:8 EXPOSE 8301 ENTRYPOINT ["java","-jar","/data/learn-web-0.0.1-SNAPSHOT.jar"]
最后一行 ENTRYPOINT ["java","-jar","/data/learn-web-0.0.1-SNAPSHOT.jar"]
會運行容器里/data目錄下的learn-web-0.0.1-SNAPSHOT.jar文件。
5.2 使用docker build命令構建鏡像
docker build -t hellolearn .
5.3 創建&啟動容器
docker run --name hellolearn -it -v /data/docker/newhellolearn/package:/data -d -p 8301:8301 hellolearn
-v 宿主機目錄關聯容器目錄。這樣宿主機的/data/docker/newhellolearn/package目錄就與docker的/data目錄進行映射。
這樣的話,當jar包發生變動時,直接更新宿主機的/data/docker/newhellolearn/package目錄下的jar包即可,更新jar包之后需要將容器重啟一下。
通過jar包部署方式引起一個問題,若jar包名字發生變化,比如版本號變化(learn-web-0.0.1-SNAPSHOT.jar-->>learn-web-1.0.1-SNAPSHOT.jar)。需要怎么處理呢?下面就介紹第三種通過腳本部署的方式。
6.1 創建hellolearn.sh文件
java -jar /data/learn-web-0.0.1-SNAPSHOT.jar
將hellolearn.sh上傳到/data/docker/hellolearn/scriptdeploy/package,這個文件夾路徑可以自定義,記住這個文件夾路徑,后面還會用到。
6.2 添加腳本執行權限
chmod +x hellolearn.sh
6.3 創建Dockerfile
# Docker image for springboot file run # VERSION 0.0.1 # Author: toutou # 基礎鏡像使用java FROM java:8 EXPOSE 8301 CMD ["sh","-c","/data/hellolearn.sh"]
CMD ["sh","-c","/data/hellolearn.sh"]
表示在容器啟動時啟動6.1中創建的hellolearn.sh腳本。
注意最后一條命令上文中都是ENTRYPOINT,在腳本部署中改成了CMD,至于ENTRYPOINT和CMD的具體區別感興趣的可以了解一下。
6.4 上傳jar包
將jar包放入hellolearn.sh的同一個文件夾目錄,即/data/docker/hellolearn/scriptdeploy/package,創建容器時再將該目錄(宿主機目錄)與容器的/data目錄進行映射。。
6.5 文件目錄結構圖
這里的目錄結構不知道大家暈不暈,上傳一張我這宿主機的目錄結構圖,一目了然。
6.6 創建鏡像
docker build -t hellolearn-script .
末尾的點號代表當前目錄,所以生成鏡像的命令需要在Dockerfile所在的目錄執行。
6.7 創建&啟動容器
docker run --name hellolearn-script -it -v /data/docker/hellolearn/scriptdeploy/package:/data -d -p 8302:8301 hellolearn-script
docker start hellolearn-script
將宿主機的/data/docker/hellolearn/scriptdeploy/package目錄與容器的/data目錄映射關聯。這樣的話,當jar包發生變動時,直接更新宿主機目錄下的jar包即可。即使jar包名字發生變化,也需要再更新一下hellolearn.sh腳本。更新之后重啟容器。
6.8 web測試效果
docker logs [OPTIONS] CONTAINER ID
OPTIONS說明:
-f : 跟蹤日志輸出
--since :顯示某個開始時間的所有日志
-t : 顯示時間戳
--tail :僅列出最新N條容器日志
7.1 查看指定時間后的日志,只顯示最后100行:
docker logs -f -t --since="2020-10-01" --tail=100 CONTAINER ID
7.2 查個指定時間區段的日志
docker logs -t --since="2020-10-01T19:00:00" --until "2020-10-01T19:00:00" CONTAINER ID
7.3 查看指定時間后面的日志:
docker logs -t --since="2020-10-01T19:00:00" CONTAINER ID
7.4 查看最近5分鐘的日志:
docker logs --since 5m CONTAINER ID
7.5 通過 exec 命令對指定的容器執行 bash:
docker exec hellolearn -it /bin/bash
或者 docker exec -it hellolearn bash
7.6 查看docker IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' hellolearn
關于SpringBoot如何利用docker進行部署就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。