對於docker用戶來講,最好的狀況是不須要本身建立鏡像,幾乎全部的經常使用的數據庫、中間件、應用軟件等都有現成的docker官方鏡像或其餘人和組織建立的鏡像,咱們只須要稍微配置就能夠直接使用。
可是在某些狀況下,也須要本身構建鏡像。
好比:
一、找不到現成的鏡像,好比本身開發應用程序
二、須要在鏡像中加入特定的功能。
docker提供了兩種構建鏡像的方法:docker commit命令和Dockerfile構建文件。docker
docker commit命令式建立鏡像最直觀的方法,其過程包含3個步驟
一、運行容器
二、修改容器
三、將容器保存爲新的鏡像
好比: 在Ubuntu base鏡像中安裝vi並保存爲新鏡像
(1)運行容器
-it 參數的做用式以交互的模式進入容器,並打開終端。
2b1763cc8299就是容器內部的ID
(2)安裝vim
確認vim沒有安裝
安裝vim,以下所示:
(3)保存爲新鏡像
在新窗口中查看當前運行的容器
distracter_chaum是Docker爲咱們的容器隨機分配的名字
執行docker commit命令將容器保存爲鏡像
新鏡像命名爲ubuntu-with-vim
查看新鏡像的屬性,以下所示:
能夠看到新鏡像由於安裝了vim軟件而變大了
重新鏡像啓動容器,驗證vim已經可使用
數據庫
雖然咱們可使用docker commit建立新鏡像,可是docker不建議用戶使用這種方式構建鏡像。緣由以下:
一、該方式是手工建立鏡像的方式了,容易出錯,效率低可重複性弱
二、沒法對鏡像進行審計,存在安全隱患ubuntu
Dockerfile是一個文本文件,記錄了鏡像構建的全部步驟vim
新建一個文本文件Dockerfile,內容以下:
如下爲運行docker build命令構建鏡像並詳細分析細節安全
[root@docker-1 ~]# docker build -t ubuntu-with-vim-dockerfile . (1) Sending build context to Docker daemon 13.31kB (2) Step 1/2 : FROM ubuntu (3) ---> a2a15febcdf3 Step 2/2 : RUN apt-get update && apt-get install -y vim (4) ---> Running in ad7fa94cfb94 (5) Successfully built ad7fa94cfb94 (6) Successfully tagged ubuntu-with-vim-dockerfile:latest (7)
說明:
一、運行docker build命令,-t將新鏡像命名爲ubuntu-with-vim-dockerfile 命令末尾的.指明build context爲當前目錄。Docker默認會從build context中查找Dockerfile文件,
也能夠經過-f參數指定Dockerfile文件的位置
二、鏡像構造過程。首先Docker將build context中的文件發送給Docker daemon,bulid context爲鏡像構建提供所須要的文件或目標。Dockerfile中的ADD,COPY命令能夠將build context中的文件添加到鏡像,此例中,bulid context爲當前目錄.root,該目錄下的全部文件和子目錄都會被髮送給Docker daemon。注意不要將多餘文件放到bulid context,特別不要把/,/usr做爲bulid context,不然構建過程當中會至關的緩慢甚至失敗
三、Step1,執行FROM,將Ubuntu做爲base鏡像,鏡像ID爲a2a15febcdf3
四、Step2,執行RUN,安裝vim
五、啓動臨時容器,在容器中經過apt-get安裝vim
六、安裝完成後,將容器保存爲鏡像,其ID爲ad7fa94cfb94
該步驟底層使用相似docker commit的命令
七、鏡像構建成功ide
經過docker images查看鏡像信息學習