Docker學習5-Dockerfile編寫本身的鏡像

前言

Dockerfile 能夠自定義編寫鏡像,簡單來講就相似寫腳本,shell腳本應該接觸很多了,就是一個執行後就完成了。python

固然作好的鏡像也能夠傳到鏡像倉庫,就好像github上面同樣存儲,一個命令就能照搬下來安裝。linux

1、簡介

相信很多朋友會問,爲什麼docker run 一下python就中止了呢?(那執行完了不中止幹什麼?)git

還有爲何個人pip安裝,每次安裝完成了run下一個python容器就沒有已安裝的庫了?顯然run是每次都啓動一個新的容器。因此很多網友提倡用Dockerfile製做。github

一、學習只需三步:docker

  • 編寫 dockerfile
  • docker build image鏡像
  • docker run 運行容器

二、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 被觸發

三、網上的圖片介紹的還不錯,僅供參考:

 2、開始自定義製做 python3.6.5

安裝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

3、啓動容器

一、docker run -it --rm -v ~/data:/python test_py:v1 api_excel_demo/cases/test_register_api.py -s

  • -it :以交互模式運行容器
  • -v:掛載目錄~/data 到 容器內python文件夾
  • --rm:容器退出時,自動清除容器
  • test_py:v1:鏡像:標籤
  • -s:pytest 詳細信息
[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

相關文章
相關標籤/搜索