Ubuntu
Docker 支持 Ubuntu以下版本:
- Ubuntu Wily 15.10
- Ubuntu Vivid 15.04
- Ubuntu Trusty 14.04 (LTS)
- Ubuntu Precise 12.04 (LTS)
這個章節會指導你使用Docker-managed發佈包和安裝機制去安裝。使用這個包確保你獲得Docker的最新發行版。如果你希望使用CentOS-managed 包,請查閱Centos的相關文檔。
注意:Ubuntu Utopic 14.10 雖然還在Docker的
apt
倉庫裏,但是官方已經不支持它了。
先決條件
安裝 Docker 需要一個不限版本的64位Ubuntu 。此外,你的內核必須 3.10 及以上。
內核低於 3.10 缺乏一些運行容器必須的特性。這些老版本的系統還存在一些“惡名昭昭"的bug,會導致數據的丟失和在某些條件下引起頻繁的恐慌。
打開你的終端,使用 uname -r
命令查看你的內核版本:
$ uname -r
3.11.0-15-generic
注意:如果你以前有使用
apt
安裝Docker,請務必先更新你的apt
源指向新的Docker倉庫。
更新你的 apt 源
Docker的 apt
倉庫包含 Docker 1.7.1 和更高的版本。設置 apt
指向新的倉庫:
-
如果你沒有做過這樣的操作,請使用一個擁有特權的用戶登錄到Ubuntu實例。
-
打開一個終端窗口。
-
添加一個新的
gpg
key。$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
-
使用你喜歡的編輯器打開
/etc/apt/sources.list.d/docker.list
文件。如果文件不存在,就創建它。
-
清空文件已有的內容。
-
爲你的Ubuntu操作系統添加一個條目。
條目內容如下所示:
# Ubuntu Precise 12.04 (LTS) deb https://apt.dockerproject.org/repo ubuntu-precise main# Ubuntu Trusty 14.04 (LTS) deb https://apt.dockerproject.org/repo ubuntu-trusty main# Ubuntu Vivid 15.04 deb https://apt.dockerproject.org/repo ubuntu-vivid main# Ubuntu Wily 15.10 deb https://apt.dockerproject.org/repo ubuntu-wily main
-
保存並關閉
/etc/apt/sources.list.d/docker.list
文件。 -
更新
apt
包索引。$ apt-get update
-
清除舊的倉庫(repo),如果它存在。
$ apt-get purge lxc-docker*
-
覈實
apt
正在從正確的倉庫拉取數據。$ apt-cache policy docker-engine
從現在開始,當你執行
apt-get upgrade
時,apt
會用新的倉庫拉取。
Ubuntu 版本的先決條件
- Ubuntu Wily 15.10
- Ubuntu Vivid 15.04
- Ubuntu Trusty 14.04 (LTS)
對於Ubuntu Trusty、Vivid 和 Wily,官方推薦去安裝 linux-image-extra
內核包。linux-image-extra
包允許你使用 aufs
作爲存儲驅動。
爲你的內核版本安裝 linux-image-extra
:
-
在你的Ubuntu主機上打開一個終端。
-
更新你的包管理器。
$ sudo apt-get update
-
安裝推薦的包。
$ sudo apt-get install linux-image-extra-$(uname -r)
-
繼續並安裝 Docker。
Ubuntu Precise 12.04 (LTS)
對於 Ubuntu Precise,Docker 需要3.13 的內核版本。如果你的內核版本比這個低,你必須先升級它。 參考這個表格瞭解每個包需要的環境:
升級你的內核並安裝相關的依賴包:
-
打開一個終端。
-
更新你的包管理器。
$ sudo apt-get update
-
安裝必選和可選的包。
$ sudo apt-get install linux-image-generic-lts-trusty
根據你的環境,你可能需要安裝比上述表格列出更多的依賴。
-
重啓你的主機。
$ sudo reboot
-
重啓之後,繼續安裝Docker。
安裝
確保你已經安裝好所有的先決依賴。之後,使用如下步驟安裝Docker:
-
使用一個帶有
sudo
特權的用戶登錄到你的系統上。 -
更新你的
apt
包索引。$ sudo apt-get update
-
安裝 Docker。.
$ sudo apt-get install docker-engine
-
啓動
docker
daemon。$ sudo service docker start
-
覈實
docker
已經安裝成功。$ sudo docker run hello-world
這條命令會下載一個測試鏡像並在一個容器裏運行它。當容器啓動時,它會打印一個報告信息。之後,它退出運行。
可選配置
這個小節包含一些可選的步驟去配置你的Ubuntu系統,爲Docker 提供更好的支持。
創建一個 Docker 組
docker
daemon 綁定一個 Unix socket 替代你一個 TCP端口。默認情況下,Unix
socket 屬於 root
用戶,其他用戶只能使用 sudo
才能訪問。正是因爲這個原因, docker
daemon
總是需要 root
用戶啓動。
爲了避免每次使用 docker
命令時,需要頻繁追加 sudo
,可以創建一個名爲 docker
組並把有需要的用戶添加進去。當 docker
daemon
啓動時,通過 docker
組可以共享Unix
Socket的讀寫權限。
警告:
docker
組是和root
用戶等價的。關於這個設置對系統安全影響,請移步 Docker Daemon 的攻擊面去了解更多。
創建一個 docker
組並添加你的用戶:
-
使用
sudo
特權登陸到你的系統。這個過程裏,假定你使用
ubuntu
用戶登錄。 -
創建
docker
組並添加你的用戶。$ sudo usermod -aG docker ubuntu
-
先登出,然後再登陸。
這樣確保你的用戶權限的正確性。
-
通過執行不帶
sudo
的docker
命令來覈實設置是否成功。$ docker run hello-world
如果得到類似如下的失敗信息:
Cannot connect to the Docker daemon. Is 'docker daemon' running on this host?
檢查
DOCKER_HOST
環境變量是否已經設置正確,如果沒有,設置它。
調整內存和swap
當運行Docker時,使用鏡像工作時,可能會看到如下的信息:
WARNING: Your kernel does not support cgroup swap limit. WARNING: Your
kernel does not support swap limit capabilities. Limitation discarded.
爲了避免這個提示,你可以在你的系統上開啓內存和swap功能。這樣做會消耗一定的內存和降低性能且不管你是否使用Docker。內存損耗大概佔總的可用內存的1%。性能一般會下面接近10%。
可以使用 GNU GRUB 工具開啓上述功能,具體操作如下:
-
先用用戶的
sudo
權限登錄到你的Ubuntu系統。 -
編輯
/etc/default/grub
文件。 -
設置
GRUB_CMDLINE_LINUX
的值如下:GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
-
保存並關閉文件。
-
更新 GRUB。
$ sudo update-grub
-
重啓你的系統。
開啓 UFW 轉發
如果你在Docker宿主機上使用 UFW (簡單的防火牆),你需要一些額外的配置。Docker 使用一個網橋去管理容器的網絡。默認情況下, UFW 負責下發所有轉發鏈路。因此,當Docker 在UFW 管理模式下工作時,你必須爲Docker設置適當的UFW轉發策略。
而且,UFW的默認設置會拒絕所有輸入鏈路。如果你想讓來自其他主機訪問容器端口的請求能夠“觸摸“到你的容器。如果你啓用了TLS ,Docker 端口默認是2376
或 2375
且沒有加密。默認情況下,Docker
的TLS沒有啓動。
配置 UFW 允許輸入連接到 Docker 端口上:
-
使用用戶的
sudo
權限登錄到系統。 -
覈實 UFW 是否已經安裝和被開啓。
$ sudo ufw status
-
打開
/etc/default/ufw
文件。$ sudo nano /etc/default/ufw
-
設置
DEFAULT_FORWARD_POLICY
策略如下:DEFAULT_FORWARD_POLICY="ACCEPT"
-
保存並關閉文件。
-
重載 UFW 使配置生效。
$ sudo ufw reload
-
允許輸入連接到 Docker 端口上。
$ sudo ufw allow 2375/tcp
爲 Docker 配置一個DNS服務
Ubuntu 或 Ubuntu 衍生的桌面系統通常使用 127.0.0.1
作爲默認的 nameserver
在 /etc/resolv.conf
文件裏。網絡管理器會設置 dnsmasq
去使用連接真實的DNS
服務並設置 nameserver 127.0.0.1
到 /etc/resolv.conf
。
當使用上面的配置去啓動容器,會得到如下警告信息:
WARNING: Local (127.0.0.1) DNS resolver found in resolv.conf and containers
can't use it. Using default external servers : [8.8.8.8 8.8.4.4]
出現這個警告,是因爲Docker 容器沒有使用本地的 DNS 域名服務。而是,默認使用了一個外部的域名服務。
爲了避免出現這樣的警告,你需要指定一個DNS服務給Docker容器。或者,你可以在網絡管理器裏禁用 dnsmasq
。但是,這樣做會導致DNS解析某些網絡時變慢。
爲Docker指定一個DNS 服務:
-
使用用戶的
sudo
權限登錄到你的Ubuntu上。 -
打開
/etc/default/docker
文件。$ sudo nano /etc/default/docker
-
爲Docker添加如下設置:
DOCKER_OPTS="--dns 8.8.8.8"
將
8.8.8.8
替換成一個本地的 DNS 服務,諸如192.168.1.1
。你也可以指定多個 DNS 服務,用空格分把它們隔開。例如:--dns 8.8.8.8 --dns 192.168.1.1
警告:如果你正在一個筆記本上做這樣的操作,且你的電腦需要連接到不同的網絡,確保選擇一個公共的DNS服務。
-
保存並關閉文件。
-
重啓Docker daemon(守護進程)。
$ sudo restart docker
或者,選擇前面的方法,禁用 dnsmasq
(這樣會讓你的網絡變慢)。
-
打開
/etc/NetworkManager/NetworkManager.conf
文件。$ sudo nano /etc/NetworkManager/NetworkManager.conf
-
註釋掉
dns=dsnmasq
這行內容:dns=dnsmasq
-
保存並關閉文件。
-
重啓網絡管理器和Docker。
$ sudo restart network-manager $ sudo restart docker
設置 Docker 開機啓動
Ubuntu 在 15.04
及以上版本,使用了 systemd
作爲它的引導和服務管理器,而 14.10
以下版本使用 upstart
。
15.04
及以上版本,如下設置:
$ sudo systemctl enable docker
至於14.10
及以下版本,在安裝的時候自動設置 upstart
讓Docker
daemon開機啓動。
升級 Docker
使用 apt-get
安裝最新的版本:
$ apt-get upgrade docker-engine
卸載
使用下面指令卸載Docker:
$ sudo apt-get purge docker-engine
使用下面指令可以刪除Docker及其依賴的包:
$ sudo apt-get autoremove --purge docker-engine
上面的命令不會刪除保存本地的鏡像、容器、數據卷或用戶創建的配置文件。如果你想刪除它們,可以使用如下命令:
$ rm -rf /var/lib/docker
你必須手動刪除用戶創建的配置文件。