前端切圖仔入門Docker,三分鐘上線自己的部落格平臺

凌覽發表於2023-04-21

依稀記得2022年趁某平臺優惠買了臺雲伺服器,周未準備安裝MySQL資料庫,兩天時間卡在MySQL環境配置上,實在是折磨一氣之下把伺服器給退了。

要是我早一點學會Docker,我的部落格估計已上線一年啦!前端切圖仔學會Docker,我真的能讓你三分鐘上線自己部落格平臺。

不騙人,先把我的部落格平臺秀出來給xdm瞅瞅。

網址:https://www.linglan01.cn

Docker能做什麼?

舉個?,大家有沒有體驗過在伺服器上安裝MySQL、Node.js等經歷,安裝它們並是不像手機應用商店、macOS中的App Store那樣點選下載即可,我們還需要為它們手動配置環境變數、路徑,更甚者要設定許可權。像我整理的linux安裝Node.js文件,為了安裝它我需要手敲好幾個命令:

Node.js安裝是相對簡單的,為搭建一個後臺可能我們需要使用到MySQL、Nginx、Redis等等。如果搭建這些服務能像我們前端開發熟悉的Npm包管理器那樣一個命令下載安裝別人已經配置好的該多好,我只想做個伸手黨,而Docker正好圓了我這個想法。

簡言之,Docker是幫助開發者快速簡單搭建、部署、安裝應用服務的一個工具。當然Docker功能不僅僅侷限於這些,其他功能我暫時沒有使用到,xdm自行研究吧。

Docker中的三個重要概念

映象:

映象概念等價於Npm包的概念,直接理解成Npm第三方包即可。例如:我們下載vue開源的包npm i vue ,下載Node.js映象docekr pull node

容器

容器就有點難理解,Docker 容器和資料夾很類似,一個Docker容器包含了所有的某個應用執行所需要的環境。每一個 Docker 容器都是從 Docker 映象建立的。Docker 容器可以執行、開始、停止、移動和刪除。每一個 Docker 容器都是獨立和安全的應用平臺,Docker 容器是 Docker 的執行部分。

前端xd可以將其理解成npm run dev命令執行後產生的結果。

倉庫:

這個概念最容易理解了,直接將它理解與Npm倉庫一樣的東西。像使用命令npm i vue下載vue,npm其實是先在npm官網地址https://www.npmjs.com/search?q=vue查詢,查詢有對應包名後再下載。

同樣的,當docker下載Node.js映象docker pull node,它也是透過Docker倉庫連結https://hub.docker.com/_/node查詢後再下載。

Docker的使用

預設xdm已經是合格的開發人員,面向bing搜尋安裝Docker是小菜一碟,所以我不想寫Dokcer的安裝,直接跳到Docker的使用。

沒有玩過Docker,xdm肯定玩過Npm,特別是前端開發人員。Npm 常用命令,我默寫都能默寫出來。這裡我用表格將Docker常用命令與Npm常用命令列出來,其實它們很多命令是某幾個英語單詞換掉了,含意是一樣的。

Dockernpm作用
docker pull Docker映象名npm i npm包名下載npm包/Docker映象
docker rmi Docker映象Idnpm uninstall npm包名刪除npm包/Docker映象
docker imagesnpm list檢視當前已下載的npm包/Docker映象

現在我們在伺服器環境使用上列命令下載Node.js映象來耍耍。

我伺服器Docker版本是v19.03.9:

我們先檢視當前有哪些Docker映象:

已存在Node.js映象,並且TAG是latest,說明當前的映象是最新版本。

那我們下載另一個版本的Node.js映象,下載其他版本的映象僅需要在映象名後加上tag,如下載https://hub.docker.com/_/node/tags頁面中第一列tag為lts-buster的Node.js映象。

下載lts-buster的Node.js映象,然後再檢視當前所有映象:

//下載node tag為lts-buster的Docker映象
docker pull node:lts-buster
//檢視當前所有Docker映象
docker images

刪除映象:

docerk rmi 映象Id

這裡需要注意,刪除是根據ID刪除可不要搞錯了,映象ID是映象下載後自動生成的,我們不需要做其他的操作。

以上是關於Docker操作映象常用的幾個命令,是不是非常容易。

然後是關於Docker容器的常用命令:

Docker命令作用
docker ps檢視當前的容器(執行、暫停狀態)
docker ps -a檢視當前所有的容器(所有狀態)
docker logs 容器ID檢視容器日誌
docker rm 容器ID刪除容器
docker rm 容器ID -f強制刪除容器
docker stop 容器ID暫停容器執行

如:檢視我伺服器當前的容器,其中docker ps命令僅展示STATUS(狀態)為非Exited(停止)的,docker ps -a將展示所有。因為圖中紅框框起來的容器STATUS(狀態)為Exited(停止),所以想見到它應使用docker ps -a命令。它是我故意停止的,但在部署中,停止的原因可能是某個引數錯誤或容器內部報錯導致,這時需要我們去排查原因,docker ps -a肯定會用上,docker logs 容器ID檢視容器錯誤日誌也不要忘記了。

刪除、暫停容器不貼圖啦,執行中的容器不能直接刪除,需要先暫停容器執行。當然使用強制刪除命令docker logs 容器ID -f就沒有這個限制了。

最後是docker run ... 它較特殊重點寫,它的作用是建立一個新的容器。

語法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS常用配置有:

Options作用
-d後臺執行容器,並返回容器ID
-p指定埠對映,格式為:主機(宿主)埠:容器埠
--name="nginx-lb"為容器指定一個名稱
--volume , -v繫結一個資料卷

現在建立Nginx容器來演示下,先使用docker pull nginx下載Nginx映象。

建立一個指定名稱為mynginx的容器:

這裡新增了-d,它的作用是使容器在後臺執行,一般都會把它加上。

刪除指定名為“mynginx”的容器,然後再次建立指定名稱為mynginx的容器,這次去掉-d看下效果:

去除-d,建立容器執行後,終端皮膚不能再有其他操作,關閉當前終端皮膚也會導致容器停止執行。無特殊要求記得帶上-d

容器是獨立的,容器啟動一個服務,外界如果想訪問,則需要暴露出一個埠,讓我們能訪問到容器內部的服務,像nginx預設監聽埠為80,當我們去訪問一個nginx容器服務時,需要使用-p將容器內的80埠對映出來。

由於我的伺服器80埠已被其他應用佔用,所以改用3000埠演示:

這個時候,外網就可以直接訪問Nginx。我的伺服器IP已繫結域名,即域名+ 3000埠即可成功訪問到Nginx。

繫結資料卷聽著非常牛逼的名詞,但其實它非常好理解。舉個?,建立Nginx容器服務後,容器內會存在nginx.conf檔案。如果我們想自定義Nginx配置,就需要對nginx.conf進行修改,容器是無狀態的,Nginx容器刪除重新建立,它的nginx.conf檔案內容將會被重置。我們需要將nginx.conf檔案的修改持久化保留,需要使用-v進行資料卷繫結。
如:現在伺服器存在nginx.conf檔案,並內容已修改成我們想要的配置

docker run --name "myNiginx" -v /nginx:/var/nginx -d nginx

其中/nginx:/var/nginx:左邊是我們修改的nginx.conf,右邊是Nginx容器內的預設配置檔案nginx.conf,左邊檔案對映到右邊檔案,這樣就能做到持久化保留nginx.conf檔案的修改。

Docker Compose是什麼

Docker Compose是Docker官方的開源專案,實現對Docker容器叢集快速編排。

舉個?,像公司中實際專案裡,後端這邊不單單僅起一個java服務,他可能需要透過java操作MySQL或Radis一類的資料庫,可能還會使用到Nginx進行負載均衡一類的服務等等。

因此,可能需要建立管理2個或2個以上的容器,執行的容器變多又分散不方便管理,比如:我想把後端服務相關的容器都停了,難道讓我反覆執行docker stop 容器ID命令?

Docker Compose出於上述問題出現,它允許我們透過建立一個xxx.yaml檔案統一配置管理多個容器,然後只要一個命令,就能同時啟動/關閉這些容器

Docker Compose使用

Docker的使用一樣,Docker Compose也跳過安裝,xdm面向bing搜尋進行安裝吧。

Docker Compose常用命令:

Docker Compose命令描述
docker-compose up -d啟動服務
docker-compose down停止服務

再使用Docker Compose命令之前,先準備一個.yaml檔案。

這裡不再逐一貼上Docker Compose命令執行結果圖,後面一節有例項。

搭建部落格平臺

有了上述Docker、Docker Compose入門知識後,我們可以開始搭建個人部落格平臺的操作啦!

我的個人部落格平臺https://www.linglan01.cn是部署Github社群的開源專案vanblog,它是一個個人部落格系統,移動端自適應,具體的介紹xdm請移動它的官方文件

我們直接看到部署方式這節:

把郵箱修改成自己的,如果沒有其他要求,其他位置的配置不需要改動。

在伺服器建立docker-compose.yaml檔案,複製官方文件的配置到docker-compose.yaml檔案中。由於我想把mongoDb資料庫服務開放出來,docker-compose.yaml檔案中額外新增了其他的配置語句,xdm可以忽略掉它。直接複製官網貼的配置,再將郵箱地址修改成自己的即可。

最後執行docker-compose up -d命令。

總結

從一年前嘗試安裝配置MySQL資料庫失敗為開頭,向前端開發人員講述Docker、Docker Composep是什麼,它能幫助我們們開發人員能做什麼。

利用Npm包管理器相關概念,幫助前端人員更好的理解映象、容器、倉庫Docker中三個重要概念。也講述了Docker、Docker Compose簡單的入門知識以及基礎的使用,且實戰部署一個部落格平臺體驗一波Docker技術帶來的好處。

B站影片:
Docker部署部落格平臺_嗶哩嗶哩_bilibili

參考

Get Docker | Docker Documentation

Docker Compose overview | Docker Documentation

全網最詳細的Docker-Compose詳細教程

Docker 學習筆記:Docker簡介和安裝

Docker 入門教程

相關文章