docker學習之dockerfile

docker學習之dockerfile

1什麼是Dockerfile

Dockerfile 用於構建一個新的Docker鏡像的腳本文件,是由一系列命令和參數構成的腳本。
構建新的鏡像步驟: 1. 編寫 Dockerfile 文件 2. 通過 docker build 命令生成新的鏡像 3. 通過 docker run 命令運行

2 DockerFile 文件示例


> FROM scratch  # 基礎鏡像,scratch相當於java中的Object ADD
> centos-7-x86_64-docker.tar.xz /  #  centos   LABEL
> org.label-schema.schema-version="1.0" \   # 標籤說明   
> org.label-schema.name="CentOS Base Image" \   
> org.label-schema.vendor="CentOS" \    org.label-schema.license="GPLv2"
> \    org.label-schema.build-date="20190305"   CMD ["/bin/bash"]  #
> 默認執行的命令,創建運行容器時最後會加上 /bin/bash,                   # 所以創建容器時,可不加
> /bin/bash ,即如下:                   # docker run -it --name=mycentos0
> centos:7                   # 如果加了,則在後面採用我們自己加的命令執行/bin/bash

3 Dockerfile 語法規則

  1. 每條指令的保留字都必須爲大寫字母且後面至少要有一個參數
  2. 執行順序按從上往下執行。
  3. . # 用於註釋
  4. 每條指令都會創建一個新的鏡像層,並對鏡像進行提交

4 Dockerfile 執行流程

  1. Docker 從基礎鏡像運行一個容器
  2. 執行每一條指定並對容器作出修改
  3. 執行類似 docker commit 的操作提交一個新的鏡像層
  4. docker 再基於剛提交的鏡像運行一個新容器
  5. 執行 Dockerfile 中的下一條指令直到所有指令都執行完成

5Dockerfile 常用指令

指令(大寫的是保留 字)
作用 參考
FROM image_name:tag
基礎鏡像,基於哪個基礎鏡像啓動構建流程
MAINTAINER user_name
鏡像的創建者的姓名和郵箱地址等 contos6.8
COPY source_dir/file dest_dir/file
和ADD相似,但是如果有壓縮文件並不能解壓 contos6.8
ADD source_dir/file dest_dir/file
將宿主機的文件複製到容器內,如果是一個壓縮文件, 將會在複製 後自動解壓
contos6.8
ENV key value 設置環境變量 (可以寫多條) tomcat7
RUN command
是Dockerfile的核心部分(可以寫多條),運行到當前行要執行的其他 命令(可想象成sout(“aaa”) )
tomcat7
WORKDIR path_dir
設置工作目錄,當創建容器後,命令終端默認登錄進來後所在的目 錄。未指定則爲根目錄 /
tomcat7
EXPOSE port 當前對外暴露的端口號,使容器內的應用可以通過端口和外界交互 tomcat7
CMD argument
Dockerfile中可以有多個CMD,但是隻有最後一個會生效。在構建容 器時,會被 docker run 後面指定的參數覆蓋。
tomcat7
ENTRYPOINT argument
和CMD相似,但是並不會被docker run指定的參數覆蓋,而是追加 參數
VOLUME 將宿主機文件夾掛載到容器中

6鏡像創建實戰
創建一個jdk鏡像
6.1 編寫dockerfile文件
在Linux上創建Dockerfile 文件
寫入以下代碼


6.2 通過 docker build 命令生成新的鏡像
構建鏡像語法:
docker build [-f 指定Dockerfile所在路徑與文件名] -t 生成的鏡像名:標籤名 .

注意後邊的 空格 和點 . 不要省略, . 表示當前目錄 -f 指定Dockerfile文件所在路徑與文件名。如果未指定 -f
值,則找當前目錄下名爲 Dockerfile 的構建文件 示例: 生成鏡像名爲jdk,標籤爲1.8

docker build -t jdk:1.8 .

6.3 通過 docker run 命令運行

docker run -it --name=myjdk8 jdk:1.8 /bin/bash
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章