Dockerfile 能夠自定義編寫鏡像,簡單來講就相似寫腳本,shell腳本應該接觸很多了,就是一個執行後就完成了。python
固然作好的鏡像也能夠傳到鏡像倉庫,就好像github上面同樣存儲,一個命令就能照搬下來安裝。linux
相信很多朋友會問,爲什麼docker run 一下python就中止了呢?(那執行完了不中止幹什麼?)git
還有爲何個人pip安裝,每次安裝完成了run下一個python容器就沒有已安裝的庫了?顯然run是每次都啓動一個新的容器。因此很多網友提倡用Dockerfile製做。github
一、學習只需三步:docker
二、Dockerfile命令科普:shell
FROM:基礎鏡像,當前新鏡像是基於哪一個鏡像的json
MAINTAINER:鏡像維護者的姓名和郵箱地址api
RUN:容器構建時須要運行的命令session
EXPOSE:當前容器對外暴露出的端口app
WORKDIR:指定在建立容器後,終端默認登錄的進來工做目錄,一個落腳點
ENV:用來在構建鏡像過程當中設置環境變量
ADD:將宿主機目錄下的文件拷貝進鏡像且 ADD 命令會自動處理 URL 和解壓 tar 壓縮包
COPY:相似 ADD,拷貝文件和目錄到鏡像中。(COPY src dest 或 COPY ["src","dest"])
VOLUME:容器數據卷,用於數據保存和持久化工做
CMD:指定一個容器啓動時要運行的命令,Dockerfile 中能夠有多個 CMD 指令,但只有最後一個生效,CMD 會被 docker run 以後的參數替換
ENTRYPOINT:指定一個容器啓動時要運行的命令,ENTRYPOINT 的目的和 CMD 同樣,都是在指定容器啓動程序及參數
ONBUILD:當構建一個被繼承的 Dockerfile 時運行命令,父鏡像在被子繼承後父鏡像的 onbuild 被觸發
三、網上的圖片介紹的還不錯,僅供參考:
安裝python3,而且安裝 requirements.txt 文件內的庫。
一、導出 requirements.txt:pip3 freeze >requirements.txt
[root@iZbp19lugf22zbsubsf1y6Z data]# pip3 freeze >requirements.txt [root@iZbp19lugf22zbsubsf1y6Z data]# ll total 8 -rw-r--r-- 1 root root 469 Jan 3 20:09 Dockerfile -rw-r--r-- 1 root root 1107 Jan 3 20:10 requirements.txt [root@iZbp19lugf22zbsubsf1y6Z data]# cat requirements.txt allure-pytest==2.8.6 allure-python-commons==2.8.6 amqp==1.4.9 anyjson==0.3.3 appdirs==1.4.3 attrs==19.3.0 Babel==2.7.0 bcrypt==3.1.7...等等
二、建立文件:vi dockerfile
[root@iZbp19lugf22zbsubsf1y6Z data]# vi Dockerfile
三、編寫 dockerfile,保存
# 基礎鏡像:python3.6.5鏡像 FROM python:3.6.5 # 鏡像維護者的姓名和郵箱地址 MAINTAINER gsxl <772262624@qq.com> # 構建時須要運行的命令,更新pip,爲了後面pip安裝 requirements.txt RUN pip install --upgrade pip # 工做目錄 WORKDIR /python ADD . /python # pip 安裝 requirements.txt RUN pip install -r requirements.txt # 指定容器啓動程序及參數 ENTRYPOINT ["pytest"] # 默認顯示help幫助信息 CMD ["--help"]
四、build 運行(注意後面有個 . ):dcoker build -t 鏡像:標籤 .
鏡像名及標籤 == test_py:v1
[root@iZbp19lugf22zbsubsf1y6Z data]# docker build -t test_py:v1 .
8個步驟,結果以下:
root@iZbp19lugf22zbsubsf1y6Z data]# docker build -t test_py:v1 . Sending build context to Docker daemon 4.096kB Step 1/8 : FROM python:3.6.5 ---> 9a58cce9b09f Step 2/8 : MAINTAINER gsxl <772262624@qq.com> ---> Using cache ---> ef78f308960d Step 3/8 : RUN pip install --upgrade pip ---> Using cache ---> fcd21328b7d4 Step 4/8 : WORKDIR /python ---> Running in 70727434375c Removing intermediate container 70727434375c ---> 89e7bb9cd6b5 Step 5/8 : ADD . /python ---> 32b2714720b4 Step 6/8 : RUN pip install -r requirements.txt ---> Running in 7a1727fa9b6f Collecting allure-pytest==2.8.6 Downloading https://files.pythonhosted.org/packages/8d/be/cc4877a9e2f998bbfd0289b6a2ffac153126b9c8f843ea733cd14371b7e3/allure_pytest-2.8.6-py2.py3-none-any.whl Collecting allure-python-commons==2.8.6 Downloading https://files.pythonhosted.org/packages/1a/7d/cd568f55d54012891ecea14f70ec3d8f2471f038f53df7a828f4b3e5080d/allure_python_commons-2.8.6-py2.py3-none-any.whl Collecting amqp==1.4.9...此處省略 Successfully built 18ccc91cdaf2 Successfully tagged test_py:v1
五、查看鏡像:docker images
[root@iZbp19lugf22zbsubsf1y6Z data]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test_py v1 18ccc91cdaf2 18 minutes ago 1.07GB
一、docker run -it --rm -v ~/data:/python test_py:v1 api_excel_demo/cases/test_register_api.py -s
[root@iZbp19lugf22zbsubsf1y6Z data]# docker run -it --rm -v ~/data:/python test_py:v1 api_excel_demo/cases/test_register_api.py -s ============================================================================================================================ test session starts ============================================================================================================================= platform linux -- Python 3.6.5, pytest-5.3.2, py-1.8.1, pluggy-0.13.1 rootdir: /python plugins: allure-pytest-2.8.6 collected 3 items api_excel_demo/cases/test_register_api.py {'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest'} *******正在執行用例:----- ID: 1 請求方式:post, 請求url:http://47.97.194.84:8000/api/register/ 請求類型爲:json ,body參數爲:{"account": "gsxl11", "email": "gsxl11@qq.com", "password": "gsxl11", "repassword": "gsxl11"} 響應信息爲:恭喜您,帳號已成功註冊 用例測試結果: ID: 1---->pass 檢查點---->:恭喜您,帳號已成功註冊 .{'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest'} *******正在執行用例:----- ID: 2 請求方式:post, 請求url:http://47.97.194.84:8000/api/register/ 請求類型爲:json ,body參數爲:{"account": "gsxl11", "email": "gsxl11@qq.com", "password": "gsxl11", "repassword": "gsxl11"} 響應信息爲:該用戶名已被註冊,請更換用戶名 用例測試結果: ID: 2---->pass 檢查點---->:該用戶名已被註冊,請更換用戶名 .{'Content-Type': 'application/json', 'X-Requested-With': 'XMLHttpRequest'} *******正在執行用例:----- ID: 3 請求方式:post, 請求url:http://47.97.194.84:8000/api/register/ 請求類型爲:json ,body參數爲:{"account": "", "email": "", "password": "", "repassword": ""} 響應信息爲:該用戶名已被註冊,請更換用戶名 用例測試結果: ID: 3---->pass 檢查點---->:該用戶名已被註冊,請更換用戶名 . ============================================================================================================================= 3 passed in 0.42s =============================================================================================================================
歡迎來QQ交流羣:482713805