1.1.1.1、Ubuntu

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 指向新的倉庫:

  1. 如果你沒有做過這樣的操作,請使用一個擁有特權的用戶登錄到Ubuntu實例。

  2. 打開一個終端窗口。

  3. 添加一個新的 gpg key。

    $ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
    
  4. 使用你喜歡的編輯器打開 /etc/apt/sources.list.d/docker.list 文件。

    如果文件不存在,就創建它。

  5. 清空文件已有的內容。

  6. 爲你的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
  7. 保存並關閉 /etc/apt/sources.list.d/docker.list 文件。

  8. 更新 apt 包索引。

    $ apt-get update
  9. 清除舊的倉庫(repo),如果它存在。

    $ apt-get purge lxc-docker*
    
  10. 覈實 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 :

  1. 在你的Ubuntu主機上打開一個終端。

  2. 更新你的包管理器。

    $ sudo apt-get update
  3. 安裝推薦的包。

    $ sudo apt-get install linux-image-extra-$(uname -r)
    
  4. 繼續並安裝 Docker。

Ubuntu Precise 12.04 (LTS)

對於 Ubuntu Precise,Docker 需要3.13 的內核版本。如果你的內核版本比這個低,你必須先升級它。 參考這個表格瞭解每個包需要的環境:

linux-image-generic-lts-trusty 通用的Linux 內核鏡像。這個內核已經內建了AUFS。這是Docker運行的必需依賴
linux-headers-generic-lts-trusty 允許諸如ZFS和VirtualBox功能增強的包。如果你還沒給你當前的內核裝這些headers,你可以跳過這些headers。如果你不確定,爲了安全期間,你應該包含這些包。
xserver-xorg-lts-trusty 在沒有Unity/Xorg的非圖像化環境裏是可選的。當Docker在圖形化環境上運行就是必須包含。

瞭解這些包更多的信息,請閱內核補丁的安裝說明,特別關注在 LTS Enablement Stack 每個版本中的第五條。
libgl1-mesa-glx-lts-trusty

升級你的內核並安裝相關的依賴包:

  1. 打開一個終端。

  2. 更新你的包管理器。

    $ sudo apt-get update
  3. 安裝必選和可選的包。

    $ sudo apt-get install linux-image-generic-lts-trusty
    

    根據你的環境,你可能需要安裝比上述表格列出更多的依賴。

  4. 重啓你的主機。

    $ sudo reboot
    
  5. 重啓之後,繼續安裝Docker。

安裝

確保你已經安裝好所有的先決依賴。之後,使用如下步驟安裝Docker:

  1. 使用一個帶有 sudo 特權的用戶登錄到你的系統上。

  2. 更新你的 apt 包索引。

    $ sudo apt-get update
  3. 安裝 Docker。.

    $ sudo apt-get install docker-engine
  4. 啓動 docker daemon。

    $ sudo service docker start
    
  5. 覈實 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 組並添加你的用戶:

  1. 使用 sudo 特權登陸到你的系統。

    這個過程裏,假定你使用 ubuntu 用戶登錄。

  2. 創建 docker 組並添加你的用戶。

    $ sudo usermod -aG docker ubuntu
    
  3. 先登出,然後再登陸。

    這樣確保你的用戶權限的正確性。

  4. 通過執行不帶 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 工具開啓上述功能,具體操作如下:

  1. 先用用戶的 sudo 權限登錄到你的Ubuntu系統。

  2. 編輯 /etc/default/grub 文件。

  3. 設置 GRUB_CMDLINE_LINUX 的值如下:

    GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
  4. 保存並關閉文件。

  5. 更新 GRUB。

    $ sudo update-grub
    
  6. 重啓你的系統。

開啓 UFW 轉發

如果你在Docker宿主機上使用 UFW (簡單的防火牆),你需要一些額外的配置。Docker 使用一個網橋去管理容器的網絡。默認情況下, UFW 負責下發所有轉發鏈路。因此,當Docker 在UFW 管理模式下工作時,你必須爲Docker設置適當的UFW轉發策略。

而且,UFW的默認設置會拒絕所有輸入鏈路。如果你想讓來自其他主機訪問容器端口的請求能夠“觸摸“到你的容器。如果你啓用了TLS ,Docker 端口默認是2376 或 2375 且沒有加密。默認情況下,Docker 的TLS沒有啓動。

配置 UFW 允許輸入連接到 Docker 端口上:

  1. 使用用戶的 sudo 權限登錄到系統。

  2. 覈實 UFW 是否已經安裝和被開啓。

    $ sudo ufw status
    
  3. 打開 /etc/default/ufw 文件。

    $ sudo nano /etc/default/ufw
  4. 設置 DEFAULT_FORWARD_POLICY 策略如下:

    DEFAULT_FORWARD_POLICY="ACCEPT"
  5. 保存並關閉文件。

  6. 重載 UFW 使配置生效。

    $ sudo ufw reload
    
  7. 允許輸入連接到 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 服務:

  1. 使用用戶的 sudo 權限登錄到你的Ubuntu上。

  2. 打開 /etc/default/docker 文件。

    $ sudo nano /etc/default/docker
  3. 爲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服務。

  4. 保存並關閉文件。

  5. 重啓Docker daemon(守護進程)。

    $ sudo restart docker

或者,選擇前面的方法,禁用 dnsmasq (這樣會讓你的網絡變慢)。

  1. 打開 /etc/NetworkManager/NetworkManager.conf 文件。

    $ sudo nano /etc/NetworkManager/NetworkManager.conf
  2. 註釋掉 dns=dsnmasq 這行內容:

    dns=dnsmasq
  3. 保存並關閉文件。

  4. 重啓網絡管理器和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

你必須手動刪除用戶創建的配置文件。


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章