在 Ubuntu 中用 Docker 管理 Linux Container 容器

發表於2014-06-03

當前,完全硬體虛擬化技術(KVM、Xen、Hyper-V 等)能在一個物理主機上很好地執行多個互相獨立的作業系統,但這也帶來一些問題:效能不佳,資源浪費,系統反應遲緩等。有時候對使用者來說,完全的硬體虛擬化並不是最好的選擇。

一種替代方案是使用輕量級虛擬化技術 —— 所謂的 LinuX Container 容器 (LXC),它提供的是系統級虛擬化。與跑虛擬機器相比,LXC 可以在一個輕量級沙箱容器裡面跑多個 Linux 作業系統。當你需要設定一些易於克隆的開發環境、測試環境,或想在安全沙盒裡安裝應用時,LXC 就非常有用了。

Docker 是一個開源工具,可以讓使用者方便地佈署 Linux Container 容器。Docker 很快變成了 container 技術的非官方標準,從而被 UbuntuRed Hat等眾多發行版吸收進去。

本教程中我會向你們演示如何在 Ubuntu 14.04 中使用 Docker 來管理 LXC。需要注意的是,本教程的一些內容可能會與其他 Ubuntu 版本下的操作會稍微有些出入。

當前Ubuntu 系統下的 Docker 的安裝包只提供64位。如果你想執行32位的 Docker,你需要使用原始碼編譯32位 Docker 工具

安裝 Docker

透過 apt-get 安裝 Docker 簡直是小菜一碟。

$ sudo apt-get install docker.io

如果你不是 root 組的使用者,你可以把自己加入到 docker 使用者組。下面的命令可以讓沒有 root 許可權的使用者使用 Docker:

$ sudo usermod -a -G docker $USER

重新登入,以便讓你的使用者組許可權生效。

下一步是編輯 Docker 配置檔案,確定 Docker 可執行檔案的路徑:

$ sudo vi /etc/default/docker.io

DOCKER="/usr/bin/docker.io"

重啟 Docker 服務:

$ sudo service docker.io restart

管理 Docker Container 容器

如果你想在新的 Docker 容器下建立一個新的 Ubuntu 作業系統,你首先需要 pull 一個 Ubuntu 的 Docker 映象。下面的命令可以透過網路下載 Docker 映象:

$ docker pull ubuntu

你可以使用下面的命令啟動 Docker 裡面的 Ubuntu 系統。最後的引數“/bin/bash”表示一旦容器啟動,首先會執行簡單的 bash。

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

上面的命令會立即啟動 Ubuntu container 容器(這是一個完美的容器!),然後它會提供一個 shell 提示符執行環境給你。現在開始你可以透過這個沙箱環境訪問一個完整的 Ubuntu 系統了。

輸入“exit”命令退出 Docker 容器。

你也可以用下面的命令進入不同的系統。比如 Fedora:

$ docker.io run -i -t fedora /bin/bash

如果系統中還不存在 Fedora Docker 映象,這個命令會自動下載它,然後啟動這個 Fedora 的 Docker 容器。

如果你想要開啟指定版本的系統,比如 Ubuntu 13.04,你可以使用下面的命令:

$ docker.io run -i -t ubuntu:13.04 /bin/bash

Container 容器網路設定

Docker 使用 Linux 橋接技術與其他容器通訊,以及連通外網。安裝完 Docker 後你應該可以看到 docker0 這個網橋,這是 Docker 預設建立的。你建立的每個容器都會透過這個網橋連線到網路。

自定義 Linux 網橋

如果你想自定義網橋,你可以執行以下步驟。你可以在這個網橋後面分配一個子網,併為這個子網分配地址。下面的命令會為 Docker 子網分配 10.0.0.0/24 地址段:

$ sudo apt-get install bridge-utils
$ sudo brctl addbr br0
$ sudo ifconfig br0 10.0.0.1 netmask 255.255.255.0

然後在 /etc/default/docker.io 檔案的 DOCKER_OPTS 變數裡新增“-b=br0”選項,並重啟 Docker 服務:

$ sudo service docker.io restart

到目前為止,任何建立的容器都會連上 br0 網橋,它們的 IP 地址會從 10.0.0.0/24 中自動分配(譯註:在10.0.0.2到10.0.0.254之間隨機分配)。

其他自定義設定

你可以透過 /etc/default/docker.io 檔案的 DOCKER_OPTS 變數設定其他一些屬性:

  • "-dns 8.8.8.8 -dns 8.8.4.4": 為容器指定 DNS 伺服器。
  • "-icc=false": 將容器與其他容器隔離出來

疑難解答

1、當你執行 docker.io 命令時,你可能會遇到以下問題:

dial unix /var/run/docker.sock: no such file or directory

這個錯誤可能是由於 Docker 後臺程式沒有啟動。檢查下 Docker 後臺程式的狀態,確認它已經處於啟動狀態:

$ sudo service docker.io status
$ sudo service docker.io start 

via: http://xmodulo.com/2014/05/manage-linux-containers-docker-ubuntu.html

譯者:bazz2 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

相關文章