使用Dockerfile建立docker鏡像
基本結(jié)構(gòu)
Dockerfile分為四個(gè)部分:基礎(chǔ)鏡像信息、維護(hù)者信息寞蚌、鏡像操作指令和容器啟動(dòng)時(shí)指令田巴。例如:
FROM ubuntu:16.04
# 維護(hù)者信息
MAINTAINER Northfly "northfly@163.com"
# 鏡像操作指令
RUN apt-get update \
&& apt-get install -y python-pip python3-pip
RUN pip install --upgrade pip
RUN pip install tensorflow==1.5.0 \
jupyter==1.0.0 \
xgboost==0.80 \
scikit-learn==0.19.2 \
pandas==0.22.0 \
keras==2.2.2
RUN pip3 install --upgrade pip
RUN pip3 install tensorflow==1.5.0 \
jupyter==1.0.0 \
xgboost==0.80 \
scikit-learn==0.19.2 \
pandas==0.22.0 \
keras==2.2.2
# 容易啟動(dòng)時(shí)執(zhí)行指令
CMD [ "/bin/bash" ]
指令介紹
1.FROM
格式為FROM <image> 或 FROM<image>:<tag>,例如:
FROM ubuntu 或 FROM ubuntu:16.04
2.MAINTAINER
格式為MAINTAINER <name> <other info>睬澡,例如:
MAINTAINER Northfly "northfly@163.com"
3.RUN
格式為RUN <command>或RUN ["executable","param1","param1"]固额,例如:
RUN apt-get update 或 RUN ["/bin/bash", "-c", "echo hello"]
# 命令較長時(shí)可以使用\來換行,例如:
RUN apt-get update \
&& apt-get install -y python-pip python3-pip
4.CMD
支持三種格式:
CMD ["executable","param1","param2"] 使用exec執(zhí)行,推薦方式
CMD command param1 param2 在/bin/sh中執(zhí)行,提供給需要交互的應(yīng)用
CMD ["param1","param2"] 提供給ENTRYPOINT的默認(rèn)參數(shù)
指定啟動(dòng)容器時(shí)執(zhí)行的命令煞聪,每個(gè)Dockerfile只能有一條CMD命令斗躏。如果指定了多條命令,只有最后一條被執(zhí)行
如果用戶啟動(dòng)容器時(shí)指定了運(yùn)行的命令昔脯,則會(huì)覆蓋掉CMD指定的命令
5.EXPOSE
暴露容器的端口號(hào)啄糙,如ssh服務(wù)需要暴露容器的端口號(hào)22,可以執(zhí)行
EXPOSE 22
啟動(dòng)容器是使用-p,則可以具體指定哪個(gè)本地端口映射過來
6.ENV
格式為ENV <key> <value>云稚。指定一個(gè)環(huán)境變量隧饼,會(huì)被后續(xù)RUN指令使用,并在容器運(yùn)行時(shí)保持静陈。例如:
ENV CUDA_HOME /usr/local/cuda
7.ADD
格式為ADD <src> <dest>.
該命令將復(fù)制指定的<src>到容器中的<dest>燕雁。其中<src>可以是Dockerfile所在目錄的一個(gè)相對(duì)路徑(文件或目錄);也可以是一個(gè)URL;還可以是一個(gè)tar文件(自動(dòng)解壓為目錄)鲸拥。
8.COPY
格式為COPY <src> <dest>
復(fù)制本地主機(jī)的<src>(為Dockerfile所在目錄的相對(duì)路徑拐格,文件或目錄)為容器中的<dest>。目標(biāo)路徑不存在是刑赶,會(huì)自動(dòng)創(chuàng)建捏浊。
當(dāng)使用本地目錄為源目錄時(shí),推薦使用COPY撞叨。
9.ENTRYPOINT
有兩種格式:
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2(shell中執(zhí)行)
配置容器啟動(dòng)后執(zhí)行的命令金踪,并且不可被docker run提供的參數(shù)覆蓋。
每個(gè)Dockerfile中只能有一個(gè)ENTRYPOINT,當(dāng)指定多個(gè)ENTRYPOINT時(shí)牵敷,只有最后一個(gè)生效
10.VOLUME
格式為VULUME ["/data"]
創(chuàng)建一個(gè)可以從本地主機(jī)或其他容器掛載的掛載點(diǎn)胡岔,一般用來存放數(shù)據(jù)庫和需要保持的數(shù)據(jù)等。
11.USER
格式為USER daemon
指定運(yùn)行容器是的用戶名或UID,后續(xù)的RUN也會(huì)使用指定用戶枷餐。
12.WORKDIR
格式為WORKDIR /path/to/workdir
為后續(xù)的RUN姐军、CMD、ENTERYPOINT指令配置工作目錄
可以使用多個(gè)WORKDIR指令,后續(xù)命令如果參數(shù)是相對(duì)路徑奕锌,則會(huì)基于之前命令指定著觉。例如:
WORKDIR /home
WORKDIR user
WORKDIR Downloads
RUN pwd
則最終路徑為/home/user/Downloads
13.ONBUILD
格式為ONBUILD [INSTRUCTION]
配置當(dāng)所創(chuàng)建的鏡像作為其他新創(chuàng)建的基礎(chǔ)鏡像時(shí),所執(zhí)行的操作指令惊暴。例如:
ONBUILD ADD . /app/src
創(chuàng)建鏡像
編寫完成Dockerfile之后饼丘,可以通過docker build命令來創(chuàng)建鏡像。
基本格式為docker build [選項(xiàng)] 路徑辽话,該命令將讀取指定路徑下(包括子目錄)的Dockerfile肄鸽,并將該路徑下所有內(nèi)容發(fā)送給Docker服務(wù)器端,由服務(wù)器端來創(chuàng)建鏡像油啤。因此一般建議放置Dockerfile的目錄為空目錄典徘。
例如,指定Dockerfile所在的路徑為./Python_Tensorflow/cpu/益咬,并且希望生成鏡像標(biāo)簽為ubuntu16_tensorflow15,可以使用下面的命令:
docker build -t ubuntu16_tensorflow15 ./Python_Tensorflow/cpu/