【Docker自定制鏡像之Dockerfile】
阿新 • • 發佈:2018-12-26
文本 腳本 瀏覽器 vol rfi docker 分享圖片 信息 exe
鏡像的定制,就是定制每一層所添加的配置、文件,如果可以把每一層修改、安裝、構建、操作的命令都寫入到一個腳本中,用腳本來構建、定制鏡像,這個腳本就是Dockerfile
Dockerfile
是一個文本文件,其內包含了一條條的指令(Instruction),每一條指令構建一層,因此每一條指令的內容就是沒每一層應當如何構建的.
Dockerfile ---------??
FROM
指定基於哪個鏡像文件來構建新的鏡像,盡量使用官方的bash image
示例:
FROM 鏡像名/鏡像ID[:tag]
LABEL
容器元消息,幫助信息,Metadata,類似於代碼註釋
示例:
LABEL version="1.0"版本標示
LABEL maintainer="name @163.com" 聲明制作人
RUN
創建鏡像時執行的命令
WORKDIR
切換工作目錄
COPY
把本機的文件添加到容器中
示例:
COPY flask_web.py /app/ 把本機的flask_web.py文件復制到容器中的/app目錄下,會自動創建/app目錄
ADD
除了COPY的功能外還有解壓功能,應優先使用COPY命令
ENV
設置環境變量,盡可能的使用ENV來設置環境變量,以增加可維護性
示例:
ENV MYSQL_VERSION 5.6 設置一個MySQL常量
RUN yum install -y mysql-server="${MYSQL_VERSION}"調用MySQL常量
CMD
設置容器啟動後默認執行的命令和參數
??如果定義多個CMD,則只有最後一個會執行
??如果 docker run 時指定了其它命令(例如:/bin/bash、python flask_web.py),則CMD命令會被忽略
EXPOSE
網絡設置
示例:
EXPOST 8080 暴露容器的8080端口
VOLUME
存儲設置
ENTRYPOINT
設置容器啟動時運行的命令
讓容器以應用程序或服務的形式運行,不會被忽略,一定會執行
關於Shell格式和Exec格式
對於相對的命令,Shell格式與Exec格式的對比如下.
Shell格式RUN yum -y install vim CMD echo "Hello Docker" ENTRYPOINT echo "Hello Docker"
Exec格式
RUN ["apt-get", "install", "-y", "vim"] CMD ["/bin/echo", "Hello Docker"] ENTRYPOINT["/bin/echo","Hello Docker"]
需要註意的是:
通過Shell格式運行的命令可以讀取設置的變量,而Exec格式則不可以讀取,Exec格式僅僅是執行一個命令.
下面將使用Dockerfile來制作一個Flask Web服務
首先,準備一個用於調用Flask web服務的腳本:"""flask_web.py文件代碼如下""" from flask import Flask app=Flask(__name__) @app.route(‘/‘) def run(): return ‘is ok‘ if __name__ == ‘__main__‘: app.run(host=‘0.0.0.0‘, port=8080) # 我們這裏使用的是8080端口
然後,開始寫Dockerfile:
# 指定基於哪個基礎鏡像來構建 FROM python:2.7 # 制作人 LABEL maintainer=‘zyk [email protected]‘ # 安裝flask第三方庫 RUN easy_install flask # 將本機的flask_web.py文件復制到容器的/app目錄下,會自動生成/app目錄 COPY flask_web.py /app/ # 進入/app目錄 WORKDIR /app # 暴露容器的8080端口 EXPOSE 8080 # 設置容器啟動後默認執行的命令和參數,以Exec格式執行,註意:要用雙引號 CMD ["python", "flask_web.py"]
最後,制作鏡像:
# ?? Dockerfile與flask_web.py文件在同級目錄 [root@fedora docker]# ls Dockerfile flask_web.py # 開始制作鏡像 [root@fedora docker]# docker build -t zyk/flask .
制作完成後,查看鏡像並啟動:
# 查一下鏡像ID [root@fedora docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE zyk/flask latest c4e156f3222a 50 seconds ago 911 MB # 啟動鏡像 [root@fedora docker]# docker run -d -p 9000:8080 c4e156f3222a
好了,打開瀏覽器訪問測試:
【Docker自定制鏡像之Dockerfile】