基本概念
映像檔(Image)
Docker 映像檔就是一個唯讀的模板。
例如:一個映像檔可以包含一個完整的 ubuntu 作業系統環境,裡面僅安裝了 Apache 或使用者需要的其它應用程式。
映像檔可以用來建立 Docker 容器。
Docker 提供了一個很簡單的機制來建立映像檔或者更新現有的映像檔,使用者甚至可以直接從其他人那裡下載一個已經做好的映像檔來直接使用。
容器(Container)
Docker 利用容器來執行應用。
容器是從映像檔建立的執行實例。它可以被啟動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平台。
可以把容器看做是一個簡易版的 Linux 環境(包括root使用者權限、程式空間、使用者空間和網路空間等)和在其中執行的應用程式。
*註:映像檔是唯讀的,容器在啟動的時候建立一層可寫層作為最上層。
倉庫(Repository)/倉庫註冊伺服器(Registry)
倉庫是集中存放映像檔檔案的場所。有時候會把倉庫和倉庫註冊伺服器(Registry)混為一談,並不嚴格區分。實際上,倉庫註冊伺服器上往往存放著多個倉庫,每個倉庫中又包含了多個映像檔,每個映像檔有不同的標籤(tag)。
倉庫分為公開倉庫(Public)和私有倉庫(Private)兩種形式。
最大的公開倉庫是 Docker Hub,存放了數量龐大的映像檔供使用者下載。 大陸的公開倉庫包括 Docker Pool 等,可以提供大陸使用者更穩定快速的存取。
當然,使用者也可以在本地網路內建立一個私有倉庫。
當使用者建立了自己的映像檔之後就可以使用 push
命令將它上傳到公有或者私有倉庫,這樣下次在另外一台機器上使用這個映像檔時候,只需要從倉庫上 pull
下來就可以了。
*註:Docker 倉庫的概念跟 Git 類似,註冊伺服器可以理解為 GitHub 這樣的託管服務。
Dockerfile
使用 Dockerfile 讓使用者可以建立自定義的映像檔。
例如
# This dockerfile uses the ubuntu image
# VERSION 2 - EDITION 1
# Author: docker_user
# Command format: Instruction [arguments / command] ..
# 基本映像檔,必須是第一個指令
FROM ubuntu
# 維護者: docker_user
<
docker_user at email.com
>
(@docker_user)
MAINTAINER docker_user [email protected]
# 更新映像檔的指令
RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe"
>
>
/etc/apt/sources.list
RUN apt-get update
&
&
apt-get install -y nginx
RUN echo "\ndaemon off;"
>
>
/etc/nginx/nginx.conf
# 建立新容器時要執行的指令
CMD /usr/sbin/nginx