python測(cè)開(kāi)平臺(tái)使用dockerfile構(gòu)建鏡像

容器技術(shù)經(jīng)歷過(guò)多年發(fā)展后,已經(jīng)被越拉越多的公司采用,同時(shí)越來(lái)越多的軟件支持以容器的形式進(jìn)行分發(fā),我們今天就以python測(cè)開(kāi)平臺(tái)為例采用編寫(xiě)dockerfile文件并編譯,生成容器鏡像。

Dockerfile語(yǔ)法介紹

首先我們先通過(guò)編寫(xiě)完成的dockerfile文件了解下語(yǔ)法

FROMpython:3.6-alpine

COPY . /work

WORKDIR /work

RUN pip3 install -r requirements.txt

CMD python3 docker.py

RUNpip3install-rrequirements.txt

CMDpython3docker.py

from指令用于指定基礎(chǔ)鏡像,語(yǔ)法如下:

FROM? <image>[:<tag> | @<digest>] [AS <name>]

這里我們指定基礎(chǔ)鏡像為python,tag為3.6-alpine,其中3.6為python的版本,alpine是linux操作系統(tǒng),關(guān)于alpine的更多信息可以參考官網(wǎng)https://www.alpinelinux.org/。

copy指令用于復(fù)制文件到容器中,語(yǔ)法如下:

? ? COPY <src> <dest>

這里我們將當(dāng)前目錄下的所有內(nèi)容復(fù)制到容器中的/work目錄下,容器會(huì)為我們自動(dòng)創(chuàng)建work目錄。

workdir指令用于指定工作目錄,語(yǔ)法如下:

? ? WORKDIR <dir>

這條指令運(yùn)行效果相當(dāng)于cd <dir>,在容器中會(huì)切換到work目錄。

run指令用于指定構(gòu)建鏡像時(shí)的指令,可以是任何指令,語(yǔ)法如下:

? ??RUN <command>

我們通過(guò)run指令告訴容器需要通過(guò)pip安裝依賴,依賴使用requirements.txt描述。

cmd指令用于指定容器運(yùn)行的內(nèi)容,語(yǔ)法如下:

? ??CMD command param1 param2

我們這里使用python啟動(dòng)平臺(tái)。

編譯鏡像

我們?cè)陧?xiàng)目根目錄下輸入以下指令進(jìn)行鏡像編譯

? ? docker build -f Dockerfile .

注意指令末尾的點(diǎn)不能省略,編譯過(guò)程較緩慢請(qǐng)耐心等待。

$ docker build -f Dockerfile .

Sending build context to Docker daemon? 14.34kB

Step 1/5 : FROM python:3.6-alpine

---> 8880aaf979d2

Step 2/5 : COPY . /work

---> 57277dc5819c

Step 3/5 : WORKDIR /work

---> Running in bc22b0faee90

Removing intermediate container bc22b0faee90

---> 64b3f3ca976a

Step 4/5 : RUN pip3install-r requirements.txt

---> Running in 96f1f7faa2b7

Collecting flask==1.1.1

Downloading https://files.pythonhosted.org/packages/9b/93/628509b8d5dc749656a9641f4caf13540e2cdec85276964ff8f43bbb1d3b/Flask-1.1.1-py2.py3-none-any.whl (94kB)

Collecting Werkzeug>=0.15

Downloading https://files.pythonhosted.org/packages/ce/42/3aeda98f96e85fd26180534d36570e4d18108d62ae36f87694b476b83d6f/Werkzeug-0.16.0-py2.py3-none-any.whl (327kB)

Collecting click>=5.1

Downloading https://files.pythonhosted.org/packages/fa/37/45185cb5abbc30d7257104c434fe0b07e5a195a6847506c074527aa599ec/Click-7.0-py2.py3-none-any.whl (81kB)

Collecting itsdangerous>=0.24

Downloading https://files.pythonhosted.org/packages/76/ae/44b03b253d6fade317f32c24d100b3b35c2239807046a4c953c7b89fa49e/itsdangerous-1.1.0-py2.py3-none-any.whl

Collecting Jinja2>=2.10.1

Downloading https://files.pythonhosted.org/packages/65/e0/eb35e762802015cab1ccee04e8a277b03f1d8e53da3ec3106882ec42558b/Jinja2-2.10.3-py2.py3-none-any.whl (125kB)

Collecting MarkupSafe>=0.23

Downloading https://files.pythonhosted.org/packages/b9/2e/64db92e53b86efccfaea71321f597fa2e1b2bd3853d8ce658568f7a13094/MarkupSafe-1.1.1.tar.gz

Building wheelsforcollected packages: MarkupSafe

Building wheelforMarkupSafe (setup.py): started

Building wheelforMarkupSafe (setup.py): finishedwithstatus'done'

Created wheelforMarkupSafe: filename=MarkupSafe-1.1.1-cp36-none-any.whlsize=12629sha256=8f9be0cc4e0b219015ffcd57680fb4b3b10a0a9f99acc9baff5b202dd0d0ee41

Storedindirectory: /root/.cache/pip/wheels/f2/aa/04/0edf07a1b8a5f5f1aed7580fffb69ce8972edc16a505916a77

Successfully built MarkupSafe

Installing collected packages: Werkzeug, click, itsdangerous, MarkupSafe, Jinja2, flask

Successfully installed Jinja2-2.10.3MarkupSafe-1.1.1Werkzeug-0.16.0click-7.0flask-1.1.1itsdangerous-1.1.0

Removing intermediatecontainer96f1f7faa2b7

---> c65963ff7ac3

Step5/5: CMD python3 docker.py

---> Running in 42eadb45fd22

Removing intermediatecontainer42eadb45fd22

---> c4176f52ee28

Successfully built

SECURITYWARNING: Youarebuilding a Docker imagefromWindows against a non-Windows Docker host. All filesanddirectories addedtobuildcontextwill have'-rwxr-xr-x'permissions. Itisrecommendedtodoublecheckandresetpermissionsforsensitive filesanddirectories.

我們可以看到名為c4176f52ee28的容器被成功編譯,輸入

docker run -it -p 5000:5000c4176f52ee28

? ? 啟動(dòng)容器并打開(kāi)瀏覽器訪問(wèn)

注:Mac需替換192.168.99.100為自己的機(jī)器IP。

附錄

平臺(tái)代碼

fromflaskimportFlask

app = Flask(__name__)

@app.route('/')

def index():

return"flask in docker!"

if__name__ =='__main__':

app.run(

host="0.0.0.0",

port=5000,

)

requirements.txt文件

flask==1.1.1

Dockerfile文件

FROMpython:3.6-alpine

COPY . /work

WORKDIR /work

RUN pip3 install -r requirements.txt

CMD python3 docker.py

作  者:Testfan?大貓老師

出  處:微信公眾號(hào):自動(dòng)化軟件測(cè)試平臺(tái)

版權(quán)說(shuō)明:歡迎轉(zhuǎn)載,但必須注明出處,并在文章頁(yè)面明顯位置給出文章鏈接

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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