建立Docker映象有幾種方式

2022-02-23 19:00:31

建立Docker映象有2種方式:1、使用「docker commit」命令基於已有容器手動構建映象;2、使用Dockerfile自動構建映象,Docker程式會通過讀取Dockerfile構建檔案中的指令自動生成映象。

本教學操作環境:linux5.9.8系統、docker-1.13.1版、Dell G3電腦。

有時候從Docker映象倉庫中下載的映象不能滿足要求,我們可以基於一個基礎映象構建一個自己的映象.

映象構建介紹

在什麼情況下我們需要自己構建映象那?

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

(2)需要在映象中加入特定的功能

docker構建映象有兩種方式:docker commit命令與Dockerfile構建檔案

docker commit構建映象

基於已有容器構建映象主要是通過docker commit命令來構建新的映象。

dockercommit構建進行主要有三步:

  • 執行容器
  • 修改容器
  • 將容器儲存為新的映象

比如在centos映象中安裝vim編輯器並存為新的映象

(1)執行容器

[root@ken1 docker]# docker run -it centos
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
a02a4930cb5d: Pull complete 
Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426
Status: Downloaded newer image for centos:latest

(2)安裝vim編輯器

vim編輯器確認沒有安裝

[root@69f501e858a6 /]# vim
bash: vim: command not found

進行安裝

[root@69f501e858a6 /]# yum install vim -y

(3)儲存為新得映象

首先檢視當前執行的映象

[root@ken1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
69f501e858a6        centos              "/bin/bash"         2 minutes ago       Up 2 minutes                            quizzical_torvalds

使用commit存為新的映象

[root@ken1 ~]# docker commit 69f501e858a6 centos-vim
sha256:42083b89a179368bc29a8f40d14f8824990183c8e4b28fd84411d440c26342e5

69f501e858a6是執行容器的ID使用name下面的名稱也行
centos-vim是新映象的名字

檢視一下是否有了centos-vim映象

重新啟動新的映象,驗證是否可以使用vim編輯器

可以發現新的映象可以使用vim編輯器了

[root@ken1 ~]# docker run -it centos-vim 
[root@61d090898bad /]# vim
[root@61d090898bad /]# vim test

上面演示瞭如何使用commit建立新的映象,但是docker並不建議使用這種方式建立映象,原因如下:

  • 這是一種手工建立映象的方式,容器出錯,而且效率低且可重複性弱
  • 更重要的是。使用者並不知道映象是如何建立出來的。裡面是否有惡意程式

Dockerfile構建映象

Dockerfile是由一組指令組成的檔案,其每條指令對應Linux中的一條命令,Docker程式通過讀取Dockerfile中的指令最終生成映象。

第一個Dockerfike

第一步:建立一個新的目錄

[root@ken1 ~]# mkdir /test

第二步:編寫Dockerfile

名稱就叫Dockerfile,且第一個D需要大寫

[root@ken1 ~]# cat Dockerfile
FROM centos
RUN yum install vim -y

FROMcentos表示使用centos這個基礎映象

RUN表示在centos上安裝vim編輯器

第三步:構建映象

[root@ken1 ~]# docker build -t centos-vim2 .

-t後面指定新的映象的標籤名(tag)

. 最後的一個點指明docker context為當前目錄。docker預設會從build context中查詢 Dockerfile檔案,我們也可以通過-f引數指定Dockerfile的位置

第四步:檢視映象

檢視映象分層結構

docker history會顯示映象的構建歷史,也就是Dockerfile的執行過程。

Dcokerfile常用指令

  1.FROM

指定base映象

  2. MAINTAINER

設定映象的作者。可以是任意的字元

  3.COPY

將檔案從build context複製到映象

COPY支援兩種格式:COPY src dest 和 COPY [「src」,」dest」]

注意:src只能制動build context中的檔案或目錄即在和Dockerfile同目錄下才可以

  4.ADD

與COPY類似,從build context複製檔案到映象。

不同的是,如果src是歸檔檔案(tar,zip,tgz,xz),檔案會被自動接要到dest

  5.ENV

設定環境變數,環境變數可被後面的指令使用,例如:

ENV name ken RUN echo $name

  6.EXPOSE

指定容器中的程序會監聽某個埠,Docker可以將該埠暴露出來

  7.VOLUME

將檔案或目錄宣告為volume

  8.WORKDIR

為後面的RUN,ENTRYPINT,ADD,COPY指令設定映象中的當前工作目錄

  9.RUN

在容器中執行指定的命令

  10.CMD

容器啟動時執行指定的命令

dockerfile中可以多個CMD指令,但是隻要最後一個生效。CMD可以被docker run之後的引數替換

  11.ENTRYPOINT

設定容器啟東市的命令

dockerfile中可以有多個ENTRYPOINT,但是隻有最後一個生效。

CMD或者docker run之後的引數會被當做引數傳遞給ENTERYPOINT.

Dockerfile演示

下面演示一個比較全面的dockerfile

[root@ken1 test]# cat Dockerfile 
#my Dockerfile
FROM busybox
MAINTAINER ken
WORKDIR /ken
RUN touch test
COPY ["ken1","."]
ADD ["wordpress.tar.gz","."]
ENV name "ken"

注意:Dockerfile支援以#開頭的註釋

構建映象

[root@ken1 test]# docker build -t myimage .
Sending build context to Docker daemon  4.281MB
Step 1/7 : FROM busybox
 ---> 3a093384ac30
Step 2/7 : MAINTAINER ken
 ---> Running in 2a73a83507ce
Removing intermediate container 2a73a83507ce
 ---> 8c3df9b3d823
Step 3/7 : WORKDIR /ken
 ---> Running in 31c6f9fe2195
Removing intermediate container 31c6f9fe2195
 ---> a458cf986072
Step 4/7 : RUN touch test
 ---> Running in e1b08ebd363c
Removing intermediate container e1b08ebd363c
 ---> 41601920009a
Step 5/7 : COPY ["ken1","."]
 ---> 2ebfa0933fca
Step 6/7 : ADD ["wordpress.tar.gz","."]
 ---> d0ad29d3aa34
Step 7/7 : ENV name "ken"
 ---> Running in fceae6e20e63
Removing intermediate container fceae6e20e63
 ---> 7efe0600e48f
Successfully built 7efe0600e48f
Successfully tagged myimage:latest

檢視映象

執行該映象

[root@ken1 test]# docker run -it myimage
/ken # ls
ken1       test       wordpress
/ken # echo $name
ken
  • 可以發現當前工作目錄為/ken,且自動建立
  • ken1是我們從docker context目錄中複製過去的
  • test是使用touch建立的
  • wordpres壓縮包已經被自動解壓
  • $name為變數值為ken

推薦學習:《》

以上就是建立Docker映象有幾種方式的詳細內容,更多請關注TW511.COM其它相關文章!