引言
目前k8s很是火熱,我也特意買了本書去學習了一下,但是k8s動輒都是成百上千的伺服器運維,對只有幾臺伺服器的應用來說使用k8s就有點像大炮打蚊子。只有幾臺伺服器的應用運維使用傳統的tomcat部署很繁瑣,效率不高,動輒十幾分鍾部署一臺服務,使用jenkins部署又太過複雜,斟酌許久我還是選擇了使用docker+dockerFile的方式部署。這種方式部署簡單高效。
docker安裝
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun #一鍵安裝指令碼 systemctl enable docker.service #設定docker開機啟動 systemctl restart docker.service #啟動docker服務
開啟docker遠端訪問埠
編輯 /usr/lib/systemd/system/docker.service檔案 新增 -H tcp://0.0.0.0:12375 -H unix://var/run/docker.sock 如下圖:
儲存檔案後 重新載入配置 然後重新啟動
systemctl daemon-reload # 重新載入配置 systemctl restart docker.service # 重啟docker服務
注意:-H tcp://0.0.0.0:12375 這句話的意思任意ip都可以使用tcp訪問這個埠 可以根據實際情況匹配 IP。因為這裡沒有token或者金鑰 所以要特別注意 如果使用雲伺服器那麼強烈建議這裡設定為安全組IP白名單訪問。我當初在測試環境使用docker釋出三四個小時就被人攻擊了不過當初我是用的2375埠,這個埠特別容易被攻擊。
配置IDEA docker環境
idea安裝docker環境外掛 如下圖:
安裝完成後重啟idea 然後開啟springboot專案,在根目錄建立Dockerfile檔案。如下圖:
編輯Dockerfile如下:
FROM openjdk:11 # 映象是從 openjdk:11-jdk-alpin 繼承而來的 VOLUME /root/tmp # 表示掛載了 /root/tmp 目錄到容器中 ADD build/libs/brief-plus-0.0.1-SNAPSHOT.jar apprun.jar # 將bootJar 新增到映象中根目錄下 命令為 apprun.jar ENTRYPOINT ["java","-jar","/apprun.jar"] # ENTRYPOINT 在容器啟動後執行 java 命令來執行程式 # 設定容器時間 ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # ======= 其它的一些Dockerfile命令 ========== 這裡我們沒有用到不過還是提一下 #COPY package.json /usr/src/app/ #ADD 更高階的複製檔案 #ADD 指令和 COPY 的格式和性質基本一致。但是在 COPY 基礎上增加了一些功能。 #CMD 指令就是用於指定預設的容器主程式的啟動命令的。 #ENV 設定環境變數 #HEALTHCHECK 健康檢查 #EXPOSE 指令是宣告執行時容器提供服務埠,這只是一個宣告,在執行時並不會因為這個宣告應用就會開啟這個埠的服務 EXPOSE 8090
主要注意 build/libs/brief-plus-0.0.1-SNAPSHOT.jar apprun.jar 這句話。 我是用的gradle 編譯後的檔案位於build/libs/ 目錄下 如下圖:
maven編譯後的檔案位於target目錄下 如下圖:
Dockerfile是根據具體的目錄和打包後的名稱來獲取生成映象檔案所以這裡一定不能出錯。
配置Docker服務
配置執行環境
建立一個tcp連線服務
3.配置釋出到docker的服務
繫結埠ip的詳細配置
打包釋出
心得建議
1.docker的映象檔案會分塊,每塊都有自己的簽名,每次上傳會進行對比差異的檔案才會重新上傳。
2.每次上傳的時候記得更改標籤方便根據標籤進行回滾。
3.修改伺服器的網路配置、防火牆需要重啟docker服務。
docker 常用命令: