容器現(xiàn)在風(fēng)靡于 IT 界 —— 這很好理解。容器是輕量級(jí)的姑原,包含應(yīng)用運(yùn)行所需所有東西(代碼悬而、庫(kù)、運(yùn)行時(shí)環(huán)境锭汛、系統(tǒng)設(shè)置笨奠,以及依賴(lài)關(guān)系)的獨(dú)立的包。每個(gè)容器都部署于它自己的 CPU唤殴、內(nèi)存般婆、塊 I/O,以及網(wǎng)絡(luò)資源上朵逝,所有這些都不依賴(lài)于某個(gè)內(nèi)核和操作系統(tǒng)蔚袍。這也是容器與虛擬機(jī)之間最大的不同;相比之下,虛擬機(jī)是一個(gè)運(yùn)行于宿主機(jī)操作系統(tǒng)上的完整的操作系統(tǒng)平臺(tái)啤咽,而容器不是晋辆。
容器允許你以一種前所未有的方式擴(kuò)展交付能力(不管內(nèi)部還是外部的)。例如宇整,你可以快速部署多個(gè) NGINX 實(shí)例(甚至可以應(yīng)用于多個(gè)不同的階段 —— 比如開(kāi)發(fā)和生產(chǎn)階段)瓶佳。跟虛擬機(jī)不同,容器不會(huì)消耗太多系統(tǒng)資源鳞青。
Docker?使得創(chuàng)建霸饲、部署,和管理容器變得特別簡(jiǎn)單臂拓。更好的是厚脉,安裝和使用 Docker 在 Linux 平臺(tái)上特別的方便。
我將會(huì)向你演示在 Linux 上安裝 Docker 是多么方便胶惰,同時(shí)帶你入門(mén) Docker器仗。我的演示平臺(tái)是?Ubuntu 16.04 Server,但流程在大多數(shù)其它 Linux 平臺(tái)都差不多童番。
我這里假設(shè)你已經(jīng)啟動(dòng)了 Ubuntu Server 16.04。
安裝
由于 Ubuntu Server 16.04 缺少圖形界面威鹿,我會(huì)完全通過(guò)命令行來(lái)安裝和使用 Docker剃斧。在你安裝前,你需要更新?apt?然后進(jìn)行必要的升級(jí)忽你。一定要注意幼东,若系統(tǒng)內(nèi)核升級(jí)了,你會(huì)需要重啟系統(tǒng)科雳。因此最好挑個(gè)服務(wù)器能重啟的時(shí)間進(jìn)行根蟹。
運(yùn)行下面命令更新?apt:
sudo apt update
完成后,使用命令升級(jí)系統(tǒng):
sudo apt upgrade
若內(nèi)核升級(jí)了糟秘,你需要用下面命令重啟服務(wù)器:
sudo reboot
若內(nèi)核沒(méi)有升級(jí)简逮,你就可以安裝 Docker 了(無(wú)需重啟)。安裝 Docker 的命令為:
sudo apt install docker.io
若你使用的是其它 Linux 發(fā)行版尿赚,當(dāng)嘗試用相應(yīng)的包管理器來(lái)安裝時(shí)卻發(fā)現(xiàn)沒(méi)有?docker.io?包散庶,則你應(yīng)該安裝?docker?包。例如凌净,在?Fedora?上安裝應(yīng)該用命令:
sudo dnf install docker
若你使用的是 CentOS 7悲龟,那么最好使用安裝腳本來(lái)安裝 docker。首先使用命令?sudo yum check-update?更新系統(tǒng)冰寻。升級(jí)完后须教,輸入下面命令來(lái)下載并運(yùn)行所需的腳本:
curl -fsSL https://get.docker.com/ | sh
默認(rèn)情況下,只有管理員權(quán)限能夠運(yùn)行 docker 命令斩芭∏嵯伲考慮到安全問(wèn)題乐疆,你不會(huì)想用 root 用戶或使用?sudo?來(lái)運(yùn)行 Docker 的。要解決這個(gè)問(wèn)題约计,你需要將自己的用戶加入到 docker 組中诀拭。命令如下:
sudo usermod -a -G docker $USER
完成操作后,登出系統(tǒng)然后再重新登錄煤蚌,應(yīng)該就搞定了耕挨。不過(guò)若你的平臺(tái)是 Fedora,則添加用戶到 docker 組時(shí)會(huì)發(fā)現(xiàn)這個(gè)組是不存在的尉桩。那該怎么辦呢筒占?你需要首先創(chuàng)建這個(gè)組。命令如下:
sudo groupadd docker && sudo gpasswd -a ${USER} docker && sudo systemctl restart docker
newgrp docker
登出后再登錄蜘犁。就可以開(kāi)始用 Docker 了翰苫。
啟動(dòng),暫停以及啟用 Docker
安裝好 Docker 后这橙,你可以讓系統(tǒng)在啟動(dòng)時(shí)自動(dòng)啟動(dòng) Docker 守護(hù)進(jìn)程奏窑。使用下面兩個(gè)命令來(lái)實(shí)現(xiàn)這一點(diǎn):
sudo systemctl start docker
sudo systemctl enable docker
若需要暫停或重啟 Docker 守護(hù)進(jìn)程屈扎,則命令為:
sudo systemctl stop docker
sudo systemctl restart docker
現(xiàn)在可以用 Docker 來(lái)部署容器了埃唯。
拉取鏡像
對(duì) Docker 來(lái)說(shuō),鏡像是構(gòu)建容器的基石鹰晨。你可以拉下一個(gè)鏡像(比如?NGINX)然后根據(jù)這個(gè)鏡像部署任意多個(gè)容器出來(lái)墨叛。使用鏡像前,你首先需要把鏡像拉取到系統(tǒng)中模蜡。鏡像從注冊(cè)倉(cāng)庫(kù)中拉取漠趁,默認(rèn)情況下安裝好的 Docker 包含了一個(gè)默認(rèn)的注冊(cè)倉(cāng)庫(kù)?Docker Hub?—— 這個(gè)注冊(cè)倉(cāng)庫(kù)包含了大量別人所貢獻(xiàn)的鏡像(既包括官方的鏡像,也包括用戶自己貢獻(xiàn)的鏡像)忍疾。
假設(shè)你想要拉取一個(gè) Nginx Web 服務(wù)器相關(guān)的鏡像闯传。在開(kāi)始拉取前,先檢查一下系統(tǒng)中已經(jīng)有了哪些鏡像膝昆。輸入?docker images?命令你會(huì)發(fā)現(xiàn)現(xiàn)在還沒(méi)有鏡像存在(圖 1)丸边。
圖 1:還沒(méi)有鏡像。
讓我們來(lái)拉取一個(gè)鏡像荚孵。使用下面命令可以從 Docker Hub 中下載 Nginx 鏡像:
docker pull nginx
上面命令會(huì)從 Docker Hub 下載最新的(官方的) Nginx 鏡像∶媒眩現(xiàn)在再運(yùn)行?docker images?命令就能看到有列出鏡像了(圖 2)。
圖 2:NGINX 鏡像已經(jīng)被拉取下來(lái)了收叶。
注意到我這里說(shuō)的是“官方” Nginx 鏡像了嗎骄呼?在 Docker Hub 上有很多的非官方 Nginx 鏡像。這些非官方鏡像都是基于各種不同的目的而創(chuàng)建出來(lái)的。你可以使用下面過(guò)命令來(lái)搜索 Docker Hub 中的所有 Nginx 鏡像:
docker search nginx
你會(huì)發(fā)現(xiàn)(圖 3 中)蜓萄,有很多基于不同目的所創(chuàng)建的 Nginx 鏡像(反向代理隅茎、PHP-FPM(LCTT 譯注:FastCGI 進(jìn)程管理器FastCGI Process Manager是一個(gè) PHPFastCGI 管理器,旨在將 FastCGI 進(jìn)程管理整合進(jìn) PHP 包中)功能嫉沽、LetsEncrypt(LCTT 譯注:由 ISRG 提供的免費(fèi) SSL 項(xiàng)目)辟犀,Bitnami,在樹(shù)莓派上使用的 Nginx 和 Drupal绸硕,等等很多很多)堂竟。
圖 3:Docker Hub 上找到的各種 NGINX 鏡像。
假設(shè)玻佩,你想要下載內(nèi)建有反向代理功能的 Nginx 鏡像出嘹,有個(gè)非官方的鏡像 jwilder/nginx-proxy。因此輸入下面命令來(lái)拉取這個(gè)鏡像:
docker pull jwilder/nginx-proxy
再輸入?docker images?命令來(lái)查看新拉下來(lái)的這個(gè)鏡像(圖 4)咬崔。
圖 4:已經(jīng)有了兩種不同的 NGINX 鏡像了税稼。
處于謹(jǐn)慎考慮,我建議只使用官方鏡像垮斯,畢竟你無(wú)法確定非官方鏡像是否包含了惡意代碼郎仆。
有了鏡像后就可以用它來(lái)部署容器了。下次我們?cè)倭牧娜绾瓮ㄟ^(guò)這些 Nginx 鏡像來(lái)發(fā)布容器兜蠕。
Docker 是一個(gè)超級(jí)強(qiáng)力的系統(tǒng)可以讓你的工作更簡(jiǎn)單丸升,讓你的公司更具有伸縮性,也更靈活牺氨。想知道 Docker 還能做什么,運(yùn)行?man docker?然后閱讀它的幫助文檔吧墩剖。