docker入門教程(四)構建映象

2022-08-19 19:39:13 字數 3723 閱讀 5055

一:構建映象

對於docker使用者來說,最好的情況是不需要自己建立映象。幾乎所有常用的中介軟體,應用軟體,資料庫都有現成的docker官方映象或其他人和組織建立的映象,我們只需稍作配置就可以直接使用。

當然,某些情況下我們也不得不自己構建映象,例如:

(1)找不到現成的映象,比如自己開發的應用程式

(2)需要在映象中加入特定的功能,比如官方映象幾乎都不提供ssh

docker提供了兩種構建映象的方法:docker commit 命令與dockerfile構建檔案。

1.docker commit

docker commit命令是建立新映象最直觀的方法,其過程包含三個步驟:

● 執行容器。

● 修改容器。

● 將容器儲存為新的映象。

語法

docker commit [options] container [repository[:tag]]

options說明:

-a :提交的映象作者;

-c :使用dockerfile指令來建立映象;

-m :提交時的說明文字;

-p :在commit時,將容器暫停。

ps:將容器qwer1234 儲存為新的映象,並新增提交人資訊和說明資訊。

docker commit -a "machao" -m "machao images" qwer1234 nginx:v1.12

然而,docker並不建議使用者通過這種方式構建映象。原因如下:

(1).這是一種手工建立映象的方式,容易出錯,效率低且可重複性弱。比如要在centos映象中也加入vim,

還得重複前面的所有步驟。

(2).更重要的:使用者並不知道映象是如何建立出來的,裡面是否有惡意程式。也就是說無法對映象進行審計,

存在安全隱患。

二.dockerfile用通俗一點的話來講:dockerfile就是根據自己的需要自定義乙個映象,就像你寫shell指令碼一樣,把一連串的過程或步驟全部寫進dockerfile檔案中,一步一步的執行dockerfile檔案中你寫的內容。dockerfile是乙個文字檔案,記錄了映象構建的所有步驟

ps:dockerfile指令

.build命令

用法 : 構建 選項

usage:docker build [options] path | url | -options:

-t ,--tag list  #構建後的映象名稱 把新映象命名為

-f, --file string

#指定dockerfiile檔案位置

示例:1

,docker build .

2,docker build -t nginx:v10 .

3,docker build -t nginx:v10 -f /path/dockerfile /path

一般常用第2種方式構建,我們在構建時都會切換到dockerfile檔案的目錄下進行構建,所以不需要指定-f引數。

ps.第乙個dockerfile[root@ubuntu ~]# cat dockerfile

from ubuntu

run yum install vim -y

[root@ubuntu ~]# pwd

/root

[root@ubuntu~]# docker build -t ubuntu-vim-dockerfile .

[root@qwer1234 ~]# pwd    ①

/root

[root@qwer1234 ~]# ls ②

dockerfile

[root@qwer123456 ~]# docker build -t ubuntu-dockerfile . ③

sending build context to docker daemon

2.048

kb ④

step

1/2: from ubuntu ⑤

--->113a43faa138

step

2/2 : run apt-get update && apt-get install -y vim ⑥

---> running in

6b519717e62d ⑦

…………

setting up vim (

2:8.0.1453-1ubuntu1) ...

--->ff7bda2385c1 ⑧

removing intermediate container 6b519717e62d ⑨

successfully built ff7bda2385c1 ⑩

①.當前目錄為/root

②.dockerfile準備就緒

③.執行docker build 命令,-t 將新映象命名為 ubuntu-vim-dockerfile,命令末尾的  . 指明build context(構建環境)為當前目錄。docker缺省會從build context中查詢dockerfile檔案,我們也可以通過 -f 引數指定dokerfile檔案位置

④.從這步開始就是映象真正的構建過程。首先docker將build context中所有檔案傳送給docker daemon。build context為映象構建提供所需要的檔案或目錄。

dockerfile 中的add,copy等命令可以將build context中的檔案新增到映象。此例中,build context 為當前目錄/root,該目錄下的所有檔案和子目錄都會被傳送給docker daemon。

所以,使用 build context 就得小心了,不要將多餘檔案放到 build context,特別不要把/ ,/usr作為build context,否則構建過程會相當緩慢甚至失敗。

⑤.step 1:執行from,將ubuntu 作為base映象。

ubuntu映象id為113a43faa138

⑥.step 2:執行 run,安裝vim,具體步驟為 ⑦ ⑧ ⑨。

⑦.啟動id為6b519717e62d的臨時容器,在容器中通過apt-get 安裝vim。

⑧.安裝成功後,將容器儲存為映象,其 id 為 ff7bda2385c1。

這一步底層使用的是類似docker commit 的命令

⑨.刪除臨時容器 6b519717e62d。

⑩.構建映象成功 

docker history 'image name'  ##docker history 會顯示映象的構建歷史,也就是 dockerfile 的執行過程

docker 會快取已有映象的映象層,構建新映象時,如果某映象層已經存在,就直接使用,無需重新建立

dockerfile 構建映象過程:

(1.) 從 base 映象執行乙個容器。

(2.) 執行一條指令,對容器做修改。

(3.) 執行類似 docker commit 的操作,生成乙個新的映象層。

(4.) docker 再基於剛剛提交的映象執行乙個新容器。

(5.) 重複 2~4 步,直到 dockerfile 中所有指令執行完畢。

Docker 入門教程

冗餘步驟多。虛擬機器需要完整的作業系統,一些系統級別的操作步驟,往往無法跳過,比如使用者登入。啟動很慢。啟動作業系統需要多久,啟動虛擬機器就需要多久。可能要等幾分鐘,應用程式才能真正執行。體積小。容器只要包含用到的元件即可,而虛擬機器包含整個作業系統,所以容器檔案比虛擬機器檔案要小很多。啟動快。啟動...

Docker入門教程

mongodb由c 語言編寫,是乙個基於分布式檔案儲存的開源資料庫系統,支援的資料結構為bson格式。我們開始用docker進行部署我們的mongodb。我們從docker的官網找到mongo對應的映象 於是我們進行拉取 我們讓我們的mongodb 跑起來 docker run d p 2017 2...

構建docker映象基本教程

構建notebook映象的基本要求,是在映象的python環境中安裝jupyter和notebook 的工具包。下面我以tensorflow tensorflow 1.12.0 gpu py3官方的基礎映象為例,構建使用者自定義notebook映象。檔案內容如下 執行命令構建映象 docker bu...