1. 程式人生 > >使用dockerfile自定義映象.md

使用dockerfile自定義映象.md

Dockerfile該怎麼寫?

目前我會的docker執行方式就是簡單粗暴的docker pull下來別人的基礎環境,

然後把自己的專案丟進拉下來的基礎環境執行,

最終儲存退出,打包成自己的映象push到自己的docker hub中以供專案複用

有朋友問我是不是懂docker,我覺得略懂,然後問我如何寫Dockerfile,我也是一臉懵x,本著好學的心態去了解了一下Dockerfile的生成

docker?

專案執行依賴環境是必需的,我的python專案 nginx+redis+mysql+python+flask, 讓別人在他的電腦上如何快速執行我的專案?各種找資源安裝依賴?No, docker就是解決這個問題的,以容器+映象

的形式儲存依賴環境,就像虛擬機器一樣,讓別人快速擁有能執行專案的環境

Dockerfile?

就是將你的專案依賴打包成docker映象的一個檔案,開頭的D必須大寫

# 重度mac使用者,對windows小夥伴說聲抱歉
# 開啟終端,建立一個新目錄存放Dockerfile
cd ~
mkdir docker-demo
cd docker-demo
touch Dockerfile

這樣就準備好了,進入你的專案把依賴檔案拷貝一份,requirements.txt或者package.js等等

cp requirements.txt ~/
cd ~/docker-demo
vim Dockerfile

開始寫了

FROM tiangolo/uwsgi-nginx-flask:python3.6
COPY ./requirements.txt /tmp/
RUN pip install -r /tmp/requirements.txt

這就寫完了

然後執行

# 最後的.不要省略
# nginx是映象名,v1是tag,都是自己起的
# 如果後面要上傳到自己的映象倉庫dockerhub, 這塊的映象名最好起成 dockerhub的賬號名/映象
# 如 dockershi/django-demo
docker build -t nginx:v1 .

這樣就構建好啦,docker images可以檢視到生成的映象

來說下需要注意的地方,

FROM 後邊跟的是基礎映象。我找了一個相對比較全的基礎映象,基礎映象可以去docker hub去找

COPY 就是拷貝 當前目錄下的依賴檔案. 這裡要說的是儘量把依賴檔案單獨拎出來,因為這個./ 的意思是上下文,是相對路徑,所以你用…/req. /root/app/req都沒用

RUN 就是按層級執行,層級儘量不要太多

比如

RUN apt-get install redis
RUN apt-get install mongo
RUN apt-get install gcc

就直接寫成

RUN buildDeps = apt-get install redis \
	&& apt-get install mongo \
	&& apt-get install gcc \
	$buildDeps

$buildDeps結束 \換行承接上文