Ubuntu

widuuweb發表於2014-08-18

Ubuntu

Docker支援以下的ubuntu版本

  • Ubuntu Trusty 14.04 (LTS) (64-bit)
  • Ubuntu Precise 12.04 (LTS) (64-bit)
  • Ubuntu Raring 13.04 and Saucy 13.10 (64 bit)

如何你打算使用UFW防火牆,請閱讀 docker和UFW

Ubuntu Trusty 14.04 (LTS) (64-bit)

Ubuntu配置了3.13.0 linux核心和將安裝Docker 0.9.1的docker.io包,當然這些都取決於你的Ubuntu映象源。

提示:Ubuntu(和Debain)包含一個特別陳舊的KED3/GNOME2包叫docker,所以我們把這個包叫docker.io

安裝

安裝最新版本的Ubuntu包(可能不是最新的docker版本包):

$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo ln -sf /usr/bin/docker.io /usr/local/bin/docker
$ sudo sed -i '$acomplete -F _docker docker' /etc/bash_completion.d/docker.io

如果你想安裝最新版本的docker

首先,檢查你的APT系統能夠處理https的url:如果你的主機不存在/usr/lib/apt/methods/https檔案,請先安裝apt-transport-https包

[ -e /usr/lib/apt/methods/https ] || {
  apt-get update
  apt-get install apt-transport-https
}

然後,新增docker映象祕鑰到你的本地祕鑰庫.

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

新增Docker映象新增你的apt軟體源,更新和安裝lxc-docker包。 你可能會受到一個警告資訊,這個包不可信,輸入yes繼續安裝。

$ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker

提示: 這還有一個簡單的curl指令碼來協助你完成這一工作。

$ curl -s https://get.docker.io/ubuntu/ | sudo sh

來確認它是否正常工作:

$ sudo docker run -i -t ubuntu /bin/bash

上邊的命令會自動下載ubuntu映象,並且會在容器內執行bash

Ubuntu Precise 12.04 (LTS) (64-bit)

依賴條件

Linux kernel 3.8

由於LXC存在的bug問題,docker最好的工作環境是在3.8核心基礎上。但是12.04使用的是3.2核心,所以我們需要升級它。安裝附帶AUFS的核心需要遵循以下步驟。我們需要包含通用的標頭檔案取決於啟用的包,像ZFS和VirtualBox guest additions。如果你的"precise"核心中沒有安裝這些標頭檔案,這時候你可以在"raring"核心跳過這些標頭檔案。如果你不確定的時候包含這些是比較安全的。

# install the backported kernel
$ sudo apt-get update
$ sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring

# reboot
$ sudo reboot

安裝

警告:這些指令在0.6版本的時候就已經改變了,如果你要從早期版本升級,你需要重新安裝他們。

Docker作為一個Debain包,安裝起來比較簡單,如果你不在美國請選擇映象源,其它映象源的Debain包安裝起來也許會更快(譬如我們使用俄羅斯的映象)。

首先,檢查你的APT系統能夠處理https的url:如果你的主機不存在/usr/lib/apt/methods/https檔案,請先安裝apt-transport-https包

[ -e /usr/lib/apt/methods/https ] || {
  apt-get update
  apt-get install apt-transport-https
}

然後,新增docker映象祕鑰到你的本地祕鑰庫.

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

新增Docker映象新增你的apt軟體源,更新和安裝lxc-docker包。 你可能會受到一個警告資訊,這個包不可信,輸入yes繼續安裝。

$ sudo sh -c "echo deb https://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker

提示: 這還有一個簡單的curl指令碼來協助你完成這一工作。

$ curl -s https://get.docker.io/ubuntu/ | sudo sh

來確認它是否正常工作:

$ sudo docker run -i -t ubuntu /bin/bash

上邊的命令會自動下載ubuntu映象,並且會在容器內執行bash,輸入exit來退出。

現在!可以檢視使用者指南。

Ubuntu Raring 13.04 and Saucy 13.10 (64 bit)

這些指令可以再Ubuntu 13.04和13.10上使用

依賴條件

可選AUFS檔案系統支援

Ubuntu Raring已經安裝好了3.8核心,所以我們不需要安裝它。然而,不是所有的系統都支援AUFS系統。在版本0.7上AUFS是可選的,它作為一個驅動程式,我們建議使用它。

為了確保安裝AUFS,執行以下命令:

$ sudo apt-get update
$ sudo apt-get install linux-image-extra-`uname -r`

安裝

Docker作為一個Debain包,安裝起來比較簡單

警告:這些指令在0.6版本的時候就已經改變了,如果你要從早期版本升級,你需要重新安裝他們。

首先,新增docker映象祕鑰到你的本地祕鑰庫.

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9

新增docker映象新增到你的apt軟體源,升級和安裝lxc-docker包。

$ sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker

現在下載ubuntu映象執行,確認是否正常工作

$ sudo docker run -i -t ubuntu /bin/bash

輸入exit退出

好!現在你可以去檢視使用者指南了。

不使用root執行

docker程式一般來說預設用root使用者執行,從Docker 0.5.2開始,docker程式繫結unix socket來代替TCP埠。預設情況下使用者root來管理unix socket,但是你也可以使用sudo來使用。

從0.5.3版本開始,如果你(你安裝的docker)建立一個叫docker的unix群組,並且在群組中新增使用者。當程式啟動的時候,docker群組將有docker程式unix socket的讀/寫使用權。docker程式必須使用root使用者執行,但是當使用docker群組的一個使用者來執行docker客戶端的時候,你不需要在命令前新增sudo,從docker 0.9.0版本開始你可以使用-G標記指定使用者組。

警告:docker使用者組(或者用-G指定的使用者組)和root等效,

舉例

# Add the docker group if it doesn't already exist.
$ sudo groupadd docker

# Add the connected user "${USER}" to the docker group.
# Change the user name to match your preferred user.
# You may have to logout and log back in again for
# this to take effect.
$ sudo gpasswd -a ${USER} docker

# Restart the Docker daemon.
# If you are in Ubuntu 14.04, use docker.io instead of docker
$ sudo service docker restart

升級

使用apt-get指令來安裝最新版本的docker

# update your sources list
$ sudo apt-get update

# install the latest
$ sudo apt-get install lxc-docker

記憶體和交換空間

如果你想使用記憶體和交換空間,你必須在命令列中新增如下的核心引數:

cgroup_enable=memory swapaccount=1

系統上使用GRUB(ubuntu預設使用GRUB),你可以編輯/etc/default/grub這個檔案,找到GRUB_CMDLINE_LINUX,像如下

GRUB_CMDLINE_LINUX=""

並且替換成

GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"

再執行sudo update-grub並且重啟

這些引數將會使你擺脫如下的警告資訊:

WARNING: Your kernel does not support cgroup swap limit.
WARNING: Your kernel does not support swap limit capabilities. Limitation discarded.

故障排除

在Linux Mint,cgroup-lite預設沒有被安裝,在docker正常工作之前,你可以通過如下的方式安裝:

$ sudo apt-get update && sudo apt-get install cgroup-lite

Docker and UFW

docker使用橋接的方式來管理網路,預設情況下,UFW會阻止所有的流量轉發。你需要允許UFW的轉發:

$ sudo nano /etc/default/ufw

# Change:
# DEFAULT_FORWARD_POLICY="DROP"
# to
DEFAULT_FORWARD_POLICY="ACCEPT"

重新載入UFW

$ sudo ufw reload

UFW的預設規則是阻止了所有的流入流量。如果你希望能夠能從另外一臺主機連同你的容器,那麼就應該允許docker的預設埠(預設2375)的所有連線。

$ sudo ufw allow 2375/tcp

docker的本地DNS警告

正在執行Ubuntu或者Ubuntu的衍生系統將使用127.0.0.1作為/etc/resolv.conf的預設域名伺服器。NetworkManager設定dnsmasq使用真實的dns伺服器連線,並且設定 /etc/resolv.conf的域名服務為127.0.0.1。

當你啟動容器的時候,使用者將會看到如下的警告:

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]

顯示這個的原因是因為容器不能使用本地的dns伺服器,並且docker使用的是預設的外部域名伺服器。

我們可以為docker程式指定一個DNS伺服器來使其正常工作

$ sudo nano /etc/default/docker
---
# Add:
DOCKER_OPTS="--dns 8.8.8.8"
# 8.8.8.8 could be replaced with a local DNS server, such as 192.168.1.1
# multiple DNS servers can be specified: --dns 8.8.8.8 --dns 192.168.1.1

重啟docker程式

$ sudo restart docker

警告:如果你使用你的要連線不同的網路,請使用一個公共的DNS伺服器。

另外一個解決方案就是禁用NetworkManager的dnsmasq,步驟如下:

$ sudo nano /etc/NetworkManager/NetworkManager.conf
----
# 修改:
dns=dnsmasq
# 變成
#dns=dnsmasq

重啟NetworkManager和docker

$ sudo restart network-manager
$ sudo restart docker

警告:這可能使dns解析速度慢

Mirrors

你應該ping get.docker.io 比較映象的延遲,選擇最好的一個。

Yandex

Yandex是一個俄羅斯的映象源,其中的docker包每六個小時更新一次,用http://mirror.yandex.ru/mirrors/docker/來替代http://get.docker.io/ubuntu,如下:

$ sudo sh -c "echo deb http://mirror.yandex.ru/mirrors/docker/ docker main\
> /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker

相關文章