閱讀284 返回首頁    go 阿裏雲 go 技術社區[雲棲]


《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic構建和部署》——第2章 搭建容器運行時環境 2.1標準Linux係統的Docker配置

本節書摘來自異步社區《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic構建和部署》一書中的第2章,第2.1節,作者: 【美】Christopher Negus(克裏斯托弗•尼格斯)著,更多章節內容可以訪問雲棲社區“異步社區”公眾號查看

第2章 搭建容器運行時環境

自構建之初,Docker就運行在Linux之上。但與虛擬機不同,虛擬機包含了整個操作係統,而容器本身隻是依靠單獨的操作係統為其提供運行環境。這就是說,我們有諸多可選的方式來創建Docker的工作環境。具體方式包括以下這些。

標準Linux:多個主要的Linux發行版已將Docker打包在其中。如需最新的Docker特性,隻要安裝相應Linux發行版的最新版本即可。切記,Docker與操作係統有著密切的聯係,因此,Linux的早期版本可能並不包含Docker運行所需的全部特性。本書將介紹在流行的Linux發行版(如Ubuntu、Fedora和Red Hat企業版)上搭建Docker的方法。至於其他Linux係統上的Docker安裝,本書會提供相關說明的鏈接。
Microsoft Windows、Mac OS X或其他通過虛擬機運行的方式:Docker不能直接在Windows或Mac係統上運行。但是,如果Windows或Mac係統的版本能夠運行虛擬機,並且硬件也足以支撐虛擬機的運行,就能夠安裝Linux虛擬機並通過它來運行Docker。但要注意,如果計算機的處理能力和RAM不夠強勁,那麼這種運行Docker的方式體驗並不是最好的。但是,如果你擁有最新的Windows或Mac係統並且硬件夠用,Docker應該可以很好地運行。
容器專用Linux:運行容器並不需要完整的桌麵或服務器Linux係統。實際上,容器原本就是為了容納與其一同運行所需的軟件,因此底層的Linux係統可以非常輕量級。像Project Atomic和CoreOS這樣的Linux發行版尤其適合為容器提供運行時環境。你可能想在容器開發階段使用標準Linux,這樣可以非常容易獲取所需的開發工具。之後使用Project Atomic或CoreOS來部署這些容器——要麼直接部署在硬件上,要麼部署在亞馬遜的EC2或穀歌雲平台(Google Cloud Platform)這樣的雲環境中。
本章將介紹如何按剛剛描述的那樣準備計算機係統以運行Docker容器。一旦係統準備就緒,就可以跟隨本書之後的示例進行容器的運行、管理、部署和編排。

2.1 標準Linux係統的Docker配置

如果剛剛開始接觸Linux,建議安裝一個帶桌麵的標準Linux發行版(帶桌麵的服務器、桌麵係統或者是工作站)。如此,在創建和運行容器的過程中,就有一整套開發、調試和監控的工具。當準備長久運行容器時,可以考慮使用Project Atomic或CoreOS來部署容器。

在Linux中使用Docker,首要的是包含了docker命令的軟件包。在Ubuntu中,包含docker命令的軟件包叫docker.io。在Fedora中,這個軟件包之前叫docker-io,這是為了避免與另一個稱為docker的軟件包衝突——那個軟件包提供了應用程序在桌麵停駐的特性。目前,最新的Fedora已將包含docker命令的軟件包命名為docker。在Red Hat企業版中,Docker容器的軟件包就直接稱為docker。

2.1.1 Ubuntu的Docker配置
在Linux愛好者中,Ubuntu是一款流行的Linux發行版。除提供標準桌麵係統外,Ubuntu也有輕量級桌麵係統(如Xubuntu和Lubuntu)以及專門用於教育和多媒體的係統。雖然Ubuntu大約每6個月就會發布新版本,其中多數隻會得到9個月的支持,但有些發布是長期支持(Long Term Support,LTS)版本,它們將得到5年的支持。

為了在Ubuntu中使用Docker,要從Ubuntu最新的LTS版本著手。我使用的是Ubuntu 14.04桌麵版(最新的LTS版本)。請訪問如下鏈接,獲取Ubuntu14.04桌麵係統的live版或安裝媒介以及相關說明。

下載Ubuntu。訪問www.ubuntu.com/download/destop,下載與你的計算機匹配的ISO映像文件。對於多數新計算機,應該使用64位PC版,而對於比較老的計算機或者配置低的計算機,請下載32位的ISO映像文件。
安裝Ubuntu。參考“安裝Ubuntu 14.04 LTS”(www.ubuntu.com/download/desktop/ install-ubuntu-desktop)中的說明來安裝該版本的Ubuntu。
1.在Ubuntu中安裝Docker(docker.io軟件包)
一旦安裝好Ubuntu並準備繼續,請以係統所有者的身份登錄係統,並通過以下步驟讓docker.io服務運行起來。

(1)更新軟件包列表。在開始安裝Docker前,需要先更新Ubuntu的軟件包列表。

$ sudo apt-get update
...
Reading package lists... Done

(2)安裝docker.io軟件包。在Ubuntu中,Docker是由docker.io軟件包提供。安裝該軟件包時,其依賴的軟件包也會同時安裝:

$ sudo apt-get install docker.io
(3)啟動docker.io服務。Docker服務應該是自動啟動的。為了確認其已啟動,鍵入下麵的命令:

$ sudo service docker.io status
docker.io start/running, process 1236

輸出顯示docker.io服務已經運行。接下來要做的是研究一下docker.io軟件包的內容。

2.探查Ubuntu的docker.io軟件包
為了對構成Docker的組件有切身的體會,我們先看看docker.io軟件包的內容。使用下麵的命令列出docker.io軟件包的內容:

$ sudo dpkg-query -L docker.io | less
/usr
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/docker.io.1.gz
/usr/share/docker.io
/usr/share/docker.io/contrib
/usr/share/docker.io/contrib/mkimage-alpine.sh
...
/usr/share/doc
/usr/share/doc/docker.io
/usr/share/doc/docker.io/README.Debian
/usr/share/zsh
/usr/share/zsh/vendor-completions
/usr/share/zsh/vendor-completions/_docker.io
/usr/bin
/usr/bin/docker
/usr/lib
/usr/lib/docker.io
/usr/lib/docker.io/dockerinit
/etc
/etc/bash_completion.d
/etc/bash_completion.d/docker.io
/etc/init
/etc/init/docker.io.conf
/etc/init.d
/etc/init.d/docker.io
/etc/default
/etc/default/docker.io
/lib
/lib/udev
/lib/udev/rules.d
/lib/udev/rules.d/80-docker.io.rules docker-io
/lib/systemd
/lib/systemd/system
/lib/systemd/system/docker.io.service
/usr/bin/docker.io

docker.io軟件包自帶的文檔中包含了一個描述docker命令的聯機幫助頁(鍵入man docker來查看它)以及README文件,這些文件位於/usr/share/doc/docker.io目錄中。到讀者閱讀本書時,docker.io軟件包應該會包含更多的聯機幫助頁。

/usr/share/docker.io/contrib目錄下存放了各種腳本,有些可以用來創建最小的文件係統,而另一些則可以完成其他任務,如創建基礎Docker映像文件。這個目錄下的各個子目錄中存放了用於構建、導入和運行Docker映像的Dockerfile文件。

docker命令提供了Tab命令補全。用於bash的Tab命令補全文件(/etc/bash_completion.d/ docker)和zsh的Tab命令補全文件(/usr/share/zsh/vendor-completions/_docker.io)也來自docker.io軟件包。

docker.io軟件包提供的主要命令就是docker(/usr/bin/docker)。docker命令用來創建、操作和維護Docker映像文件和容器。這個docker命令還作為守護進程運行,來提供Docker服務。

對於Docker服務,docker.io軟件包中剩餘的多數文件與Docker服務的啟動方式相關。無論你的係統是使用Upstart(init)還是systemd來初始化操作係統,對應的Docker服務啟動文件都已包含在docker.io軟件包中。

目錄/var/lib/docker並不是docker.io軟件包的一部分,但在安裝Docker時會創建該目錄。請密切關注該目錄。當創建docker映像文件和容器時,它們會被保存在該目錄結構中,因此,要確保不要耗盡其所在的磁盤空間。

此時,Ubuntu已經為使用Docker做好了準備。如果想開始使用Docker,可以直接跳到第3章。

2.1.2 Fedora的Docker配置
Fedora是Red Hat公司讚助的免費、前沿的Linux發行版。Fedora大約每6個月發布一次新版本,其被當作新軟件的實驗場。

許多人在工作中使用Red Hat企業版Linux,他們會在自己的筆記本或家裏的台式機上安裝Fedora。這是因為Fedora不僅提供了軟件開發工具,以及一係列服務器和係統管理軟件,還提供了大量桌麵工具和有趣的東西(如遊戲)——那些你會為自己的個人計算機安裝的軟件。

如果打算在Fedora上使用Docker,建議安裝最新的Fedora。我就下載並安裝了Fedora workstation live ISO。Docker並不需要桌麵係統,因此可以隻安裝一個基本係統,然後完全使用命令行來工作。

要在Fedora中使用Docker,需要先安裝Fedora和docker軟件包。安裝完成後,就能夠啟動Docker服務,並開始獲取Docker映像文件,構建自己的映像文件,以及管理由這些映像文件生成的容器。

要獲取最新的Fedora Workstation live版或安裝媒介,以及相關說明,訪問如下鏈接。

下載Fedora。訪問https://getfedora.org/,選擇Workstation。點擊“馬上下載”(Download Now)按鈕,之後選擇64位Fedora Workstation安裝介質並點擊“下載”(Download)按鈕開始下載。(如果你的計算機是32位的,或者你需要不同類型的安裝,如服務器或雲,請選擇其他映像文件。)
安裝Fedora。參考安裝指南來幫助安裝Fedora(如果有最新的Fedora可用,請使用相應的安裝指南):https://docs.fedoraproject.org/en-US/Fedora/22/html/Installation_Guide/
1.在Fedora中安裝Docker(docker軟件包)
Fedora安裝好後,登錄係統。使用root用戶或sudo來運行下麵的命令。在安裝Docker前,首先作為root用戶更新Fedora軟件(yum update),然後使用yum install來安裝docker軟件包(在早前的Fedora中,是docker.io軟件包),並按如下方法啟動Docker服務(另一個選擇是,在最新的Fedora發行版中,可以使用dnf命令代替yum來安裝軟件)。

(1)更新軟件包。運行下麵的命令來安裝最新的Fedora軟件:

# yum update
(2)安裝docker軟件包。早期版本的Fedora中,Docker是由docker.io軟件包提供的。現在,這個軟件包可能已經叫docker了。按下麵的方法安裝該軟件包,其依賴的軟件包也會一並安裝:

# yum install docker
(3)啟動Docker服務。Fedora並不會自動啟動Docker服務。輸入下麵的命令,啟用Docker服務並立即啟動它:

# systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/ docker.
service to /usr/lib/systemd/system/docker.service.
# systemctl start docker.service

(4)檢查Docker服務的狀態。輸入如下命令,確保Docker服務已運行:

# systemctl status docker.service 
  docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled) 
     Active: active (running) since Sun 2015-05-17 10:05:32 EDT; 2min ago
      Docs: https://docs.docker.com
  Main PID: 3405 (docker)
    CGroup: /system.slice/docker.service
            └─3405 /usr/bin/docker -d --selinux-enabled

輸出顯示docker.service已經啟用並處於活動狀態。實際的服務由docker命令組成(/usr/bin/docker),以守護進程的方式運行(-d),並且啟用了SELinux(--selinux-enabled)。接下來,看一看docker軟件包的內容。

2.探查Fedora的docker軟件包
安裝docker後,在docker軟件包(或docker.io軟件包)上執行rpm -ql命令來查看該軟件包的內容。這能讓你初步了解如何使用Docker:

# rpm -ql docker | less
/etc/docker
/etc/sysconfig/docker
/etc/sysconfig/docker-network
/etc/sysconfig/docker-storage
/etc/udev/rules.d/80-docker.rules
/usr/bin/docker
/usr/bin/docker-storage-setup
/usr/lib/systemd/system/docker.service
/usr/libexec/docker
/usr/libexec/docker/dockerinit
/usr/share/bash-completion/completions/docker
... 
/usr/share/doc/docker/README.md
/usr/share/man/man1/docker-attach.1.gz
/usr/share/man/man1/docker-build.1.gz
/usr/share/man/man1/docker-commit.1.gz
...

多數文件與Ubuntu的docker.io軟件包中的文件相同。有些文件用來啟動Docker服務(最新的Fedora發行版僅使用systemd),也有docker命令自身的文件(/usr/bin/docker)。

同樣,docker軟件包提供了一個用於Tab命令補全的文件,當在bash shell中使用docker命令時,它可以自動補全所輸入的命令。能夠補全的內容包括docker的子命令和選項、容器和鏡像的名字及ID,以及鏡像庫的名字和標簽。

下麵介紹docker軟件包中一些特定於Fedora係統的文件。

/etc/sysconfig/docker:當docker命令作為服務的守護進程來運行時,這個文件用來收集提供給docker命令的選項。默認情況下,僅增加--selinux-enabled選項來啟用針對Docker的SELinux支持。該文件中的一項配置(DOCKERCERT PATH)將啟動Docker服務所需的密鑰文件存放目錄指定到/etc/docker。
/etc/sysconfi/docker-network:該文件用來收集傳給Docker服務的網絡選項。
/etc/sysconfig/docker-storage:該文件用來改變Docker服務存儲數據的方式。默認會使用掛載到/var/lib/docker目錄的一個稀疏的回送(loopback)文件。可以選擇使用原始存儲設備來保存元數據和數據。請閱讀該文件來了解如何進行設置。按這種方式使用原始存儲設備不但能夠提高性能,而且可以擺脫回送文件100 GB的最大存儲限製。
/etc/udev/rules.d/80-docker.rules:該文件用來告知udev服務配置Docker服務所使用的設備映射文件,Docker服務使用該設備映射文件來訪問容器所需的宿主機特性。(Ubuntu的Docker軟件包含有類似的udev文件。)
/usr/share/doc:在/usr/share/doc/docker目錄中存放有來自Docker項目的文檔。這既有軟件變更和軟件許可方麵的信息,也有關於項目自身的README文件。
/usr/share/man文檔:docker命令的聯機幫助文檔分散在多個docker頁中,這些聯機幫助文檔按子命令組織,存儲在第1部分(man1)。例如,要查看docker命令的build選項(docker build),隻要輸入man docker-build命令即可。第5部分隻有一個聯機幫助頁,它描述了用來構建Docker鏡像的Dockerfile的結構。(輸入man Dockerfile來查看該文件。)
docker軟件包已安裝就位,可以直接跳到第3章開始使用docker命令。

2.1.3 Red Hat Enterprise Linux的Docker配置
Red Hat Enterprise Linux(RHEL)是由Red Hat製作的基於訂閱的Linux發行版,其旨在提供一個經過測試的、穩定的Linux發行版,並結合了來自Red Hat的不同級別的客戶支持。在安全性和穩定性至關重要的情況下,整個應用程序開發生命周期中的係統通常都會使用Red Hat Enterprise Linux,這也包括生產環境的部署。

與Fedora類似,Red Hat Enterprise Linux是基於RPM的,但安裝Red Hat Enterprise Linux和Docker時有些步驟與Fedora不同。

在下載和安裝Red Hat Enterprise Linux之前,要確保你擁有有效的訂閱或已報名獲取了用於評估的訂閱。訪問下麵的鏈接來了解如何下載和安裝RHEL。

下載RHEL。訪問https://access.redhat.com/downloads/,點擊Red Hat Enterprise Linux最右側的按鈕,並在彈出的菜單中選擇Download Latest(Server),或者點擊Red Hat Enterprise Linux鏈接並選擇適合你的安裝介質。如果網站提示你登錄,而你尚未獲得Red Hat的訂閱,請點擊Evaluation(評估)按鈕來報名獲取評估訂閱。要注意的是,你需要軟件的RHEL服務器版,因為其他版本RHEL不包含Docker。
安裝RHEL。訪問Red Hat Enterprise Linux文檔頁麵(https://access.redhat.com/ documentation/en/red-hat-enterprise-linux/),選擇Installation Guide(安裝指南)。安裝指南介紹了如何啟動剛下載的安裝媒介,以及各種不同的軟件安裝方法。
一旦安裝好RHEL,需要注冊係統、安裝docker,並啟動Docker服務,具體描述如下。

1.在Red Hat Enterprise Linux中安裝Docker(docker軟件包)
假設你已有Red Had Enterprise Linux的訂閱,並有Red Hat客戶門戶(customer portal)的賬號,按照下列步驟就能訂閱係統並為其添加docker。

(1)注冊和訂閱RHEL。使用訂閱管理器(subscription manager)來啟用Red Hat訂閱和獲取docker軟件包所要用的軟件庫,以及之後要用到的其他相關軟件包。執行下列命令,注意替換為你的Red Hat用戶名,並(在提示時)輸入密碼:

# subscription-manager register --username=rhnuser --auto-attach
Password: 
# subscription-manager repos --enable=rhel-7-server-extras-rpms
# subscription-manager repos --enable=rhel-7-server-optional-rpms

(2)更新軟件包。RHEL 7係統取得適當的資格後,運行如下命令來將所有已安裝的軟件包更新到最新版,並重啟係統:

# yum update
# reboot

(3)安裝docker。係統重啟後,鍵入下麵的命令來安裝docker軟件包:

# yum install docker
(4)啟動並啟用Docker服務。Docker安裝後,隻要啟動並啟用Docker服務就可以開始使用Docker了。在RHEL 7中,輸入下麵的命令來啟動和啟用Docker服務:

# systemctl start docker.service
# systemctl enable docker.service
# systemctl status docker.service
docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled) 
   Active: active (running) since Sun 2015-05-17 16:52:33 EDT; 8s ago
     Docs: https://docs.docker.com
 Main PID: 32147 (docker) 
   CGroup: /system.slice/docker.service
           └─32147 /usr/bin/docker -d --selinux-enabled \
                   --add-registry registry.access.redhat.com

通過這個輸出,可以看到Docker服務已啟用並處於活動狀態。提供服務的docker命令(/usr/bin/docker)啟動時接收了這些參數,作為守護進程啟動執行(-d),啟用SELinux,並添加了docker用來搜索的容器registry(這裏是registry.access.redhat.com)。

現在,docker軟件包已經安裝好,Docker服務也已經運行,接下來熟悉一下RHEL的docker軟件包的內容。

2.探查RHEL的docker軟件包
運行下麵的命令查看docker軟件包的內容:

# rpm -ql docker
/etc/docker
/etc/docker/certs.d
/etc/docker/certs.d/redhat.com
/etc/docker/certs.d/redhat.com/redhat-ca.crt
/etc/docker/certs.d/redhat.io
/etc/docker/certs.d/redhat.io/redhat-ca.crt
... 
/usr/share/man/man1/docker-attach.1.gz
/usr/share/man/man1/docker-build.1.gz
/usr/share/man/man1/docker-commit.1.gz
... 
/usr/share/man/man5/Dockerfile.5.gz
/usr/share/rhel
/usr/share/rhel/secrets
/usr/share/rhel/secrets/etc-pki-entitlement
/usr/share/rhel/secrets/rhel7.repo
/usr/share/rhel/secrets/rhsm
... 
/usr/share/vim/vimfiles/doc
/usr/share/vim/vimfiles/doc/dockerfile.txt
/usr/share/vim/vimfiles/ftdetect
/usr/share/vim/vimfiles/ftdetect/dockerfile.vim

RHEL的docker軟件包與Fedora的docker軟件包幾乎完全相同,因此,可以參考之前在Fedora中安裝docker軟件包的內容,來了解這些組件的描述。這裏隻描述了特定於RHEL的docker軟件包組件。

Certificates:RHEL的docker軟件包已做過一些配置,它並未使用Docker Hub作為其registry。實際上,對於官方的RHEL容器鏡像,Red Hat使用了自己的registry。目錄/etc/docker/certs.d中保存了Docker服務使用的證書,Docker服務使用這些證書來確保其在與Red Hat的registry進行通信。
Secrets:目錄/usr/share/rhel/secrets中存放的文件將會複製到係統運行的容器中。特別是,RHEL的docker軟件包會將容器使用Red Hat的訂閱管理所需要的文件放在secrets目錄下。這些與訂閱管理相關的文件使容器可以使用宿主機的訂閱權限來安裝和管理容器自己的RPM包,而無需消耗額外的訂閱。
vimfiles:當使用vim命令來編輯Dockerfile時,目錄/usr/share/vim/vimfiles/中的文件提供了語法高亮。這有助於Dockerfile文件的創建和編輯。
2.1.4 其他操作係統的Docker配置
之前提到過,Docker不僅僅可以用於上麵介紹的這些操作係統。如需在其他操作係統或雲環境中安裝Docker,參考下麵的Docker安裝過程說明。

在Mac OS X上安裝Docker。請使用Mac OS X 10.6或更新的版本,如下安裝過程使用了包含Boot2Docker工具(https://github.com/boot2docker/boot2docker/releases)的ISO鏡像,通過該工具,其在Mac上創建了一個運行在VirtualBox中的輕量級Linux虛擬機:
https://docs.docker.com/installation/mac/
在Microsoft Windows上安裝Docker。對於使用Windows 7.1或8(以及其他版本)的係統,如果你的計算機支持硬件虛擬化,可以使用下麵鏈接給出的安裝過程。重申一下,Docker隻能在Linux中運行,因此這個安裝過程要使用Boot2Docker工具創建一個Linux虛擬機,而你可以用這個虛擬機來嚐試Docker:
https://docs.docker.com/installation/windows/
在CentOS上安裝Docker。CentOS上運行Docker與Red Hat Enterprise Linux差不多,但無需支付訂閱費用。需要注意的是,CentOS並未提供任何保障,而且會在特性和安全補丁方麵落後於RHEL。參考下麵的鏈接在CentOS上安裝Docker:
https://docs.docker.com/installation/centos/
在Debian上安裝Docker。參考下麵的說明在Debian GNU/Linux係統上安裝Docker:
https://docs.docker.com/installation/debian/
在SUSE上安裝Docker。下麵的說明描述了在SUSE上安裝Docker的過程,既包括openSUSE,也包括SUSE Linux Enterprise:
https://docs.docker.com/installation/SUSE/
如果這裏沒有涉及你使用的操作係統,請訪問Docker的安裝頁麵(https://docs.docker. com/installation/),了解在其他操作係統上安裝Docker的相關說明。如果你打算親自動手為自己的操作係統組裝Docker,請參考Docker的二進製文檔頁麵(https://docs.docker.com/ installation/binaries/)。

還有一類Linux係統的Docker使用尚未涉及,這就是專為運行容器而設計的Linux係統。接下來將介紹如何搭建Project Atomic和CoreOS操作係統,使其提供一個容器專用的運行時環境。

最後更新:2017-05-31 17:01:25

  上一篇:go  《Docker容器:利用Kubernetes、Flannel、Cockpit和Atomic構建和部署》——2.2 容器式Linux係統的Docker配置
  下一篇:go  智慧醫療市場前景廣闊 各大企業正加緊布局