??????歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識,也可以暢所欲言、分享您的想法和見解。
- 推薦:kwan 的首頁,持續(xù)學(xué)習(xí),不斷總結(jié),共同進步,活到老學(xué)到老
- 導(dǎo)航
- 檀越劍指大廠系列:全面總結(jié) java 核心技術(shù)點,如集合,jvm,并發(fā)編程 redis,kafka,Spring,微服務(wù),Netty 等
- 常用開發(fā)工具系列:羅列常用的開發(fā)工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
- 數(shù)據(jù)庫系列:詳細總結(jié)了常用數(shù)據(jù)庫 mysql 技術(shù)點,以及工作中遇到的 mysql 問題等
- 懶人運維系列:總結(jié)好用的命令,解放雙手不香嗎?能用一個命令完成絕不用兩個操作
- 數(shù)據(jù)結(jié)構(gòu)與算法系列:總結(jié)數(shù)據(jù)結(jié)構(gòu)和算法,不同類型針對性訓(xùn)練,提升編程思維,劍指大廠
非常期待和您一起在這個小小的網(wǎng)絡(luò)世界里共同探索、學(xué)習(xí)和成長。?????? ?? 歡迎訂閱本專欄 ??
一.背景介紹
1.什么是 docker?
Docker 是一種開源的容器化平臺,可以將應(yīng)用程序及其依賴項打包到一個可移植的容器中,然后發(fā)布到任何支持 Docker 的服務(wù)器上。
Docker 的架構(gòu)由三個主要組件組成:Docker 客戶端、Docker 守護進程和 Docker 鏡像。
Docker 客戶端用于與 Docker 交互,Docker 守護進程負責(zé)管理和監(jiān)控 Docker 的運行,Docker 鏡像是一個只讀的模板,包含了運行容器所需的文件系統(tǒng)和依賴項。
自從 Docker 發(fā)布以來,它迅速獲得了廣泛的認可和采用。Docker 在不到一年的時間內(nèi)就實現(xiàn)了 100 萬次的下載,并吸引了來自全球各地的開發(fā)人員和企業(yè)的關(guān)注。Docker 的應(yīng)用場景包括:應(yīng)用程序的開發(fā)、測試和部署、多租戶環(huán)境下的應(yīng)用程序隔離、快速搭建開發(fā)環(huán)境、微服務(wù)架構(gòu)等。
2.docker 的優(yōu)點?
Docker 的優(yōu)點如下:
- 快速部署:Docker 可以幫助快速部署應(yīng)用程序,并使其能夠在多種環(huán)境中運行。您可以將應(yīng)用程序和它的依賴項打包成容器,并輕松地將其部署到任何支持 Docker 的平臺上。
- 環(huán)境一致性:Docker 可以確保應(yīng)用程序在不同的環(huán)境中運行時具有相同的行為。這是因為 Docker 容器包含了應(yīng)用程序及其依賴項,因此可以在任何地方運行。
- 資源隔離:Docker 可以隔離應(yīng)用程序及其依賴項,從而確保它們不會干擾其他應(yīng)用程序或系統(tǒng)組件。這種隔離可以幫助提高應(yīng)用程序的安全性和可靠性。
- 更高的效率:Docker 可以幫助提高應(yīng)用程序的效率,因為它可以在容器中運行多個應(yīng)用程序?qū)嵗?,從而最大化利用系統(tǒng)資源。5. 更輕量級:Docker 容器比傳統(tǒng)的虛擬機更輕量級,因為它們共享主機操作系統(tǒng)的內(nèi)核。這意味著 Docker 容器可以更快地啟動和停止,并且需要更少的系統(tǒng)資源。
3.部署基本步驟?
以下是 Docker 部署 Spring Boot 項目的基本步驟:
- 在 Spring Boot 項目的根目錄下創(chuàng)建一個名為 Dockerfile 的文件。
- 在 Dockerfile 中編寫 Docker 鏡像的構(gòu)建指令,例如:
其中,F(xiàn)ROM 指令指定了使用的基礎(chǔ)鏡像,VOLUME 指令指定了掛載點,ADD 指令將 Spring Boot 項目的 jar 包添加到鏡像中,ENTRYPOINT 指令指定了容器啟動時執(zhí)行的命令。FROM openjdk:8-jdk-alpine VOLUME /tmp ADD target/demo.jar app.jar ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
- 在 Spring Boot 項目的根目錄下執(zhí)行以下命令,將 Spring Boot 項目打包成 jar 包:
mvn clean package
- 在 Spring Boot 項目的根目錄下執(zhí)行以下命令,使用 Dockerfile 構(gòu)建 Docker 鏡像:
其中,-t 指令指定了鏡像的名稱,"."表示 Dockerfile 所在的當(dāng)前目錄。docker build -t demo .
- 在 Docker 中啟動容器:
其中,-p 指令指定了容器端口和主機端口的映射關(guān)系,demo 是鏡像的名稱。docker run -p 8080:8080 demo
二.部署方式 1
1.說明
- 方式 1 是通過在本地打鏡像
- 上傳鏡像到倉庫
- 登錄服務(wù)器
- 拉取鏡像
- 啟動容器
- 方式 1 比方式 2 更加穩(wěn)健規(guī)范
2.Dockerfile
FROM openjdk:8
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
WORKDIR /home
USER root
ENV PROFILE="dev"
ENV LC_ALL en_US.UTF-8
ENV LANG en_US.UTF-8
ENV PARAMS=""
COPY /target/*.jar /home/app.jar
EXPOSE 80
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
RUN echo -e 'mkdir -p ./logs/gc && java $JAVA_OPTS -jar ./app.jar --spring.profiles.active=$PROFILE $PARAMS' > entrypoint.sh
ENTRYPOINT ["sh", "entrypoint.sh"]
3.打鏡像
以下腳本寫在 push.sh 中,主要是編譯打包,打鏡像,推送到遠程倉庫。
#!/usr/bin/env bash
#版本
VERSION=latest
mvn clean package -P test
export DOCKER_SCAN_SUGGEST=false
docker build -t xxx-xxx-xxx-xxx-kwan:$VERSION .
docker tag xxx-xxx-xxx-xxx-kwan:$VERSION deploy.xxx.com/xxx-test/xxx-xxx-xxx-xxx-kwan:$VERSION
docker push deploy.xxx.com/xxx-test/xxx-xxx-xxx-xxx-kwan:$VERSION
docker rmi xxx-xxx-xxx-xxx-kwan:$VERSION deploy.xxx.com/xxx-test/xxx-xxx-xxx-xxx-kwan:$VERSION
#打包時間
echo "打包時間為="$(date +%F%n%T)
4.啟動腳本
#!/usr/bin/env bash
#設(shè)置容器名稱
CONTAINER_NAME=xxx-xxx-xxx-xxx-kwan
#鏡像位置與名稱
IMAGE_NAME=deploy.xxx.com/xxx-test/xxx-xxx-xxx-xxx-kwan:latest
#刪除容器
docker rm -f ${CONTAINER_NAME}
#刪除鏡像
docker rmi ${IMAGE_NAME}
#拉取鏡像
docker pull ${IMAGE_NAME}
#啟動容器
docker run -d --name ${CONTAINER_NAME} --privileged=true -e PROFILE=test -w /home -p 8888:80 \
-v $PWD/logs:/home/logs -v /home/uploads:/home/uploads --restart=always ${IMAGE_NAME}
docker logs -f --tail 500 ${CONTAINER_NAME}
三.部署方式 2
1.說明
部署方式 2 的方式其實是省去了部署方式 1 的倉庫,通過 git 進行本地代碼和服務(wù)器代碼的同步。
- 本地提交代碼到 gitlab
- 登錄服務(wù)器,并到達指定 gitlab 倉庫的目錄
- git pull 拉取代碼
- 通過 maven 打包
- 根據(jù) Dockerfile 對打的包進行構(gòu)建鏡像
- 根據(jù)鏡像啟動容器
- 通過 docker 完成后端項目部署
2.項目路徑
/kwan/chatbot-vue/end/vue-springboot-kwan/
3.服務(wù)器腳本
#!/bin/bash
#進入項目目錄
cd /kwan/chatbot-vue/end/vue-springboot-kwan/
#拉取最新代碼
git pull
#maven打包
mvn package -Dmaven.test.skip=true
#移動jar包到指定目錄
yes | mv /kwan/chatbot-vue/end/vue-springboot-kwan/target/vue-springboot-kwan-0.0.1-SNAPSHOT.jar /kwan/chatbot-vue/end
#到達指定目錄
cd /kwan/chatbot-vue/end
#構(gòu)建鏡像
docker build -t chatbox-vue-8888 .
#刪除鏡像
docker rm -f chatbox-vue-8888
#啟動容器
docker run -d -p 8888:80 --restart=always --name chatbox-vue-8888 -v /kwan/img:/kwan/img chatbox-vue-8888
4.Dockerfile
Dockerfile 所在位置為/kwan/chatbot-vue/end 目錄下
FROM openjdk:8
VOLUME /tmp
ENV TZ=Asia/Shanghai
ADD vue-springboot-kwan-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 80
ENTRYPOINT ["java","-jar","/app.jar"]
5.注意事項
- 注意 Dockerfile 要和 jar 包在同一目錄
- git pull 不定期需要密碼
- 注意指定容器時區(qū)
- 存在上傳下載文件時需要指定文件掛載目錄
覺得有用的話點個贊
????
唄。
??????本人水平有限,如有紕漏,歡迎各位大佬評論批評指正!????????????如果覺得這篇文對你有幫助的話,也請給個點贊、收藏下吧,非常感謝!?? ?? ??
??????Stay Hungry Stay Foolish 道阻且長,行則將至,讓我們一起加油吧!??????文章來源:http://www.zghlxwxcb.cn/news/detail-751863.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-751863.html
到了這里,關(guān)于【docker系列】docker實戰(zhàn)之部署SpringBoot項目的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!