Docker鏡像除了是Docker的核心技術以外,也是應用發佈的標準格式。 一個完整的Docker鏡像能夠支撐一個Docker容器的運行,在Doker的整個使用過程當中,進入一個已經定型的容器以後,就能夠在容器中進行操做,最多見的操做就是在容器中安裝應用服務,若是要把已經安裝的服務進行遷移,就須要把環境以及搭建的服務生成新的鏡像。html
建立鏡像的方法有三種,分別爲基於已有鏡像建立、基於本地模板建立以及基於Dockerfile建立。web
基於已有鏡像建立主要使用docker commit命令。實質就是把一一個 容器裏面運行的程序以及該程序的運行環境打包起來生成新的鏡像。docker
命令格式: docker commit [選項] 容器ID 名稱 倉庫名稱:[標籤]apache
經常使用選項: -m:說明信息 -a:做者信息 -p:生成過程當中中止容器的運行
查看本地鏡像,建立容器,將容器提交爲新的鏡像,須要記住該容器的ID號vim
docker images //查看全部鏡像 docker ps -a //查看全部容器 docker create -it jasonlix/docker-cobbler /bin/bash //建立容器 docker commit -m "new" -a "daoke" a2c2df6c8246 daoke:test //建立一個新的鏡像 docker images
經過導入操做系統模板文件能夠生成鏡像,模板能夠從OPENVZ開源項目下載centos
wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz //下載debian模板壓縮包 cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new //將下載的模板導入爲本地鏡像 docker images | grep new //查看本地鏡像
Dockerfile是由一組指令組成的文件,其中每條指令對應Linux中的一條命令,Docker程序將讀取Dockerfile中的指令生成指定鏡像。bash
Dockerfile結構大體分爲四個部分:基礎鏡像信息、維護者信息、鏡像操做指令和容器啓動時執行指令。Dockerfile每行支持一條指令,每條指令可攜帶多個參數,支持使用以「#」號開頭的註釋。網絡
在編寫Dockerfile時,有嚴格的格式須要遵循:第一行必須使用FROM指令指明所基於的鏡像名稱;以後使用MAINTAINER指令說明維護該鏡像的用戶信息;而後是鏡像操做相關指令,如RUN指令,每運行一條指令,都會給基礎鏡像添加新的一層;最後使用CMD指令,開指定啓動容器時要運行的命令操做。ide
FROM鏡像:指定新鏡像所基於的鏡像,第一條指令必須爲FROM指令,每建立一個鏡像就須要一條FROM指令 MAINTAINER 名字:說明新鏡像的維護人信息 RUN命令:在所基於的鏡像上執行命令,並提交到新的鏡像中 CMD["要運行的程序","參數1","參指2"]:指定啓動容器時要運行的命令或者腳本,Dockerfile只能有一條CMD命令,若是指定多條則只有最後一條被執行 EXPOSE端口號:指定新鏡像加載到Docker時要開啓的端口 ENV環境變量變量值:設置一個環境變量的值,會被後面的RUN使用 ADD 源文件/目錄 目標文件/目錄:將源文件複製到目標文件中,源文件要與Dockerfile位於相同目錄中,或者是一個URL COPY 源文件/目錄 目標文件/目錄:將本地主機上的源文件/目錄複製到目標地點,源文件/目錄要與Dockerfile在相同的目錄中 VOLUME["目錄"]:在容器中建立一個掛載點 USER用戶名/UID:指定運行容器時的用戶 WORKDIR路徑:爲後續的RUN、CMD、ENTRYPOINT指定工做目錄 ONBUILD命令:指定所生成的鏡像做爲一個基礎鏡像時所要運行的命令
mkdir /opt/apache cd /opt/apache
vim Dockerfile #基於的基礎鏡像 FROM centos #維護鏡像的用戶信息 MAINTAINER The porject <cloud-ops@centos.org> #鏡像操做指令安裝apache軟件 RUN yum -y install httpd #開啓 80 端口 EXPOSE 80 #複製網站首頁文件 ADD index.html /var/www/html/index.html #將執行腳本複製到鏡像中 ADD run.sh /run.sh RUN chmod 755 /run.sh #啓動容器時執行腳本 CMD ["/run.sh"]
vim run.sh #!/bin/bash rm -rf /run/httpd/* exec /usr/sbin/apachectl -D FOREGROUND
echo "web test" > index.html
此時/opt/apache目錄下應有三個文件
測試
命令格式:docker build [選項] 路徑
經常使用選項: -t:指定鏡像的標籤信息
docker build -t httpd:centos . //注意別忘了末尾有"."
接上圖
能夠看到整個建立過程當中,每運行一次Dockerfile中的指令,都會給初始鏡像加上新的一層。
docker run -d -p 1216:80 httpd:centos
-p 選項實現從本地端口1216到容器中80端口的映射
http://192.168.1.29:1216/
容器中的Apache服務已經成功運行
ps:建立鏡像過程當中遇到以下警告: WARNING: IPv4 forwarding is disabled. Networking will not work. 一條命令解決問題:sysctl -w net.ipv4.ip_forward=1