例如:要在image(docker.xxx.me/xxx/onebox-dev:v0.1)上作一個定製的jenkins image, 1、首先在製做一個docker鏡像時須要獲取一個基礎image docker pull docker.xxx.me/xxx/onebox-dev:v0.1 # 獲取鏡像 2、啓動images docker run -it —name -p 8080:8080 jenkins docker.xxx.me/xxx/onebox-dev:v0.1 /bin/bash 3、在瀏覽器中打開jenkins,訪問地址爲:http://127.0.0.1:8080,而後根據本身需求配置jenkins, 4、jenkins配置好後,查看容器的進程,根據容器id檢查容器系統中變動的文件,最後提交文件變動,生成一個新的容器 docker ps #查看docker容器進程 docker diff 「CONTAINER ID」 #查看容器系統中變動的文件(A:新增的文件;C:修改的文件;D:刪除的文件) docker commit -m 「備註」 新容器名稱:tag #commit時可使用-m添加備註,要指定生成的容器的名字以及tag docker images #查看image列表,新生成的image會顯示出來
COPY:複製文件指令; 格式:COPY <源路徑(本地路徑)> <目標路徑(image中路徑)> demo:COPY start.sh /root/start.sh ADD:ADD和COPY的性質和格式是同樣的,ADD新增了一些功能,好比ADD會自動解壓被複制的壓縮文件,ADD的源路徑能夠是 url,ADD會嘗試去下載須要的資源; 格式:ADD <源路徑(本地路徑)> <目標路徑(image中路徑)> demo:ADD start.tar.gz /root/start.sh CMD:容器啓動指令,用戶能夠容器運行時執行CMD命令來代替image中設置的指令; shell格式:CMD <shell 命令> exec格式:CMD [「可執行文件」,「參數一」,「參數二」。。。] ENTRYPOINT:ENTRYPOINT和CMD命令同樣,都是指定容器啓動程序及參數,ENTRYPOINT也能夠在容器運行時替換image內部的指令,須要—entrypoint來指定替換;當指定了ENTRYPOINT時,CMD將再也不是能夠指定的命令,只是作ENTRYPOINT的一個參數存在;如:ENTRYPOINT "<CMD>」 格式:ENTRYPOINT [「可執行文件」,「參數一」,「參數二」...] ENV:設置環境變量;能夠在容器運行和構建過程當中使用 格式:ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>... ARG:構建參數,只能在image過程當中使用 格式:ARG <參數名>[=<默認值>] EXPOSE:聲明端口 格式:EXPOSE <端口號1> <端口號2> USER:指定當前用戶 格式:USER <用戶名> RUN:構建時運行指令 格式:RUN <指令1>&&<指令2>
例如,如今須要在centos7-java:v1(本地已存在)鏡像的基礎上使用Dockerfile製做一個image,Dockerfile以下:java
FROM centos7-java:V1 ENV http_port=10001 # 建立data目錄,賦予所有權限 RUN mkdir -p /data/configserver && chmod -R 777 /data/configserver # 複製編譯好的包到鏡像中 COPY magina.tar.gz /data/configserver/magina.tar.gz # 解壓工程文件 RUN cd /data/configserver && tar -zxvf magina.tar.gz # 刪除工程壓縮包 RUN rm -rf /data/configserver/magina.tar.gz # 暴露服務端口號 EXPOSE ${http_port} ENTRYPOINT ["/data/configserver/start.sh"]
docker build -t image-name:tag . # 會在終端中輸出構建步驟 最後使用docker images指令查看是否有新生成的image