1. 程式人生 > >Docker-構建鏡像

Docker-構建鏡像

sha docke back code lis 用戶 shel ESS RF



一:構建鏡像

對於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

二.Dockerfile

用通俗一點的話來講:dockerfile就是根據自己的需要自定義一個鏡像,就像你寫shell腳本一樣,把一連串的過程或步驟全部寫進dockerfile文件中,一步一步的執行dockerfile文件中你寫的內容。

Dockerfile是一個文本文件,記錄了鏡像構建的所有步驟

ps:Dockerfile指令技術分享圖片

2.1.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@centos ~]# cat Dockerfile
FROM centos
RUN yum install vim -y

[root@centos ~]# pwd

/root

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

[root@qwer1234 ~]# pwd
/root
[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

1.當前目錄為root

2.Dockerfile準備就緒

3.運行docker build 命令,-t 將新鏡像命名為 centos-vim-dockerfile,命令末尾的 . 指明build context(構建環境)為當前目錄。Docker默認會從build context中查找Dockerfile文件,我們也可以通過 -f 參數指定Dokerfile文件位置

4.從這步開始就是鏡像真正的構建過程。首先Docker將build context中所有文件發送給Docker daemon。build context為鏡像構建提供所需要的文件或目錄

Dockerfile 中的ADD,COPY等命令可以將build context中的文件添加到鏡像。此例中,build context 為當前目錄/root,該目錄下的所有文件和子目錄都會被發送給Docker daemon。

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

5.step 1:執行FROM,將ubuntu 作為base鏡像。

Docker-構建鏡像