一. docker build
docker build : 从Dockerfile创建一个镜像

docker build 命令从Dockerfile和上下文构建docker镜像。构建过程可以引用上下文中任何文件,上下文路径下文件过多会导致构建过程缓慢,因而上下文路径下不用存放无用文件。
二. Dockerfile
Dockerfile 指令:
FROM 基础镜像。
COPY 复制,从上下文路径复制文件或目录到容器内指定路径。
ADD 与COPY相似,不同之处在于:ADD在源文件为压缩文件时,会自动复制并解压到目标路径。(推荐使用COPY)
RUN 运行程序,在dokcer build时。
CMD 运行程序,在docker run时运行。(若Dockerfile中存在多个CMD命令,仅最后一个生效;在docker run中指定要运行的程序时,CMD会被覆盖)
ENTRYPOINT 类似于CMD命令,但不会被docker run指定的命令覆盖,这些命令行参数会被当作参数送给ENTRYPOINT。
ENV 设置环境变量。
ARG 与ENV作用一致,但ARG设置的变量仅在Dockerfile内有效,仅作用于docker build过程,构建好的镜像内不存在此变量。
VOLUME 设置匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。
WORKDIR 指定工作目录。(必须提前创建好)
LABEL 给镜像添加一些原数据,以键值对的形式。
三. 例子



FROM python:3
WORKDIR /home
COPY * ./
RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
CMD echo "run flask docker"
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
从Dockerfile创建镜像



直接运行镜像,CMD命令执行,打印”run flask docker”



run时,镜像后指定 命令python helloworld.py ,CMD命令被覆盖


