Docker-構建鏡像
一:構建鏡像
對於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-構建鏡像