製作鏡像有2種方式,一種是容器轉換成鏡像,另一種是使用dockerfile創建鏡像,一般後者更常用。 容器轉為鏡像 使用 命令將容器轉換成鏡像 需要轉移鏡像時,將該鏡像打成一個包 在另一臺電腦載入這個鏡像時,載入這個包 使用dockerfile創建鏡像(推薦) dockerfile是一個文本文件,包 ...
製作鏡像有2種方式,一種是容器轉換成鏡像,另一種是使用dockerfile創建鏡像,一般後者更常用。
容器轉為鏡像
- 使用
docker commit
命令將容器轉換成鏡像
docker commit 容器id 鏡像名稱:版本號
- 需要轉移鏡像時,將該鏡像打成一個包
docker save -o 壓縮文件名稱 鏡像名稱:版本號
- 在另一臺電腦載入這個鏡像時,載入這個包
docker load –i 壓縮文件名稱
使用dockerfile創建鏡像(推薦)
dockerfile是一個文本文件,包含了一條條指令,每條指令構建一層,基於基礎鏡像,最終構建出一個新的鏡像。
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鏡像
要求:
- 預設登錄路徑為/usr
- 可以使用vim
實現步驟:
vi centos_dockerfile
在文件中輸入以下內容保存並退出:
FROM centos:7 # 定義父鏡像
MAINTAINER itheima<[email protected]> # 定義作者信息
RUN yum install -y vim # 執行安裝vim命令
WORKDIR /usr # 定義預設的工作目錄
CMD /bin/bash # 定義容器啟動執行的命令
- 通過
centos_dockerfile
構建鏡像:
docker bulid –f ./centos_dockerfile –t 鏡像名稱:版本 .
(註意最後還有個點,表示指定鏡像構建過程中的上下文環境的目錄) ,由於網路的原因安裝vim過程可能會失敗,多執行幾次該命令就好了。
部署Spring boot項目
需求:
- 定義dockerfile發佈Spring boot項目
實現:
- 新建
springboot_dockerfile
文件,jar包和dockerfile
文件需要在同一個目錄下
FROM java:8
MAINTAINER itheima<[email protected]>
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