製做鏡像有2種方式,一種是容器轉換成鏡像,另外一種是使用dockerfile建立鏡像,通常後者更經常使用。java
容器轉爲鏡像
- 使用
docker commit
命令將容器轉換成鏡像
docker commit 容器id 鏡像名稱:版本號
- 須要轉移鏡像時,將該鏡像打成一個包
docker save -o 壓縮文件名稱 鏡像名稱:版本號
- 在另外一臺電腦加載這個鏡像時,加載這個包
docker load –i 壓縮文件名稱
使用dockerfile建立鏡像(推薦)
dockerfile是一個文本文件,包含了一條條指令,每條指令構建一層,基於基礎鏡像,最終構建出一個新的鏡像。spring
dockerfile用到的關鍵字
關鍵字 | 做用 | 備註 |
---|---|---|
FROM | 指定父鏡像 | 指定dockerfile基於那個image構建 |
MAINTAINER | 做者信息 | 用來標明這個dockerfile誰寫的 |
LABEL | 標籤 | 用來標明dockerfile的標籤 可使用Label代替Maintainer 最終都是在docker image基本信息中能夠查看 |
RUN | 執行命令 | 執行一段命令 默認是/bin/sh 格式: RUN command 或者 RUN ["command" , "param1","param2"] |
CMD | 容器啓動命令 | 提供啓動容器時候的默認命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD ["command" , "param1","param2"] |
ENTRYPOINT | 入口 | 通常在製做一些執行就關閉的容器中會使用 |
COPY | 複製文件 | build的時候複製文件到image中 |
ADD | 添加文件 | build的時候添加文件到image中 不單單侷限於當前build上下文 能夠來源於遠程服務 |
ENV | 環境變量 | 指定build時候的環境變量 能夠在啓動的容器的時候 經過-e覆蓋 格式ENV name=value |
ARG | 構建參數 | 構建參數 只在構建的時候使用的參數 若是有ENV 那麼ENV的相同名字的值始終覆蓋arg的參數 |
VOLUME | 定義外部能夠掛載的數據卷 | 指定build的image那些目錄能夠啓動的時候掛載到文件系統中 啓動容器的時候使用 -v 綁定 格式 VOLUME ["目錄"] |
EXPOSE | 暴露端口 | 定義容器運行的時候監聽的端口 啓動容器的使用-p來綁定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp |
WORKDIR | 工做目錄 | 指定容器內部的工做目錄 若是沒有建立則自動建立 若是指定/ 使用的是絕對地址 若是不是/開頭那麼是在上一條workdir的路徑的相對路徑 |
USER | 指定執行用戶 | 指定build或者啓動的時候 用戶 在RUN CMD ENTRYPONT執行的時候的用戶 |
HEALTHCHECK | 健康檢查 | 指定監測當前容器的健康監測的命令 基本上沒用 由於不少時候 應用自己有健康監測機制 |
ONBUILD | 觸發器 | 當存在ONBUILD關鍵字的鏡像做爲基礎鏡像的時候 當執行FROM完成以後 會執行 ONBUILD的命令 可是不影響當前鏡像 用處也不怎麼大 |
STOPSIGNAL | 發送信號量到宿主機 | 該STOPSIGNAL指令設置將發送到容器的系統調用信號以退出。 |
SHELL | 指定執行腳本的shell | 指定RUN CMD ENTRYPOINT 執行命令的時候 使用的shell |
dockerfile案例
自定義centos鏡像
要求:docker
- 默認登陸路徑爲/usr
- 可使用vim
實現步驟:shell
vi centos_dockerfile
在文件中輸入如下內容保存並退出:
FROM centos:7 # 定義父鏡像 MAINTAINER itheima<itheima@itcast.cn> # 定義做者信息 RUN yum install -y vim # 執行安裝vim命令 WORKDIR /usr # 定義默認的工做目錄 CMD /bin/bash # 定義容器啓動執行的命令
- 經過
centos_dockerfile
構建鏡像:
docker bulid –f ./centos_dockerfile –t 鏡像名稱:版本 .
(注意最後還有個點,表示指定鏡像構建過程當中的上下文環境的目錄) ,因爲網絡的緣由安裝vim過程可能會失敗,多執行幾回該命令就行了。vim
部署Spring boot項目
需求:centos
- 定義dockerfile發佈Spring boot項目
實現:springboot
- 新建
springboot_dockerfile
文件,jar包和dockerfile
文件須要在同一個目錄下
FROM java:8 MAINTAINER itheima<itheima@itcast.cn> ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar # 把springboot項目的jar包添加到鏡像中並換個簡短的名字app.jar CMD java -jar app.jar # 運行jar包
- 經過
springboot_dockerfile
構建鏡像
docker build -f ./springboot_dockerfile -t app . # 新的鏡像名稱爲app