一:構建映象
對於docker使用者來說,最好的情況是不需要自己建立映象。幾乎所有常用的中介軟體,應用軟體,資料庫都有現成的docker官方映象或其他人和組織建立的映象,我們只需稍作配置就可以直接使用。
當然,某些情況下我們也不得不自己構建映象,例如:
(1)找不到現成的映象,比如自己開發的應用程式
(2)需要在映象中加入特定的功能,比如官方映象幾乎都不提供ssh
docker提供了兩種構建映象的方法:docker commit 命令與dockerfile構建檔案。
1.docker commit
docker commit命令是建立新映象最直觀的方法,其過程包含三個步驟:
● 執行容器。
● 修改容器。
● 將容器儲存為新的映象。
語法二.dockerfile用通俗一點的話來講:dockerfile就是根據自己的需要自定義乙個映象,就像你寫shell指令碼一樣,把一連串的過程或步驟全部寫進dockerfile檔案中,一步一步的執行dockerfile檔案中你寫的內容。dockerfile是乙個文字檔案,記錄了映象構建的所有步驟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).更重要的:使用者並不知道映象是如何建立出來的,裡面是否有惡意程式。也就是說無法對映象進行審計,
存在安全隱患。
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
[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 ⑩
②.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...