一:Docker
本質上就是容器
内容:我們可以在docker上挂載多個container容器,而這個容器可以放不同的内容:比如說springboot項目,前端項目,資料庫向mysql,sqlserver,oracle,之前剛剛接觸docker就是因為oracle安裝一直有問題,使用docker去安裝資料庫可以通過幾行指令就可以搞定,輕松快捷。
環境:docker可以在mac,linux,windows環境運作,受環境的影響較小。也就是說如果隻有一套部署環境下,docker可以部署多個不同項目,且這些項目都是屬于獨立的,不受其他項目的影響,每個容器之間屬于不關聯的,不用擔心一些軟體端口沖突,這些容器共享一個作業系統。
優點:
1.遷移友善,如果需要将一個項目部署到另外一台環境,隻需要将項目鏡像save成一個tar包,直接在tar包放到一個有docker環境的系統中,docker環境也是很好搭建的,很快。在這docker環境中加載這個tar包即可,适合一些傳遞的項目。
2.版本疊代友善,如果需要更新版本,可将之間的容器停掉即可,生成一個新的版本的鏡像再運作即可,如果需要回退版本的話,可以将新上的版本的容器停掉,運作上一個版本的容器即可。
3.一般來說,鏡像占的記憶體并不多,主要是看鏡像運作起來的項目占用的記憶體情況,就項目啟動和容器來說,容器啟動的時間是比較快的。
示範将springboot項目打包成鏡像的過程
1.将項目打包成鏡像
docker build -f /home/docker-TarPackage/test/Dockerfile -t test:0.0.2 .
解釋:
docker build -f Dockerfile的檔案位置 鏡像名:版本号 .
2.檢視鏡像
docker images
3.利用鏡像生成一個容器,并指定其對外端口号
docker run -p 8082:8080 test:0.0.1
解釋
docker run -p 對外暴露端口:項目内部端口 鏡像名:版本号
這個時候項目其實已經啟動成功了,但是如果指令操作頁面,容器會自動關閉
4.檢視生成的容器
docker ps -a
5.啟動對應的容器
docker start d2c1107efdc1
docker start 容器id
6.檢視容器日志
docker logs d2c
docker logs 容器id
7.删除容器和鏡像
docker rm 容器id
⚠️删除容器之前需要将容器stop,啟動的容器是删除不了的
docker stop 容器id
docker rmi 鏡像id
⚠️删除鏡像之前需要删除對應的容器
8.如果需要将鏡像拉出來去另外的docker環境中去運作需要将現有docker環境的image打成tar包即可
docker save test > /home/docker-TarPackage/test.tar
解釋:docker save 鏡像名 > 生成tar的位址/需要生成tar包的名稱
9.将tar上傳到另外的伺服器上加載
docker load< /home/docker-TarPackage/test.tar
docker load< 生成tar的位址/tar包的名稱
剩下的就是生成容器和啟動的過程了,和上面描述的過程一樣
Dockerfile 内容講解
FROM java:8
指定基礎鏡像,其實就是一個jdk8的環境,這裡的jdk其實也是一個基礎鏡像
VOLUME /tmp
這個是指定一個挂載目錄,建立一個可以從本地主機或其他容器挂載的挂載點,一般用來存放資料庫和需要保持的資料等
ADD gem-fc-0.0.1-SNAPSHOT.jar app.jar
類似于copy,gem-fc-0.0.1-SNAPSHOT.jar是我們項目打成的jar包,名字要和項目jar保持一緻,app.jar是在容器中的名字。功能就是把項目jar複制到容器當中
RUN bash -c ‘touch /app.jar’
這個就是啟動容器中生成的app.jar的指令
EXPOSE 8080
指定容器要打開的端口,告訴 Docker 服務端容器暴露的端口号,供互聯系統使用。在啟動容器時需要通過 -P,Docker 主機會自動配置設定一個端口轉發到指定的端口,其實就是項目配置檔案的端口号
ENTRYPOINT [“java”,"-Djava.security.egd=file:/dev/AES.java./urandom","-jar","/app.jar"]
ENTRYPOINT 執行項目 app.jar。為了縮短 Tomcat 啟動時間,添加一個系統屬性指向 “/dev/urandom” 作為 Entropy Source
總結:
VOLUME 指定了臨時檔案目錄為/tmp。其效果是在主機 /var/lib/docker 目錄下建立了一個臨時檔案,并連結到容器的/tmp。改步驟是可選的,如果涉及到檔案系統的應用就很有必要了。/tmp目錄用來持久化到 Docker 資料檔案夾,因為 Spring Boot 使用的内嵌 Tomcat 容器預設使用/tmp作為工作目錄
項目的 jar 檔案作為 “app.jar” 添加到容器的
ENTRYPOINT 執行項目 app.jar。為了縮短 Tomcat 啟動時間,添加一個系統屬性指向 “/dev/urandom” 作為 Entropy Source
二.阿裡雲Serverless
sae我之前測試的是基于docker鏡像部署的,實質上他是支援鏡像,war包和jar包部署
我覺得sae部署好處在于減少運維壓力,隻需要把鏡像放上去直接部署就行,不需要關注伺服器方面的事情,因為那些sae已經做過了,還有就是減少成本人力,sae有的是按照項目啟動的時間收費的。
阿裡雲serverless鏡像部署前提是需要把伺服器上打包的鏡像上傳到阿裡雲
1.登陸阿裡雲
2.找到容器鏡像服務并建立命名空間
3. 随後建立鏡像倉庫
4.使用的代碼源是本地倉庫的
5.登陸阿裡雲docker
sudo docker login --us[email protected] registry.cn-shanghai.aliyuncs.com
密碼需要在通路憑證中設定固定密碼
示範
6.先檢視docker中有哪些鏡像
docker images
7.給鏡像設定标簽
docker tag f03ec99cd2a2 registry.cn-shanghai.aliyuncs.com/gemdev/test:v0.0.1
解釋
Docker tag 鏡像id 倉庫位址/命名空間/倉庫名稱 :版本号
8.将鏡像推送到阿裡雲倉庫
docker push registry.cn-shanghai.aliyuncs.com/gemdev/test:v0.0.1
解釋
Docker push 倉庫位址/命名空間/倉庫名稱 :版本号
9.推送成功,檢視倉庫的鏡像版本
10.上傳完以後可以把本地鏡像删除,拉取阿裡雲鏡像測試一下
後面就是進行serverless部署鏡像了
1.登陸Serverless應用引擎SAE
2.建立應用
需要提前配置好安全組
阿裡雲會要求客戶設定安全組,如果不設定,阿裡雲會指定預設的安全組。那麼,這個安全組是什麼呢?顧名思義,就是為了伺服器安全設定的。安全組其實就是一個虛拟的防火牆,可以讓使用者從端口、IP的次元來篩選對應伺服器的通路者,進而形成一個雲上的安全域。
3.應用配置部署
這裡可以選擇部署的方式和應用的類型
部署方式分為docker鏡像,war包部署,jar包部署
應用類型分為java,php,還有其他
如果選擇鏡像部署
鏡像部署的來源也分多種:
1)自己私有的阿裡雲鏡像
這個就是由本地伺服器上傳到阿裡雲鏡像庫中的鏡像
2)Demo鏡像
這個是阿裡雲為了給初學者測試的一些demo鏡像
3)公有鏡像
這個是存在其他的鏡像倉庫的鏡像,要保證公網可以拉取到這些鏡像即可
4)其他阿裡雲帳号私有鏡像
選擇我的阿裡雲鏡像,然後選擇對應的倉庫命名空間和倉庫名,然後在這個倉庫中選擇想要部署的鏡像版本即可
1.啟動指令設定
這個就等同于生成鏡像中的DockerFile裡面的ENTRYPOINT屬性
也就是容器的啟動指令
由于Docker運作時僅支援一條ENTRYPOINT指令,是以SAE控制台中設定的啟動指令,将會覆寫制作應用容器Docker鏡像時Dockerfile中所設定的ENTRYPOINT
如果不屬于這些指令,建議不要改
2.環境變量設定
這個是為了設定容器環境的一些環境變量,可以去自定義一些變量名稱和變量值,也可以提前配好
配置完成以後點選完成,應用會重新開機,重新開機完以後環境變量就會生效
3.Host綁定設定
這個是使用域名綁定ip,部署完成以後通過域名通路,這個我沒試過
4.應用健康檢查設定
分http請求 tcp請求 執行指令檢查
HTTP請求檢查:通過向執行個體發送HTTP請求檢查健康情況。通過HTTP通路獲得的HTTP狀态碼位于[200,399]之間,則認為通路成功,執行個體健康;否則認為失敗,執行個體不健康。
TCP端口檢查:通過向執行個體發送一個TCP Socket來檢查執行個體的健康情況。如果可以建立連接配接,則認為執行個體健康;如果連接配接失敗,則認為不健康。
執行指令檢查:通過在執行個體中執行探針檢測指令來檢查執行個體的健康情況。如果執行指令後傳回的狀态碼為0,則認為執行成功,執行個體健康;如果不為0,則認為執行失敗,執行個體不健康
後面這些阿裡雲文檔上都有,就不多解釋了
4.确實規格-确認建立
5.可以檢視變更記錄檢視應用是否部署完成
這樣就屬于部署完成
6.可以去日志管理中檢視實時日志
檢視是否有報錯情況,如果沒有,就進行下一步的釋出了
7.去應用的基本資訊中檢視
可以選擇通路位址,我之前試過私網通路,一直通路不了,後來選擇了公網通路的方式
8.添加公網slb通路
9.選擇tcp協定,填寫slb端口和容器端口
slb端口可以自定義,容器端口要和容器中項目端口号保持一直,不然會導緻,釋出成功以後,通路不了其位址。
10.釋出完成以後,檢視變更記錄,如果變更完成以後,應用詳情頁面會生成一個公網的通路位址+端口号,通路位址+端口号+方法位址即可
11.通路
12。删除應用需要先将應用停掉,然後才能删除應用。
缺點:部署在阿裡雲sae上有時候會和一些端口有沖突,就像之前的郵箱服務,修改端口号也登陸不了網易雲郵箱。這個還需進一步研究,畢竟阿裡雲sae和linux伺服器有些配置可能不一樣。