使用Docker創建鏡像的三種方法

      作爲容器技術的代表作-Docker,給開發、運維、測試人員帶來了極大的便利,作爲一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然後發佈到任何流行的 Linux或Windows 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。

今天就給大家演示一下,如何打造屬於自己的docker鏡像,也就是docker的image。創建鏡像的方法主要有三種:基於已有鏡像的容器創建、基於本地模板導入、基於Dockerfile創建。

1、基於已有鏡像的容器創建

基於已有鏡像的容器創建,需要用到命令docker commit,先來看一下這個命令的用法:

命令格式爲:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

其中:-a, --author string:作者信息;

- c,--change=[]:提交的時候執行 Dockerfile指令, 包括CMD| ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|USER|VOLUME|WORKDIR 等;

-m,--message="":提交消息;

p,--pause=true:提交時暫停容器運行。

我們使用docker images命令查看本地鏡像,發現本地有Ubuntu的鏡像,這是我提前pull到本地,那麼我們就基於此鏡像的容器來創建鏡像:

我們用命令docker run來啓動鏡像ubuntu的一個容器,並且創建一個名爲test的文件:

可以使用docker ps來查看啓動的容器,記下這個容器的id,我們就通過容器id來創建鏡像:

啓動這個鏡像的一個容器,我們就可以直接看到剛剛添加的test文件:

2、基於本地模板導入

用戶也可以直接從一個操作系統模板文件導入一個鏡像,主要使用 docker import 命令,先來看一下docker import的使用格式:

命令格式爲:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

其中:-c, --change list,指定創建鏡像的Dockerfile文件

-m,--message string,提交信息

下載了 ubuntu-14.04的模板壓縮包,之後使用以下命令導入:

3、基於Dockerfile創建

首先創建一個文件夾,在這個文件夾裏,我們創建Dockerfile文件,和需要鏡像運行包括的文件,這裏創建一個簡單的Java的打印hello world程序:


HelloWorld.java內容也僅僅是打印一下字符串:

編譯和運行一下,是沒有問題的,接下來就看看Dockerfile裏面的內容:

這是一個很簡單的Dockerfile入門示例,但是麻雀雖小,五臟俱全:

FROM:基於什麼樣的基礎鏡像,這裏基於java:8的基礎鏡像,需要編譯和運行Java程序

COPY:把本地主機上指定目錄文件,複製到docker容器中指定目錄

WORKDIR:指定工作目錄

RUN:運行指令

CMD:設置啓動命令

當設置好Dockerfile文件後,我們就可以使用docker build指令來構建鏡像,先來看一下docker build的命令格式:

可選參數還是挺多的

--add-host list:設置host-to-IP映射
--build-arg=[] :設置鏡像創建時的變量;

--cpu-shares :設置 cpu 使用權重;

--cpu-period :限制 CPU CFS週期;

--cpu-quota :限制 CPU CFS配額;

--cpuset-cpus :指定使用的CPU id;

--cpuset-mems :指定使用的內存 id;

--disable-content-trust :忽略校驗,默認開啓;

-f :指定要使用的Dockerfile路徑;

--force-rm :設置鏡像過程中刪除中間容器;

--isolation :使用容器隔離技術;

--label=[] :設置鏡像使用的元數據;

-m :設置內存最大值;

--memory-swap :設置Swap的最大值爲內存+swap,"-1"表示不限swap;

--no-cache :創建鏡像的過程不使用緩存;

--pull :嘗試去更新鏡像的新版本;

--quiet, -q :安靜模式,成功後只輸出鏡像 ID;

--rm :設置鏡像成功後刪除中間容器;

--shm-size :設置/dev/shm的大小,默認值是64M;

--ulimit :Ulimit配置。

--tag, -t: 鏡像的名字及標籤,通常 name:tag 或者 name 格式;可以在一次構建中爲一個鏡像設置多個標籤。

--network: 默認 default。在構建期間設置RUN指令的網絡模式

不過我們都可以通過默認參數,進而使用簡單的命令來構建鏡像:


參數-t是給鏡像打標籤,也可以看出來創建鏡像的過程,也就是我們編寫Dockerfile的指令,我們使用docker images來查看一下剛創建的鏡像:

運行一下這個新創建的鏡像,看是否按照我們配置的CMD命令,打印出來hello world呢?

no problem!一個簡單的鏡像在我們簡單的配置下,誕生了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章