第230期 / December 5, 2016

研發新視界

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

Docker介紹與入門使用

作者/張乃中

[發表日期:2016/12/5]

前言

在開發軟體時,時常會需要某些運行環境來協助開發測試,以往利用虛擬化技術建立一個包含作業系統在內的獨立執行環境(虛擬機器),例如VMware。然而建立虛擬機器會消耗掉不少的系統資源,因此就產生另一種輕量化的虛擬化技術:容器(Container),容器是利用Linux核心的Control Group和Namespaces機制,建立獨立隔離的工作區,容器間共享主機的資源,必要時也能增加使用條件或限制。


《圖一》


Docker簡介

Docker 是一個開源專案,基於容器技術,對其進一步的封裝,讓使用者更容易操作、快速建立Container、搭建一個開發環境、部署程式碼進行測試。Docker 提供應用程式在獨立的 container 中執行,透過 Docker Engine 來進行管理。


《圖二》


Docker包含了三個主要部份:

一、Docker映像檔(Image)

Docker映像檔是一個唯讀的環境模板,裡面包含了Container內的所有程式(包括應用程式、相關函式庫、設定檔),用來建立Docker容器。舉例來說,一個網頁的執行環境映像檔內會有ubuntu OS、Apache網站伺服器、MySQL資料庫等。

二、Docker容器(Containers)

容器是根據映像檔建立的實例(instance)。映像檔是唯讀的,而容器則是是映像檔的可寫層。容器是一個簡易版的 Linux 環境應用程式並可在其中運行程式。一個映像檔可以建立多個容器,每個容器都是相互隔離的。

三、Docker註冊伺服器(Registries)

Docker註冊伺服器上有許多倉庫(repository),倉庫內存放許多映像檔供人使用。註冊伺服器分為公開(Public)和私有(Private),最大的Public registries是 Docker Hub,存放了大量的映像檔供使用者下載使用;使用者也可以在local網路上建立一個Private registries。

Docker是以原生的Linux為基礎開發的,所以在大部份的Linux系統上都可以使用,而目前常見的作業系統 Windows、OS X仍然需要先安裝Linux的VM或者使用Docker官方提供的boot2docker套件(含VM環境)。以下介紹使用Ubuntu 14.04版本。

安裝

Ubuntu 14.04 版本套件庫中已經內建了 Docker ,直接安裝即可。

$ sudo apt-get update
$ sudo apt-get install docker.io
$ sudo ln –sf /usr/bin/docker.io /usr/local/bin/docker

快速安裝

$ curl -sSL https://get.docker.com/ubuntu/ | sudo sh

如果沒有錯誤訊息,安裝結束後,可以輸入

$ sudo docker version

來檢查版本資訊,以及

$ sudo docker info

列出目前的系統資訊,包含CPU數量,記憶體大小以及目前有的docker映像檔數等。試試看建立一個容器並輸出Hello World。

$ docker run hello-world

執行結果


《圖三》


Docker的運作流程如下圖Docker 在執行容器前需要有對應的映像檔,如果映像檔不存在local端,則Docker 會從Registries下載(預設是 Docker Hub,也可以指定其他公用或私有registry)。


《圖四》


映像檔

Docker 在執行容器前需要有對應的映像檔,如果映像檔不存在local端,則Docker 會從Registries下載(預設是 Docker Hub,也可以指定其他公用或私有registry)。使用docker pull命令從倉庫取得所需要的映像檔。
例如從Docker Hub 倉庫下載一個 Ubuntu 12.04

$ sudo docker pull ubuntu:12.04
Pulling repository ubuntu
ab8e2728644c: Pulling dependent layers
511136ea3c5a: Download complete
5f0ffaa9455e: Download complete
a300658979be: Download complete
904483ae0c30: Download complete
ffdaafd1ca50: Download complete
d047ae21eeaf: Download complete

可以使用docker imges命令顯示本機上已經存在的映像檔。


《圖五》


容器

當取得映像檔後,可以根據映像檔建立一個新容器並啟動。使用docker run來建立一個容器並啟動執行,如上面的hello world範例。當容器建立並啟動之後,會執行使用者所指定的程式,執行完畢之後容器被終止。除了docker run外,也可以利用docker create指令建立初始狀態為終止的容器。

$ sudo docker create –it ubuntu:14.04
每個容器都有唯一的一個id作為識別,可以使用docker ps –a來顯示目前系統中的所有容器。

$ docker ps –a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
592376ff3eb8 hello-world "/hello" 25 seconds ago Exited (0) 24 seconds ago prickly_wozniak

利用ID以及 docker start命令,將一個終止的容器重新啟動執行。

$ sudo docker start -i 592376ff3eb8

而執行中的容器可以透過 docker stop指令來終止,或者利用docker restart指令將執行中的容器終止後重啟。

$ sudo docker stop 592376ff3eb8

如果要匯出本機上的容器可以使用 docker export匯出。

?$ sudo docker export 592376ff3eb8 > helloworld.tar

或是用docker import匯入容器將其變為映像檔

?$ cat test.tar | sudo docker export - test/ubuntu:v1.0

用images檢視匯入結果

$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB

以上便是一些關於Docker基本的操作。

結論

許多大企業Google、Amazon等也都已經使用Docker來提供一些服務,Docker的輕量化及快速部屬,對於目前雲端開發或者提供雲端服務等都有非常大的幫助。

(本文轉載自RUN!PC)

參考資料

Docker

Docker —— 從入門到實踐

全面易懂的Docker指令大全

SUPERCHARGE YOUR DEVELOPMENT ENVIRONMENT (USING DOCKER)