在公有雲端平台部署Docker

最后更新于:2022-04-01 23:04:37

# 在公有雲端平台上安裝Docker 目前CoreOS中的Docker支援大部分的雲端平台,你可以到[http://alpha.release.core-os.net/amd64-usr/current/查看所有可佈署的VM檔案,主要的有:](http://alpha.release.core-os.net/amd64-usr/current/查看所有可佈署的VM檔案,主要的有:) - 大部分的Hypervisor(VMware, VirtualBox, Xen, QEMU, Hyper-V等) - Microsoft Azure - BrightBox - CloudSigma - CloudStack - DigitalOcean - exoScale - OpenStack/RackSpace - Vagrant - Amazon 當然大部分的IDC也可部署,如筆者自己使用的GoDaddy就可在其Ubuntu 14.04的VPS中直接安裝Docker使用,但安裝時要注意使用VPS的Linux版本,再照著不同Linux進行安裝。 有關常見雲端平台的安裝,我們會在本書稍後關於Docker叢集部署的章節有詳細說明。
';

生產環境vSphere CoreOS

最后更新于:2022-04-01 23:04:34

# 生產環境vSphere部署CoreOS 如果你要將CoreOS部署到vSphere上,由於vSphere需要對其上的每一個VM都進行嚴格的控管,因此所有在vSphere下的VM都必須安裝VMware Tools。如此一來,你就必須下載已經預先安裝好VMware Tools的CoreOS的VMware Image。 下載網址為 [coreos_production_vmware_image.vmdk.bz2](http://alpha.release.core-os.net/amd64-usr/current/coreos_production_vmware_image.vmdk.bz2)(要先解壓) [coreos_production_vmware.vmx](http://alpha.release.core-os.net/amd64-usr/current/coreos_production_vmware.vmx) 下載回來有兩個檔案,一個是`vmx`,另一個則是壓縮後的`vmdk`。使用前必須先將這個VM轉換成OVF格式,Windows/Mac下使用VMware Workstation/Fusion內建程式,Linux下則可以至VMware的官網下載OVF Tool來轉換,下載網址為 [https://developercenter.vmware.com/web/dp/tool/ovf/3.5.2](https://developercenter.vmware.com/web/dp/tool/ovf/3.5.2) 此版本的CoreOS雖預先安裝了vSphere 的VMware Tools,但預設沒有使用者帳號密碼,如果要使用,必須透過雲端工具或設定開機參數,下面就是完整的部署步驟。 _預先安裝了VMware Tools才能在開機後回報IP_ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597dcd926.png) ### 在vSphere下部署雲端版的CoreOS 1. 將下載回來的`bz2`檔案解壓,內容是一個`vmdk`檔案。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597e1eea7.png) 1. 使用VMware Workstation打開這個`vmx`。 1. 選擇`File/Export to OVF`,並且儲存在確定位置。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597e29d08.png) 1. 進入vSphere Client視窗,選擇`Deploy OVF Template`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597e37798.png) 1. 此時會出現匯入視窗,一直按「下一步」即可,最後會在vSphere的列表中出現該VM,直接啟動即可。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597e4231a.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597e5057c.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597e6063c.png) 1. 可以看到這個VM已經預設安裝好VMware Tools了。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597e72ddc.png) 1. 啟動這個VM,並且快速進入主控介面。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597e80da3.png) 1. 在還沒完全啟動前,請快速按下`e`鍵,直到啟動選項出現為止。 1. 在圖中的位置輸入`coreos.autologin`,之後按下F10重新啟動,這次就會直接進入桌面,不需要帳號密碼。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597e8b622.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597ea2726.png) 1. 在這個VMware中輸入`sudo passwd core`來建立帳號密碼,下次才可正常登入,你也可以輸入`sudo passwd root`來建立root的帳號密碼方便操作docker。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597eb68dc.png) 1. 可以從`docker version`或`docker info`查看。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597ec916e.png) 1. 一樣輸入`docker run -d --name web -p 8080:80 joshhu/webdemo`來查看安裝是否成功。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597edd4f0.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597f038a8.png)
';

更換CoreOS不安全的ssh key

最后更新于:2022-04-01 23:04:32

# 更換CoreOS不安全的ssh key `coreos_production_vmware_insecure`的登入方式使用公開的ssh key,任何一個下載同一份`zip`檔案的人,都可以利用相同的ssh key登入,十分危險。本小節說明如何把這不安全的ssh key刪除掉,並換成使用者自己安全的ssh key。使用Ubuntu Linux作為ssh的客戶端示範。 ### 換成安全的ssh key 1. 先確定你擁有自己的ssh key,輸入`ls ~/.ssh -al`,要有`id_rsa.pub`這個檔案。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597d74cc2.png) 1. 將自己的ssh key加入CoreOS主機中安全ssh key的清單中。CoreOS中有一個更新ssh key的專門script檔`update-ssh-keys`,用來把自己安全的ssh key更新到CoreOS的主機ssh key允許清單中。假如CoreOS的 IP是192.168.1.109,則輸入:`cat ~/.ssh/id_rsa.pub | ssh core@192.168.1.109 -i insecure_ssh_key update-ssh-keys -a safeuser` 1. 完成之後,直接進入CoreOS,不需要舊的`insecure_ssh_key`了。輸入:`ssh core@192.168.1.109`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597d807be.png) 1. 進入CoreOS之後查看目前的key,包括了舊有不安全的,和剛才加入安全的Key。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597d92942.png) 1. 把舊的不安全的key移除,輸入`update-ssh-keys -D coreos-cloudinit`即可。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597daaaab.png) 1. 此時用原來舊的KEY已經進不去了。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597dbd0a2.png) 1. 如果你的CoreOS在重新開機後IP變了,你可能會進不去了,會出現如下的畫面 ~~~ joshhu@ubuntu:~$ ssh core@192.168.1.109 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ED25519 key sent by the remote host is 5e:a8:6e:7f:36:21:8c:1d:24:c7:37:0d:df:96:44:ae. Please contact your system administrator. Add correct host key in /home/joshhu/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/joshhu/.ssh/known_hosts:1 remove with: ssh-keygen -f "/home/joshhu/.ssh/known_hosts" -R 192.168.1.109 ED25519 host key for 192.168.1.109 has changed and you have requested strict checking. Host key verification failed. ~~~ 此時只要輸入`ssh-keygen -f "/home/joshhu/.ssh/known_hosts" -R 192.168.1.109`來更新ssh key,就可以正常登入了。
';

建立自動登入的CoreOS

最后更新于:2022-04-01 23:04:30

# 建立自動登入的CoreOS 本小節將說明使用SSH的Private key進行登入的CoreOS VM,其中已經安裝好最新版本的Docker了。 ### 啟動CoreOS的VM並獲得IP 1. 前往[http://alpha.release.core-os.net/amd64-usr/current/index.html,](http://alpha.release.core-os.net/amd64-usr/current/index.html,)並且下載[coreos_production_vmware_insecure.zip](http://alpha.release.core-os.net/amd64-usr/current/coreos_production_vmware_insecure.zip)。 1. 下載回來後解壓可以看到標準VMware格式的`vmx`及`vmdk`,及`insecure_ssh_key`,放入一個固定的地方,如`D:\VM\Coreos`中。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597c179c4.png) 1. 直接使用VMware Workstation開啟這個虛擬機,並且將此VM啟動。 1. 進入登入界面時,直接按下enter,就會出現IP位置。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597c215c4.png) ### Windows下使用puttygen轉換insecure_ssh_key Linux/Mac客戶端直接進入終端命令列操作ssh沒問題,這邊特別嘉惠Windows下的使用者,看如何PieTTY套用ssh key。先下載puttygen.exe吧 [先下載Windows專用的puttygen.exe](http://the.earth.li/~sgtatham/putty/latest/x86/puttygen.exe) 1. 進入puttygen的介面,選擇`Load`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597c30a78.png) 1. 選擇CoreOS資料夾的`insecure_ssh_key`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597c3cd0b.png) 1. 載入成功後,按下`Save private key`,將這個key輸出到`\CoreOS\`的同目錄下,出現圖中的視窗時直接按Enter,檔名自己取即可。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597c509dd.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597c6e0c2.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597c85302.png) 1. 此時可以看到這個CoreOS專用的Private key已經建立了。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597c8deff.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597c9b113.png) ### 使用Private key無帳號密碼ssh登入CoreOS 1. 首先進入PuTTY或PieTTY的介面,選擇`PuTTY`模式。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597ca985e.png) 1. 輸入剛才開機CoreOS的IP,並且將這個連線存檔為CoreOS,最方便的還是使用標準ssh格式,如`core@192.168.1.108`,將使用者名稱放在前面。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597cc0784.png) 1. 選擇`SSH/Auth`的地方,將剛才產生的key選過來。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597ccf11c.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597cde079.png) 1. 選擇`Session`,並且別忘了按下`Save`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597cf410b.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597d0b401.png) 1. 此時按下`Open`,就可以直接ssh入這個CoreOS而不需要帳號密碼了。第一次連線時會出現圖中的視窗,直接按`Yes`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597d19f3a.png) 1. `core`這個使用者已經是root權限,因此可以直接使用,不需要`sudo`輸。入`docker version`,可以看到docker的版本,而輸入`docker run -d --name web -p 8080:80 joshhu/webdmo`,可以直接執行。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597d29034.png) 1. 如果看到圖中的網頁畫面,表示這個CoreOS也部署完成了。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597d3598c.png) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597d49fcc.png) 1. 如果你也想將這個VM部署到vSphere下,請參考下一小節有關轉換到OVF的步驟。 ### Mac/Linux下直接進入 在Mac/Linux的終端機視窗中,與`insecure_ssh_key`的同目錄下,直接輸入`ssh -i insecure_ssh_key core@` 如`ssh -i insecure_ssh_key core@192.168.1.109` ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597d5bbd9.png) ### CoreOS的docker scripts加入 CoreOS VM中的Docker,由於所有使用者的設定檔都連結到`/usr/share/skel/.bashrc`,要先將core這個使用者.bashrc的連結移動到獨立自主的.bashrc,再執行上面的指令,先用core這個使用者名稱ssh連入這個VM,再輸入下列指令: ~~~ cp ~/.bashrc ~/.bashrc.my rm ~/.bashrc mv ~/.bashrc.my ~/.bashrc wget -P ~ https://github.com/joshhu/docker/raw/master/docker_scripts/.bashrc_docker; echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc; wget -P ~ https://github.com/joshhu/docker/raw/master/docker_scripts/showmem.coreos; mv ~/showmem.coreos ~/showmem; chmod +x ~/showmem; ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597d667cf.png)
';

CoreOS簡介

最后更新于:2022-04-01 23:04:27

# CoreOS簡介 CoreOS是一個叢集專用的Linux,在Docker的初期,也是和Docker合作最密切的Linux版本,但隨著Docker的商業化及日漸走紅,CoreOS也漸行漸遠。雖然CoreOS也提供了自己格式的Container Rocket,但目前成熟度還有待加強。 _CoresOS支援非常多安裝方式,包括常見的VM_ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597bce5a1.png) 儘管如此,對Docker叢集支援最好的Linux仍然還是CoreOS,CoreOS也提供了VMware的VM方便部署Docker。針對同一個版本編號的CoreOS有兩個不同應用的VM,分別為: 1. **針對測試用的(如VMware Workstation)VM**:使用ssh無帳號密碼登入,**主要用於本機使用**,其檔案名稱為`coreos_production_vmware_insecure.zip`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597bddb4e.png) 1. **針對生產環境用的(vSphere ESXi)VM**,有預先安裝VMware Tools,其中沒有建立任何使用者帳號及密碼,**主要用於叢集使用**,其檔案名稱為`coreos_production_vmware_image.vmdk.bz2`的`vmdk`檔案,以及`coreos_production_vmware.vmx`的虛擬機檔案。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597bf1f07.png) 這兩個CoreOS的VM在使用上不儘相同,從名字就可看出不同。`coreos_production_vmware_insecure`使用公開的ssh key,因此拿來部署生產環境相當危險,在正式使用前必須更換ssh key。 `coreos_production_vmware`因為安全性較佳,並且有預設安裝`open-vm-tools`,適合用在雲端及生產環境,但由於沒有預設使用者帳號密碼,因此使用上必須經過設定。設定方法有: - 建立帳號密碼 - 使用雲端`config-drive`方式 本小節會介紹第一種方式,第二種方式則留在本書後半部有關雲端部署Docker時再細談。
';

使用雲端專用CoreOS

最后更新于:2022-04-01 23:04:25

# 使用雲端專用CoreOS 在雲端上要執行Docker主要的目的之一就是為了Cluster。Docker本身可以和不同的私有雲平台整合,如vSphere 或是OpenStack。但在這種私有雲平台上,使用Ubuntu就不太方便了。前面我們曾提到最適合Cluter用的Linux版本為CoreOS,這一節我們就直接從CoreOS的網站下載已經安裝好的Docker VM並部署到vSphere中。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597bacf70.png)
';

讓Docker更好用的工具

最后更新于:2022-04-01 23:04:23

# 讓Docker更好用的工具 本節介紹讓Docker的操作更方便的軟體,包括Windows下的PieTTY及一些Linux下的Docker專用scripts檔案。 ### 方便Docker操作的小工具 - [PieTTY](http://ntu.csie.org/~piaip/pietty/archive/pietty0400b14.zip)(Windows):Windows下的SSH軟體,以PuTTY為基礎但更好用。 - [WinSCP](http://winscp.net/download/winscp570.zip)(Windows):Windows和Linux之間傳送檔案的工具。 - Screen(Linux Terminal):多個登入TTY之間的切換工具。 ### 進入Docker Container的好用scripts Docker的Container被看成虛擬機的一種,我們常要進入Docker建立的VM中進行作業。此外也常需獲得執行中Container的資訊。雖然Docker提供了`docker inspect`,但需要配合正規表示法以及json的文字處理。為了方便,筆者把這些使用`docker inspect`的語法簡化成一些指令,分別為: - denter:進入容器中,如:`denter web`,即會直接進入這個容器內。 - dip:取得執行容器的IP,如:`dip web`。 - dpid:取得容器在宿主Linux下的pid,如`dpid web`,取得該容器的pid。 讀者可以下載這些指令,然後導入Linux下使用者的.bashrc設定檔。**注意,不同的Linux使用者都需要重新執行一次這兩行指令。**執行完畢之後先用`exit`登出系統,然後再登入就可以使用了。輸入的指令如下**(請以root身份執行)**: ~~~ $ wget -P ~ https://github.com/joshhu/docker/raw/master/docker_scripts/.bashrc_docker; $ echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc $ exit ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597b90497.png) 另一個工具則是顯示目前執行中的Container,佔用了多少系統記憶體,以及一開始宣告多少記憶體的值,這個工具稱之為`showmem`。安裝方法一樣簡單,**請以root身份執行,且此script只適用於Ubuntu**: ~~~ $ wget -P ~ https://github.com/joshhu/docker/raw/master/docker_scripts/showmem $ chmod +x ~/showmem $ mv ~/showmem /usr/bin $ showmem ~~~ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597b9dee3.png)
';

手動安裝Docker

最后更新于:2022-04-01 23:04:21

# 手動安裝Docker 如果你已經有了現成使用中的Linux,不想在虛擬機中安裝Docker,視使用的Linux distro,Docker的安裝方法也不同。在Docker的官網上有列出所有Linux下的安裝指南,這邊就不多作說明,但官網指出,Docker最適合的環境就是Ubuntu,安裝起來也是最簡單的。讀者這邊要確定的,就是**不要**使用傳統的`apt-get install docker.io`來安裝,因為這樣就無法獲得最新的Docker版本了。 _[這邊有完整的Docker安裝](https://docs.docker.com/installation/),幾乎Linux全包了_ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597b3c00e.png) 注意 - 本書預設使用root帳號進行操作 本書的操作均以root帳號為基礎,因此別忘了啟用電腦的root帳號,如果你的Ubuntu還沒有root帳號,請使用有sudo權限的帳號,在Linux的終端機中輸入:`sudo passwd root`,之後會要求你輸入目前使用帳號的密碼,以及指定給root的密碼(兩次)。輸入完之後,你可以輸入`su`,之後輸入root的密碼後,就可以進入root身份了。 ### 安裝Docker 1. 先更新Ubuntu,輸入`apt-get update`。 1. 再輸入`apt-get upgrade`。 1. 在Ubuntu的終端機視窗中,輸入 ~~~ curl -sSL https://get.docker.com/ubuntu/ | sudo sh ~~~ 1. 如果沒有錯誤訊息,在安裝完畢之後,輸入`docker version`,應就會出現下圖的畫面。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597b4d2ff.png) 接下來我們就執行幾個Docker的指令來驗證Docker的安裝成功。以下的指令讀者目前還不需要了解其意義,本書稍後都會有完整的解釋。 ### 檢驗Docker是否安裝成功 1. 輸入`docker info`則會出現下圖的系統資訊畫面,包括CPU數,記憶體大小以及目前有的docker映像檔數等等。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597b5a86b.png) 1. 輸入`ifconfig docker0`則應該出現如圖的畫面,表示Docker的網路部分也安裝成功。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597b6e959.png) 1. 輸入`docker run -d --name web -p 8080:80 joshhu/webdemo`。如果出現了下圖的畫面,表示Docker已經安裝成功了。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597b7ea5e.png)
';

使用本書所附的VM

最后更新于:2022-04-01 23:04:18

# 使用本書所附的VM 使用Docker最快的方式,就是直接使用本書所建立好的VM,直接到本書的VM下點下載。是一個zip檔。 [本書的Docker VM下載點](https://www.dropbox.com/sh/mbsi3rqfkykgrs3/AACuvW0QZ0Pytiw7bpayOYpsa?dl=1) ### 使用VMware Workstation/Fusion產品開啟 下載`dockerbook.zip`後解壓,會有`dockerbook.vmx`及`dockerbook.vmdk`兩個檔案,如果你使用的是VMware桌面系列的產品(VMware Workstation/Fusion),直接開啟`dockerbook.vmx`即可。以下用Mac OS下的VMware Fusion示範: 1. 開啟這個`dockerbook.vmx` ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597a06153.png) 1. 此時VMware Fusion會要求你將這虛擬機昇級,選擇不要。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597a3264e.png) 1. 這邊選擇`I Copied It`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597a43d76.png) 1. 其它都是`ok`過了就行。 1. 開啟完成 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597a56377.png) ### 在VirtualBox中使用本書所附的VM安裝Docker 如果你使用的是VirtualBOX,則必須建立一個新的VM,再將下載回來解壓縮的虛擬碟碟的`dockerbook.vmdk`附加成一個VirtualBox的虛擬磁碟,以下為Mac OS下的步驟: 1. 先將本書所附的`dockerbook.vmdk`放到使用者Home目錄下的`VirtualBox VMs/dockerbook`下。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597a73d2f.png) 1. 開啟VirtualBox,選擇`new`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597a9a966.png) 1. 輸入這個VM的名字,作業系統以及種類,如圖所示。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597aa5f90.png) 1. 這個VM的記憶體大小,一般我們會給2GB。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597abc6c9.png) 1. 這邊要選擇`use an existing virtual hard drive file`,並且選擇剛才的那個`dockerbook.vmdk`,然後按下`Create`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597accdc6.png) 1. 此時該VM建立完成,可以在VirtualBox的列表中看到。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597ae9935.png) 1. 開啟這台VM,並且可以進入該VM的主控台,進入後,帳號為`docker`,密碼為`dockerbook`,並且輸入`su`取得root權限,密碼也是`dockerbook`。 1. 輸入`docker run -d --name web -p 8080:80 joshhu/webdemo`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597b02434.png) 1. 看一下主機的IP:`ifconfig`。 1. 進入瀏覽器,並且輸入`http://192.168.1.113:8080`。出現下圖的畫面表示安裝成功。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597b10e5b.png) 注意 - 使用ssh連入較方便 一般我們建立了VM,並不會在Hypervisor的主控台下操作,因為不但不方便,也無法使用複製貼上功能。通常將安裝好Docker的VM開啟後,會使用ssh進入該VM,筆者習慣使用Linux的標準終端視窗,您也可以使用Windows上的PieTTY或Mac本身的終端視窗。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597b245bf.png)
';

在Ubuntu Linux下安裝Docker

最后更新于:2022-04-01 23:04:16

# 在Ubuntu Linux下安裝Docker 時至今日大部分的Linux版本都可正常執行Docker,只要該Linux核心的版本編號夠新。如果你已經習慣於某一個版本的Linux,可以參考該Linux廠商的官方安裝方式,本書的教學示範全部使用Ubuntu Linux。 另外一個對Docker支援較強的Linux即為CoreOS。通常CoreOS本身會發佈VM格式,因此只要到CoreOS的官網下載對應Hypervisor的VM即可使用。本小節就針對這兩個Linux的版本來安裝Docker,另外也會在本章最後一小節列出安裝Docker時常見的問題。 ### 注意 –Docker部署在實體伺服器 vs 部署在VM中 本書使用對Docker支援最好的Ubuntu作為主要版本,叢集部署則使用CoreOS。其它版本的Linux當然對Docker的支援也完全沒問題,但除了版本不夠新的問題之外,許多工具(如`nsenter`)也不一定有安裝,不是使用這兩個版本Linux的讀者必須自行安裝這些工具。 ###
';

使用標準VM安裝

最后更新于:2022-04-01 23:04:14

# 在Mac OS/Windows中的VM安裝Docker 另一個方法,即循正規安裝,在Mac OS或Windows下先安裝習慣用的Hypervisor,推薦的有: ### 自行在VM中安裝Ubuntu 讀者可以先去下載下列幾個虛擬化的Hypervisor,如: - VirtualBox(Mac OS/Windows/Linux,**本書推薦**) - VMware Workstation (Windows/Linux) - VMware Fusion (Mac OS) 然後再自行安裝或下載Ubuntu Linux ISO檔案,先安裝好Linux,然後再安裝Docker,這個方法彈性大,同時也方便示範後面章節所提的Docker叢集,由於正規方式和在Linux下安裝Docker完全一樣,讀者直接參考Linux的安裝部分即可。 Ubuntu ISO下載:[http://www.ubuntu.com/download/server](http://www.ubuntu.com/download/server) ### 注意 – Hypervisor的選擇,Hosted或是Bare Metal 在本書的示範章節,都會使用Hosted的Hypervisor,這是大部分測試環境最方便使用的。在測試完後需要上生產環境時,才會應用到Bare Metal的企業版Hypervisor,主要是為了快速大量部署,本書稍後會有專門的章節介紹。
';

在Windows下使用boot2docker

最后更新于:2022-04-01 23:04:12

# 在Windows下使用boot2docker 要安裝Windows下的boot2docker,必須確定你的電腦CPU有支援VT-X,但這並不是Docker需要的,而是VirtualBox需要的,可使用CPU-Z來檢查。另外也必須到BIOS中確定VT-X有開啟,如果都OK的話,即可直接安裝。 ### 在Windows下安裝boot2docker 1. 先到[https://github.com/boot2docker/windows-installer/releases下載](https://github.com/boot2docker/windows-installer/releases下載) boot2docker的安裝檔docker-install.exe。 1. 下載回來後直接執行,不更改預設值按「Next」即可,這邊就略過。 1. 在安裝完畢後,桌面上會出現一個boot2docker Start的圖示,直接點擊執行。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597992ff9.png) 1. 此時會出現如下圖的畫面,這時是將精簡的Linux VM載入記憶體,如果中間有任何詢問視窗,都選擇「Y」即可。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c75979a9402.png) 1. 當出現下圖的畫面,表示載入成功。 1. 輸入`docker run busybox echo Hello Docker`,如果出現下圖的畫面時,表示安裝成功。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c75979b7707.png) ### 如果無法執行 在某些64位元的Windows 7/8/10系統下,boot2docker會一直無法啟動VirtualBox,此時你只要去VirtualBox的官方安裝重新安裝最新版的VirtualBox後即可。 另外如果按下boot2docker start圖示一直會跳出記事本或是無法進去,可以用下列方便解決。 1. 從Windows的檔案總管進入boot2docker的安裝目錄,預設為`C:\Program Files\Boot2Docker for Windows\`。 1. 在該目錄下按滑鼠右鍵,選擇`Git bash`。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c75979c489a.png) 1. 出現bash視窗時,輸入`./start.sh`即可。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c75979d6439.png) 本書的重點不在boot2docker,也不推薦使用,如果一定要在Windows/Mac下使用Docker,還是安裝一個Hypervisor,再下載本書專用的VM,或自行安裝Ubuntu,再正式安裝Docker比較方便。
';

Mac OS下的boot2docker

最后更新于:2022-04-01 23:04:09

# Mac OS下的boot2docker 由於Mac OS是一個類UNIX的封閉系統,因此在操作上雖然很像Linux,但核心是使用蘋果自己的系統。要使用Docker也必須使用boot2docker的Mac版,操作較Windows版多幾個步驟,我們就來看看。 ### 安裝boot2docker Mac OS下的boot2docker安裝和Windows差不多,我們就來看看。 1. 確定Mac OS的版本在10.6以上。 1. 到[https://github.com/boot2docker/osx-installer/releases/tag/v1.5.0下載Boot2Docker-1.5.0.pkg。](https://github.com/boot2docker/osx-installer/releases/tag/v1.5.0下載Boot2Docker-1.5.0.pkg。) 1. 下載後直接執行該檔案,此時會將Boot2Docker放到Mac OS的Applications的資料夾下,而將docker及boot2docker放到`/usr/local/bin`的資料夾下(和Linux一樣)。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597907f17.png) 1. 照著一般Mac OS的程式安裝即可(其實就是安裝VirtualBox,一直Next即可)。 1. 安裝完畢後,會在「應用程式」的資料夾出現boot2docker的圖示。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c759791e560.png) 1. 直接執行,第一次會出現如圖的視窗,要等一下。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597936204.png) 1. 跑完之後,輸入`docker run -d --name web -p 8080:80 joshhu/webdemo`,出現下圖的畫面時表示安裝成功。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c759794135b.png) 1. 但這個服務成功了嗎?照道理來說,應該是這台Mac的IP位址的8080埠對應到Docker中Container的80埠,我們試著輸入[http://localhost:8080/,應該可以看到服務,但是並沒有。](http://localhost:8080/,應該可以看到服務,但是並沒有。)![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c759794d556.png) ### boot2docker和標準docker的差別 在一般的Linux下使用Docker時,docker daemon是運作在該Linux的主機上,但是在boot2docker中,docker daemon是運作在Windows/Mac OS主機下的一個VM中,因此無法直接使用本機的資源(如IP位址、磁碟對應等)。 _這是標準Linux_ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597959bbf.png) _這是boot2docker_ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597969e37.png) 舉例來說,使用Linux主機上的Docker時,你可以設定該Linux主機的IP位置和Docker Container的對應,但在boot2docker中,Windows/Mac OS主機的IP位置是完全無法對應到Docker的Container中,只能讓VirtualBox VM的IP位置和Docker的Container對應。 ### 使用Mac OS在VirtualBox網段的IP才行 1. 在正常的Linux Docker中,可以直接存取主機的IP以及對應的埠,就可以看到Apache啟動。 1. 但在Mac OS的boot2docker之下無法看到網頁,這是因為boot2docker是在一個VirtualBox的VM中執行的,只能先取得Mac的VirtualBox NAT IP。輸入`boot2docker ip`獲得Container執行VM的主機IP。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c759797b7a7.png) 1. 此時再在Mac OS的瀏覽器中輸入剛才獲得的VM IP即對應埠,才能看到測試網站的產生。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597985a77.png) Boot2docker只是把一個VirtualBox的VM隱藏在記憶體中,因此並無法完全發揮正常Docker的功能,本書不推薦。另外有關Docker的IP位址對應在後面章節有詳細的說明。
';

boot2docker簡介

最后更新于:2022-04-01 23:04:07

# boot2docker簡介 Boot2docker是一個專門在Mac及Windows下使用Docker的套件,包括了: - 一個VirtualBox程式 - VirtualBox格式的極小Linux VM - 位於該VM中的Docker程式 - Boot2Docker管理工具。 除了Docker本身之外,boot2docker元件中的VirtualBox VM非常小,完全不佔磁碟空間只存在記憶體中,大小僅為24MB,開機時間只要5秒。此外,Boot2Docker管理工具本身就是一個輕量級的Linux VM,專門用來在Mac OS中執行Docker Daemon。
';

在Mac及Windows下安裝Docker

最后更新于:2022-04-01 23:04:05

# 在Mac及Windows下安裝Docker Docker所產生出來的Container只能是Linux,因此Docker**只能**運行/安裝在**純Linux環境**下,Docker支援絕大部分的Linux,只要該Linux的核心版本編號夠新。 **為了方便起見,本書一律使用Docker指定的Ubuntu 14.04以後的Linux,以及CoreOS,這兩個是原生就支援Docker的Linux版本。** Mac OS及Windows下則無法直接原生使用Docker,必須使用Linux的VM才行。使用VM的方法分為兩種,一種是直接自行架設VM(如VMware Workstation/Fusion、VirtualBox),再自安裝Linux的VM,然然後再在這個VM中安裝Docker。 另一個使用VM的方式,則是使用官方的`boot2docker`,雖然也是用VM+Linux的方式,但會一次會幫你完成上面的所有動作,並且使用類似Windows Shell指令及Mac OS的終端視窗來操作。 ### 注意 –Docker部署在實體伺服器 vs 部署在VM中 雖然本書不斷強調原生硬體的效能遠遠超過VM的模擬硬體效能,將Docker直接安裝在實體伺服器的Linux中,一定比先安裝VM Linux,再在此VM中執行Docker要快上許多。但企業考量的重點除了效能之外 更有部署的便利性、現存系統的穩定度、整個系統的HA、FT、DRS高可用性等重點,筆書建議還是將Docker部署在VM中,犧牲一點點效能,換來的是更方便的部署、更穩定的環境以及更彈性的設定,這是絕對值得的。
';

安裝前說明

最后更新于:2022-04-01 23:04:03

# 安裝前說明 Docker支援絕大部分的Linux,只要該Linux的核心版本編號夠新。另外在Mac OS及Windows下則無法直接支援Docker,必須使用特殊方法,或是使用VM,我們就來看看。 ### 注意:本書使用環境說明 本書操作**主要**使用原生的Linux終端視窗,有關圖型環境操作,則主要使用Mac OS及Windows 10。在Windows/Mac的虛擬機方面,本書使用VirtualBox及VMware Workstation/Fusion,讀者只要有上述的作業系統及虛擬化環境的任一組合即可。 也可以使用Windows下的SSH工具,PieTTY最好用 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c75978e22ca.png) [VirtualBox下載](https://www.virtualbox.org/wiki/Downloads) [VMware Workstation下載](https://my.vmware.com/web/vmware/info/slug/desktop_end_user_computing/vmware_workstation/11_0) [VMware Fusion下載](https://my.vmware.com/web/vmware/info/slug/desktop_end_user_computing/vmware_fusion/7_0)
';

全環境Docker的完整安裝

最后更新于:2022-04-01 23:04:00

# 本章重點 Docker是一個原生的Linux產物,只要安裝了正確版本的Linux,就可以直接使用Docker。但大部分的我們不太可能生活在純Linux的環境, 事實上,大部分的電腦使用及操作都是在Windows或Mac OS之下,因此我們在這一章,就來看看最完整的Docker執行環境及操作環境的架設。 - 最常使用的工具 - 最常使用的虛擬機軟體 - Mac及Windows下安裝及簡單使用boot2docker(**不推薦**) - 在標準VM中安裝Docker - 在Ubuntu下安裝Docker - 使用現成安裝好Docker的VM - 雲端專用Linux CoreOS的VM安裝 - CoreOS安裝後的校調
';

看個實例

最后更新于:2022-04-01 23:03:58

# 看個實例 我們就來看一個實際的例子來說明上一小節的Docker運行原理。 1. 先確定這個Linux環境是可以執行Docker的。包括安裝了Docker,Linux的版本正確,以及有連上公網。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597881059.png) 1. 輸入Docker的指令,即準備呼叫docker daemon:`docker run -d --name web -m 512m -p 8080:80 joshhu/webdemo`。這邊要注意的是,Docker的選項,全部以參數方式表現,如記憶體限制,名稱,通訊埠對應,映像檔名稱等。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597893192.png) 1. 按下Enter之後,即使用`unix://var/run/unix.sock`呼叫docker daemon。由於`joshhu/webdemo`這個映像檔已經存在了,因此就直接用此映像檔,填入名為`web`的Container中。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c75978a367e.png) 1. 可以輸入`showmem`看一下記憶體的使用情況。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c75978b26cb.png) 1. 如果這個`joshhu/webdemo`影像檔沒有在本機,就會先去下載,下載回來後,再填入空的Container `web`中。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c75978c0126.png) 注意 - Container的ID及名稱 在Docker執行時,如果你沒有使用`--name <名稱>`的參數,Docker會主動幫這個Container取一個好玩的名稱。而不管你有沒有幫這個Container命名,Docker一定會產生一個全世界獨一無二的Container id。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c75978d22d2.png)
';

這些元件如何合作建立Docker環境

最后更新于:2022-04-01 23:03:56

# 這些元件如何合作建立Docker環境 Docker的執行非常簡單,就是docker client呼叫Docker daemon,然後daemon透過`libcontainer`呼叫Linux的核心模組來完成建立容器的的步驟,下面看圖說故事。 ### Docker執行過程 1. 首先當然要有**安裝了Docker的Linux及硬體**。 _x86硬體,版本正確的Linux以及Docker_ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c75977ef62a.png) 1. 當準備建立Container時,**輸入指令**即執行docker client。呼叫Docker daemon,預設使用的通訊協定是`unix:///var/run/docker.sock`。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c759780b7ba.png) 1. Docker daemon透過`libcontainer`要求Linux核心建立Container。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c759781654c.png) 1. 此時Linux核心收到指示,即啟動核心的`namespace`建立一個獨立的空間,包括`pid、network、IPC、UTS、mount`等namespace,daemon根據client的參數定義來分配CPU、記憶體或磁碟IO等。**注意虛線,此時Container中沒有任何東西**!只有空殼沒有內容。Container的空殼建立完成,需要將真正的作業系統及應用程式放入這個空殼中。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c7597822a70.png) 1. Damone檢查本機的現有映像檔列表,看要填入此Container空殼的映像檔之前有沒有下載過,![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c759783e33a.png) 1. 有的話,直接從本機載入Container中,此時Container建立完成並啟動。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c759784fa93.png) 1. 若本機沒有此映像檔,daemon到預設的Docker Registry, 根據client的參數,下載適當的映像檔。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c759785db1f.png) 1. 下載回來即將此映像檔,填入Container的空殼,此時Container即啟動完成。![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c759786ccf7.png) 從上面的流程可以得知,Docker Container執行的調整方式就是我們下的參數。事實上,執行Docker時的參數,就是決定Linux核心建立Namespace以及設定網路、儲存的方法,這在本書稍後會有詳細說明。 注意 - Docker client可以在另一台主機此時和 Daemon的之間的連線可以用https取代unix://,但十分危險,除非你很確定安全性沒問題才要這麼做!![](dockerclienthttps.png)
';

Docker的元件– Docker核心部分

最后更新于:2022-04-01 23:03:53

# Docker的元件– Docker核心部分 系統要能執行Docker,除了前述的Linux核心元件外,就是Docke部分了。Docker必要條件分為本機的三個元件之外,真的靈魂其實是雲端上的映像檔資料庫。本書稍後會 有映像檔資料庫的完整介紹 ### Docker的執行元件 - Docker client – 呼叫Docker Daemon (本機或其它客戶端) - Docker daemon – 執行Docker功能並用 (本機) - libcontainer - 和Linux核心溝通的library (本機) - Docker Image – 建立容器用的映像檔 (本機或雲端映像庫) _圖中紫色部分為Docker的核心元件_ ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2015-08-09_55c75977db57e.png) 通常在安裝Docker時,就是同時安裝Docker客戶端、Docker daemon以及libcontainer,此時客戶端和daemon是在同一台電腦上的(使用unix:///var/unix.sock呼叫)。當然也可以讓Docker的客戶端和daemon不在同一台電腦(使用,但會有安全上的疑慮。此外你也可以利用Docker提供的API來撰寫自己的客戶端,預設的Docker客戶端介面就是我們安裝Docker時的輸入指令。
';