DockerFile基礎(chǔ)知識

1.基礎(chǔ)知識

  • 每條保留字指令都必須為大寫字母且后面要跟至少一個參數(shù)(即不能只寫關(guān)鍵字然后不跟參數(shù))
  • 指令按照從上到下,順序執(zhí)行
  • 是注釋的意思

  • 每條指令都會創(chuàng)建一個新的鏡像層,并對鏡像進(jìn)行提交

2.執(zhí)行dockefile的大致流程

  • docker從基礎(chǔ)鏡像中運(yùn)行一個容器
  • 執(zhí)行一條指令并對容器做出修改
  • 執(zhí)行類似docker commit的操作提交一個新的鏡像層
  • docker再基于剛提交的鏡像運(yùn)行一個新容器
  • 執(zhí)行dockerfile中的下一條指令直到所有指令都執(zhí)行完成

3.指令介紹

  • FROM:基礎(chǔ)鏡像,當(dāng)前新的鏡像是基于哪個已經(jīng)存在的鏡象的
  • MAINTAINER:鏡像作者及其郵箱
  • RUN:容器構(gòu)建時需要執(zhí)行的命令
  • EXPOSE:暴露鏡像的端口號
  • WORKDIR:指定在創(chuàng)建容器后,終端默認(rèn)登錄進(jìn)來的工作目錄,一個落腳點
  • ENV:用來在構(gòu)建鏡像過程中設(shè)置環(huán)境變量
  • ADD:將宿主機(jī)目錄下的文件拷貝進(jìn)鏡像且ADD命令會自動處理URL和解壓tar壓縮包
  • COPY:跟ADD類似,拷貝文件和目錄到鏡像中
  • VOLUME:容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化工作
  • CMD:指定一個容器啟動時要執(zhí)行的命令,dockefile可以有多個cmd指令,但只有最后一個生效,cmd會被docker run之后的參數(shù)替換
  • ENTRYPOINT:指定一個容器啟動時要執(zhí)行的命令,和CMD的目的一樣,都是在指定容器啟動程序及參數(shù)
  • ONBUILD:當(dāng)構(gòu)建一個被繼承的dockefile時運(yùn)行命令,父鏡像在被子繼承后父鏡像的onbuild被觸發(fā)

4.案例

4.1 Base鏡像

<b>scratch</b>: Docker中99%的鏡像都是通過在base鏡像中安裝配置構(gòu)建成的

4.2 編寫dockefile文件

# 命令行
flynngod@flynngod:~/FlynnGod/Code/DockerDir$ cat Dockerfile 
# 基于哪個鏡像制作的新鏡像
# 如果是空的鏡像,則寫scratch
FROM python
# 作者信息
MAINTAINER MoonMonsters qxinhai@yeah.net
# 設(shè)置環(huán)境變量
ENV MAIN_PATH /usr/local
# 當(dāng)啟動容器時,在shell終端中默認(rèn)進(jìn)入的目錄
WORKDIR $MAIN_PATH
# 執(zhí)行命令
RUN pip install flask
# 容器暴露給宿主機(jī)的端口
EXPOSE 80
# CMD命令,從上往下依次執(zhí)行
CMD echo $MAIN_PATH
CMD echo "build success..."
# 打印pip版本
CMD echo pip -V
# 打印python版本
CMD echo python -V
當(dāng)啟動容器時,默認(rèn)打開shell終端
CMD /bin/bash

4.3 執(zhí)行dockerfile文件,創(chuàng)建鏡像

[圖片上傳失敗...(image-ee8b95-1540119959172)]
具體解釋:
(1)編譯鏡像命令,-t后面的是生成的鏡像的名稱以及TAG;有個問題有點在意,編譯的路徑需要是目錄名稱,然后自動在該目錄下尋找Dockfile名稱的文件自動編譯。
(2)編譯步驟,就是在Dockefile文件中的代碼順序。
(3)會執(zhí)行pip install flask命令,然后從網(wǎng)上或者緩存中下載,由于之前測試過了,所以這步中它自動從緩存中加載了。
(4)編譯成功提示。
(5)使用docker images查看已經(jīng)創(chuàng)建好的鏡像。

4.4 由鏡像創(chuàng)建容器

flynngod@flynngod:~/FlynnGod/Code/DockerDir$ docker run -it --name=mypython customer_python:v2
root@e6e67c899b38:/usr/local# python
Python 3.7.0 (default, Oct 16 2018, 07:10:55) 
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import flask
# flask確實已經(jīng)下載完成
>>> flask.__version__
'1.0.2'
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容