創建Docker鏡像有幾種方式

創建docker鏡像有2種方式:1、使用“docker commit”命令基于已有容器手動構建鏡像;2、使用Dockerfile自動構建鏡像,Docker程序會通過讀取Dockerfile構建文件中的指令自動生成鏡像。

創建Docker鏡像有幾種方式

本教程操作環境: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鏡像

創建Docker鏡像有幾種方式創建Docker鏡像有幾種方式

重新啟動新的鏡像,驗證是否可以使用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鏡像有幾種方式創建Docker鏡像有幾種方式

?查看鏡像分層結構

創建Docker鏡像有幾種方式創建Docker鏡像有幾種方式

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

Dcokerfile常用指令

  1.FROM

指定base鏡像

  2. MAINTAINER

設置鏡像的作者??梢允侨我獾淖址?/p>

  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

查看鏡像

創建Docker鏡像有幾種方式創建Docker鏡像有幾種方式

運行該鏡像

[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視頻教程

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享