依稀記得2022年趁某平臺優惠買了臺雲伺服器,周未準備安裝MySQL資料庫,兩天時間卡在MySQL環境配置上,實在是折磨一氣之下把伺服器給退了。
要是我早一點學會Docker,我的部落格估計已上線一年啦!前端切圖仔學會Docker,我真的能讓你三分鐘上線自己部落格平臺。
不騙人,先把我的部落格平臺秀出來給xdm瞅瞅。
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常用命令列出來,其實它們很多命令是某幾個英語單詞換掉了,含意是一樣的。
Docker | npm | 作用 |
---|---|---|
docker pull Docker映象名 | npm i npm包名 | 下載npm包/Docker映象 |
docker rmi Docker映象Id | npm uninstall npm包名 | 刪除npm包/Docker映象 |
docker images | npm 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