原創(chuàng)文章溉贿,歡迎轉(zhuǎn)載阁猜。轉(zhuǎn)載請(qǐng)注明:轉(zhuǎn)載自IT人故事會(huì)拷恨,謝謝印蔬!
原文鏈接地址:「docker實(shí)戰(zhàn)篇」python的docker-docker鏡像的創(chuàng)建使用dockerfile(33)
從上篇docker commit學(xué)習(xí)可以了解到,鏡像的定制其實(shí)每一層添加的配置和文件基显,如果把每一層的修改配置,修改文件善炫,都寫入腳本撩幽,用這個(gè)腳本構(gòu)建定制鏡像,無法重復(fù)的問題,鏡像構(gòu)建透明性的問題窜醉,體積的問題都會(huì)解決宪萄。這個(gè)腳本就是Dockerfile。
Dockerfile
- 什么是dockerfile
一個(gè)文本文件榨惰,其內(nèi)包含了一條條的指令拜英,每一條指令構(gòu)建一層,因此每一條指令的內(nèi)容琅催,就是描述該層應(yīng)當(dāng)如何構(gòu)建居凶。
- 了解FROM
FROM指定基礎(chǔ)鏡像,基礎(chǔ)鏡像是必須指定的藤抡。而FROM就是指定基礎(chǔ)鏡像侠碧,因此一個(gè)Dockerfile中From是必備的指令,并且必須是第一條指令缠黍。在dockerhub上有很多高質(zhì)量的docker鏡像弄兜,有可以直接拿來使用的基礎(chǔ)鏡像:nginx,tomcat瓷式,java替饿,python,php贸典,mongodb视卢。搜尋最符合使用的的一個(gè)基礎(chǔ)鏡像。
- 了解RUN
RUN執(zhí)行命令是用來執(zhí)行命令行命令的瓤漏。由于命令行的強(qiáng)大能力腾夯,RUN指令在定制鏡像時(shí)最常用的指令之一。
shell 格式: RUN<命令>蔬充,就像直接在命令行中輸入的命令一樣
exec 格式: RUN["可執(zhí)行文件","參數(shù)1","參數(shù)2"]蝶俱,這更像是函數(shù)調(diào)用中的格式
- 不建議的寫成下面這種Dockerfile
之前說過Dockerfile每個(gè)指令都會(huì)創(chuàng)建一個(gè)層,下面這種寫法就是創(chuàng)建了7層的鏡像饥漫,這樣做就完全是沒有意義的榨呆,很多運(yùn)行不需要的東西都被裝到這個(gè)鏡像里面去了,編譯環(huán)境更新軟件包庸队,產(chǎn)生非常臃腫層非常多的鏡像积蜻,不僅僅增加了構(gòu)建部署的時(shí)間,也很容易出錯(cuò)彻消,也是初學(xué)docker容易犯的錯(cuò)誤竿拆,之前我也犯過。鏡像的層數(shù)是有限制的宾尚,最大層不能超過127層丙笋。鏡像是多層存儲(chǔ)的谢澈,在加入一層就是,之前的層不會(huì)被修改御板。
正確的方式锥忿。一定要做到每一層是需要的東西,任何無關(guān)的東西都要被清理掉怠肋。這也是制作鏡像容易犯的錯(cuò)誤敬鬓,之前安裝的文件沒有清理。
實(shí)戰(zhàn)編寫Dockerfile
- 創(chuàng)建目錄笙各,存放Dockerfile
mkdir newNginx
cd newNginx
- 編寫 Dockerfile
From nginx
RUN echo '<h1>welcome to idig8.com study docker</h1>' > /usr/share/nginx/html/index.html
- 構(gòu)建Dockerfile
docker build -t nginx:v2 .
docker images
- 推送docker hub推送
登錄docker hub
#先配置dns 8.8.8.8
vi /etc/resolv.conf
docker login
設(shè)置倉庫地址钉答,登錄hub.docker.com
更改名稱
docker tag nginx:v2 zhugeaming/nginx:v2
完成推送
docker push zhugeaming/nginx:v2
查看結(jié)果
PS:其實(shí)在開發(fā)的時(shí)候,多任務(wù)的時(shí)候酪惭,只需要一個(gè)python3和mitmproxy的鏡像環(huán)境希痴,已經(jīng)做好了,到時(shí)候直接用docker push zhugeaming/python3-appium春感,其實(shí)想學(xué)習(xí)docker其他內(nèi)容可以看我之前寫的其他文章砌创。