DockerFile基礎知識
1.基礎知識
- 每條保留字指令都必須為大寫字母且後面要跟至少一個引數(即不能只寫關鍵字然後不跟引數)
- 指令按照從上到下,順序執行
-
是註釋的意思
- 每條指令都會建立一個新的映象層,並對映象進行提交
2.執行dockefile的大致流程
- docker從基礎映象中執行一個容器
- 執行一條指令並對容器做出修改
- 執行類似docker commit的操作提交一個新的映象層
- docker再基於剛提交的映象執行一個新容器
- 執行dockerfile中的下一條指令直到所有指令都執行完成
3.指令介紹
- FROM:基礎映象,當前新的映象是基於哪個已經存在的鏡象的
- MAINTAINER:映象作者及其郵箱
- RUN:容器構建時需要執行的命令
- EXPOSE:暴露映象的埠號
- WORKDIR:指定在建立容器後,終端預設登入進來的工作目錄,一個落腳點
- ENV:用來在構建映象過程中設定環境變數
- ADD:將宿主機目錄下的檔案拷貝進映象且ADD命令會自動處理URL和解壓tar壓縮包
- COPY:跟ADD類似,拷貝檔案和目錄到映象中
- VOLUME:容器資料卷,用於資料儲存和持久化工作
- CMD:指定一個容器啟動時要執行的命令,dockefile可以有多個cmd指令,但只有最後一個生效,cmd會被docker run之後的引數替換
- ENTRYPOINT:指定一個容器啟動時要執行的命令,和CMD的目的一樣,都是在指定容器啟動程式及引數
- ONBUILD:當構建一個被繼承的dockefile時執行命令,父映象在被子繼承後父映象的onbuild被觸發
4.案例
4.1 Base映象
<b>scratch</b>: Docker中99%的映象都是通過在base映象中安裝配置構建成的
4.2 編寫dockefile檔案
# 命令列
flynngod@flynngod:~/FlynnGod/Code/DockerDir$ cat Dockerfile
# 基於哪個映象製作的新映象
# 如果是空的映象,則寫scratch
FROM python
# 作者資訊
MAINTAINER MoonMonsters qxinhai@yeah.net
# 設定環境變數
ENV MAIN_PATH /usr/local
# 當啟動容器時,在shell終端中預設進入的目錄
WORKDIR $MAIN_PATH
# 執行命令
RUN pip install flask
# 容器暴露給宿主機的埠
EXPOSE 80
# CMD命令,從上往下依次執行
CMD echo $MAIN_PATH
CMD echo "build success..."
# 列印pip版本
CMD echo pip -V
# 列印python版本
CMD echo python -V
當啟動容器時,預設開啟shell終端
CMD /bin/bash
4.3 執行dockerfile檔案,建立映象
[圖片上傳失敗...(image-ee8b95-1540119959172)]
具體解釋:
(1)編譯映象命令,-t後面的是生成的映象的名稱以及TAG;有個問題有點在意,編譯的路徑需要是目錄名稱,然後自動在該目錄下尋找Dockfile名稱的檔案自動編譯。
(2)編譯步驟,就是在Dockefile檔案中的程式碼順序。
(3)會執行pip install flask
命令,然後從網上或者快取中下載,由於之前測試過了,所以這步中它自動從快取中載入了。
(4)編譯成功提示。
(5)使用docker images
檢視已經建立好的映象。
4.4 由映象建立容器
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確實已經下載完成
>>> flask.__version__
'1.0.2'
相關文章
- 基礎知識
- java基礎知識Java
- 1、基礎知識
- 前端基礎知識前端
- Vue基礎知識Vue
- Camera基礎知識
- Hadoop基礎知識Hadoop
- python基礎知識Python
- BGP基礎知識
- Mybatis基礎知識MyBatis
- linux基礎知識Linux
- Kafka 基礎知識Kafka
- qml基礎知識
- python 基礎知識Python
- webpack基礎知識Web
- AI 基礎知識AI
- PRML 基礎知識
- JSP基礎知識JS
- Dart基礎知識Dart
- RabbitMQ基礎知識MQ
- Android基礎知識Android
- javascript基礎知識JavaScript
- Laravel基礎知識Laravel
- ThinkPHP基礎知識PHP
- Nginx基礎知識Nginx
- SpringCloud 基礎知識SpringGCCloud
- Redis基礎知識Redis
- PHP基礎知識PHP
- CSS基礎知識CSS
- Envoy基礎知識
- Webpack 基礎知識Web
- js基礎知識JS
- React基礎知識React
- 程式基礎知識
- Docker基礎知識Docker
- CSS 基礎知識 初識CSS
- MySQL基礎知識(5)MySql
- MySQL基礎知識(6)MySql