Docker
Docker 概述
Docker
是一種容器化技術
,用於隔離應用之間的邊界問題。
Docker
最常見的兩個概念是:映象(Image)
、容器(Container)
。
映象(Image)
映象(Image)
是當前程式執行時所使用的所有檔案資源。可以簡單理解為映象(Image)
中包含程式執行所需要的所有檔案資源(包括系統程式的檔案資源)。
例如一個前端應用映象,需要依賴 Nginx
伺服器, Nginx
依賴系統。
所以一個前端應用程式映象包含了作業系統檔案資源、Nginx
檔案資源。
所以映象可以隨意進行 “搬運” ,而不受宿主環境(本地系統)影響。
映象(Image)
設計方案是分層設計的,社群內提供大量的基礎映象,可以利用這些基礎映象來構建映象。
例如前端應用映象,直接使用 Nginx
映象構建映象,就相當於在 Nginx
映象層中又加了一層。 而 Nginx
映象也是在 系統映象層 上加的一層。
分層帶來了諸多好處。
PS:
Docker
並不是完全不受系統環境的影響,Docker
容器是執行在宿主環境上,在軟體層面上進行的隔離,而並非虛擬機器那種直接在硬體上進行隔離
PS:
映象(Image)
的層級劃分實際上更為精細。在 Dockerfile 檔案中, 一個語句就是一層。
容器(Container)
容器(Container)
是根據映象(Image)
在系統中建立的一個程式,只不過對這個程式做了某些特殊處理。例如: 隔離限制(Namespace)
和 資源限制(Control Group)
簡單的可以理解為 容器(Container)
就是一個受限制的程式。
Docker
和容器化
裡面有很多東西,有興趣可以自行學習
Docker 部署
HTTPS
工具
Docker
安裝需要 HTTPS
協議安裝,一般第一步都是安裝 apt-transport-https
sudo apt install apt-transport-https ca-certificates curl software-properties-common
騰訊雲伺服器中已經具有了 HTTPS
協議的包,所以直接省略此步驟,沒有的話使用上面語句進行安裝
新增 Docker 儲存庫金鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
新增 Docker 儲存庫 apt
源
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
[arch=amd64]
表示amd64
架構,其它還具有armhf
、arm64
等架構$(lsb_release -cs) stable
表示穩定版。還有edge(體驗)
、test(測試)
apt
源新增成功後可以在 /etc/apt/sources.list
檔案檢視
然後更新 apt
配置檔案
sudo apt update
安裝 Docker CE
Docker
版本分為 Docker EE(企業版)
和 Docker CE(社群版)
。
Docker EE
提供了一些收費的高階特性。
可以使用 apt
檢視當前可用的Docker CE
版本
apt list -a docker-ce
在寫這篇文章時的最新的版本時 Docker-CE 20.10.12
,在此就安裝Docker-CE 20.10.12
sudo apt install docker-ce=5:20.10.123-0ubuntu-focal
安裝成功後可以取消 Docker
的自動更新,防止版本更新導致錯誤。
sudo apt-mark hold docker-ce
Docker 啟動與設定
啟動 Docker
服務
service docker start
啟動成功後可以執行 Docker
命令
新增使用者到 Docker
組
在非 root
使用者執行 Docker
命令必須使用 sudo
,這是一個繁瑣的過程,可以將指定使用者新增至 Docker
組解決這個問題
新增使用者至 Docker
組
sudo usermod -aG docker [USER]
新增完畢後需要重新登陸才生效
設定 Docker
映象源
Docker
預設映象源地址是在國外,映象拉取會很慢,可以將映象源改為國內映象源
修改 Docker
預設源是修改 /etc/docker/daemon.json(沒有此檔案,可以自行建立)
在此檔案中新增國內映象,可以新增一個或多個。
在此新增了 網易映象源 、中國科技大學映象源 、Docker 官方中國區映象源
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com"
]
}
新增完畢後需要重啟 Docker
服務
sudo systemctl daemon-reload
sudo systemctl restart docker
重啟成功後可以使用 docker info 命令檢視修改的結果
其中 Registry Mirrors 就是映象源屬性。
Docker Compose
Docker Compose 概述
Docker Compose
是一個 Docker
編排工具(容器組管理)。可以對多個 容器
合併到一個組進行管理。
在現實場景中,一個專案往往具有多個應用,一個專案可能會具有多個容器組成,也就是形成一個容器組。Docker Compose
就是提供這個組的管理工具。
PS: 容器是一個原子單位,雖然可以直接將多個應用(多個程式)打包在一個容器內,但是不推薦這樣做,容器應保持單程式執行
Docker Compose
使用了 YAML
標記語言作為配置檔案,所以使用 Docker Compose
管理容器
還有一個好處是使用檔案形式組織容器配置,而不是單純的命令列
容器編排工具還有其它工具,比如鼎鼎大名的 kubernetes(k8s)
,還有 Docker SWARM
、K3s
等。
企業級別的一般都是用 kubernetes(k8s)
,不過個人且還是小 4G 伺服器還是算了。
一開始我想選擇 K3s
,但是那玩意部署也有些麻煩,佔用資源也不少,且想了想還是單機也沒必要使用叢集方案,最後就直接選擇了 Docker Compose
。
Docker Compose 部署
Docker Compose
安裝包可以直接從 github
下載,目前最新版本是 v2.2.3
。
可以直接在伺服器中使用 curl
下載
sudo curl -SL https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
但是國內訪問 github
真的是超級慢,所以建議直接在本地下載(使用加速器),然後上傳伺服器
下載時注意系統版本,一般情況下都是 Linux x86_64
,如果不放心可以使用 uname -sm
命令檢視
本地下載完成之後,將檔案更名為 docker-compose 並上傳到伺服器 /usr/local/bin/
目錄下就相當於安裝成功了。
PS: 注意上傳時登入的使用者,一般使用者沒有許可權上傳此目錄,我所有上傳操作都是使用的
root
使用者。
安裝完成後,一般使用者也並沒有執行 Docker Compose
的許可權 , 需要設定 Docker Compose
的讀寫許可權。
sudo chmod +x /usr/local/bin/docker-compose
在此直接將 Docker Compose
的執行許可權設定給了所有使用者,如果需要詳細設定,使用 chmod
命令具體引數設定
設定完成後就可以執行 docker-compose
命令了
Docker Compose 命令
docker-compose
命令可以檢視網上資料,具體命令我也不熟,都是使用網上現查, 一般也是使用另一個管理工具 Portainer
來執行。