天天看點

阿裡雲serverless部署docker鏡像

一: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伺服器有些配置可能不一樣。