容器現在風靡于 it 界 —— 這很好理解。容器是輕量級的,包含應用運行所需所有東西(代碼、庫、運行時環境、系統設置,以及依賴關系)的獨立的包。每個容器都部署于它自己的 cpu、內存、塊 i/o,以及網絡資源上,所有這些都不依賴于某個內核和操作系統。這也是容器與虛擬機之間最大的不同;相比之下,虛擬機是一個運行于宿主機操作系統上的完整的操作系統平臺,而容器不是。
容器允許你以一種前所未有的方式擴展交付能力(不管內部還是外部的)。例如,你可以快速部署多個 nginx 實例(甚至可以應用于多個不同的階段 —— 比如開發和生產階段)。跟虛擬機不同,容器不會消耗太多系統資源。
docker 使得創建、部署,和管理容器變得特別簡單。更好的是,安裝和使用 docker 在 linux 平臺上特別的方便。
我將會向你演示在 linux 上安裝 docker 是多么方便,同時帶你入門 docker。我的演示平臺是 ubuntu 16.04 server,但流程在大多數其它 linux 平臺都差不多。
我這里假設你已經啟動了 ubuntu server 16.04。
安裝
由于 ubuntu server 16.04 缺少圖形界面,我會完全通過命令行來安裝和使用 docker。在你安裝前,你需要更新 apt 然后進行必要的升級。一定要注意,若系統內核升級了,你會需要重啟系統。因此最好挑個服務器能重啟的時間進行。
運行下面命令更新 apt:
1
|
sudo apt update |
完成后,使用命令升級系統:
1
|
sudo apt upgrade |
若內核升級了,你需要用下面命令重啟服務器:
1
|
sudo reboot |
若內核沒有升級,你就可以安裝 docker 了(無需重啟)。安裝 docker 的命令為:
1
|
sudo apt install docker.io |
若你使用的是其它 linux 發行版,當嘗試用相應的包管理器來安裝時卻發現沒有 docker.io 包,則你應該安裝 docker 包。例如,在 fedora 上安裝應該用命令:
1
|
sudo dnf install docker |
若你使用的是 centos 7,那么最好使用安裝腳本來安裝 docker。首先使用命令 sudo yum check-update 更新系統。升級完后,輸入下面命令來下載并運行所需的腳本:
1
|
curl -fssl https: //get .docker.com/ | sh |
默認情況下,只有管理員權限能夠運行 docker 命令。考慮到安全問題,你不會想用 root 用戶或使用 sudo 來運行 docker 的。要解決這個問題,你需要將自己的用戶加入到 docker 組中。命令如下:
1
|
sudo usermod -a -g docker $user |
完成操作后,登出系統然后再重新登錄,應該就搞定了。不過若你的平臺是 fedora,則添加用戶到 docker 組時會發現這個組是不存在的。那該怎么辦呢?你需要首先創建這個組。命令如下:
1
2
|
sudo groupadd docker && sudo gpasswd -a ${user} docker && sudo systemctl restart docker newgrp docker |
登出后再登錄。就可以開始用 docker 了。
啟動,暫停以及啟用 docker
安裝好 docker 后,你可以讓系統在啟動時自動啟動 docker 守護進程。使用下面兩個命令來實現這一點:
1
2
|
sudo systemctl start docker sudo systemctl enable docker |
若需要暫停或重啟 docker 守護進程,則命令為:
1
2
|
sudo systemctl stop docker sudo systemctl restart docker |
現在可以用 docker 來部署容器了。
拉取鏡像
對 docker 來說,鏡像是構建容器的基石。你可以拉下一個鏡像(比如 nginx)然后根據這個鏡像部署任意多個容器出來。使用鏡像前,你首先需要把鏡像拉取到系統中。鏡像從注冊倉庫中拉取,默認情況下安裝好的 docker 包含了一個默認的注冊倉庫 docker hub —— 這個注冊倉庫包含了大量別人所貢獻的鏡像(既包括官方的鏡像,也包括用戶自己貢獻的鏡像)。
假設你想要拉取一個 nginx web 服務器相關的鏡像。在開始拉取前,先檢查一下系統中已經有了哪些鏡像。輸入 docker images 命令你會發現現在還沒有鏡像存在(圖 1)。
圖 1:還沒有鏡像。
讓我們來拉取一個鏡像。使用下面命令可以從 docker hub 中下載 nginx 鏡像:
1
|
docker pull nginx |
上面命令會從 docker hub 下載最新的(官方的) nginx 鏡像。現在再運行 docker images 命令就能看到有列出鏡像了(圖 2)。
圖 2:nginx 鏡像已經被拉取下來了。
注意到我這里說的是“官方” nginx 鏡像了嗎?在 docker hub 上有很多的非官方 nginx 鏡像。這些非官方鏡像都是基于各種不同的目的而創建出來的。你可以使用下面過命令來搜索 docker hub 中的所有 nginx 鏡像:
1
|
docker search nginx |
你會發現(圖 3 中),有很多基于不同目的所創建的 nginx 鏡像(反向代理、php-fpm(lctt 譯注:fastcgi 進程管理器fastcgi process manager是一個 phpfastcgi 管理器,旨在將 fastcgi 進程管理整合進 php 包中)功能、letsencrypt(lctt 譯注:由 isrg 提供的免費 ssl 項目),bitnami,在樹莓派上使用的 nginx 和 drupal,等等很多很多)。
圖 3:docker hub 上找到的各種 nginx 鏡像。
假設,你想要下載內建有反向代理功能的 nginx 鏡像,有個非官方的鏡像 jwilder/nginx-proxy。因此輸入下面命令來拉取這個鏡像:
1
|
docker pull jwilder /nginx-proxy |
再輸入 docker images 命令來查看新拉下來的這個鏡像(圖 4)。
圖 4:已經有了兩種不同的 nginx 鏡像了。
處于謹慎考慮,我建議只使用官方鏡像,畢竟你無法確定非官方鏡像是否包含了惡意代碼。
有了鏡像后就可以用它來部署容器了。下次我們再聊聊如何通過這些 nginx 鏡像來發布容器。
docker 是一個超級強力的系統可以讓你的工作更簡單,讓你的公司更具有伸縮性,也更靈活。想知道 docker 還能做什么,運行 man docker 然后閱讀它的幫助文檔吧。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://linux.cn/article-9352-1.html