Docker可以通过阅读来自的指令自动构建图像 Dockerfile。Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组合图像的所有命令。使用docker build 用户可以创建一个连续执行多个命令行指令的自动构建。
用法
该docker build命令Dockerfile根据上下文构建图像。构建的上下文是指定位置PATH或的文件集URL。这PATH是本地文件系统上的目录。这URL是一个Git存储库位置。 递归处理上下文。因此,a PATH包括所有子目录,URL包括存储库及其子模块。此示例显示使用当前目录作为上下文的构建命令:
例如:docker build -f ./Dockerfile -t microsoft/dotnet:v1 .(别忘记了后面有个点,详细了解docker build用法)
构建由Docker守护程序运行,而不是由CLI运行。构建过程所做的第一件事是将整个上下文(递归地)发送到守护进程。在大多数情况下,最好以空目录作为上下文,并将Dockerfile保存在该目录中。仅添加构建Dockerfile所需的文件。
警告:不要用你的根目录下,/作为PATH因为它会导致生成到您的硬盘驱动器的全部内容传输到码头工人守护进程。
要在构建上下文中使用文件,请Dockerfile引用指令中指定的文件,例如COPY指令。要提高构建的性能,请通过向.dockerignore上下文目录添加文件来排除文件和目录。有关如何创建.dockerignore 文件的信息,请参阅此页面上的文档。 传统上,它Dockerfile被调用Dockerfile并位于上下文的根中。您可以使用-f标志docker build来指向文件系统中任何位置的Dockerfile。
指令集的功能用法
Dockerfile有十几条命令可用于构建镜像
Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。
指令 | 说明 |
FROM | 指定所创建镜像的基础镜像,FROM指令必须指定且需要写在其他指令之前. 如果本地镜像不存在,会去Docker Hub下载指定镜像,Dockerfile创建多个镜像使用多条FROM语句. 支持三种格式: FROM <image> FROM <image>:<tag> FROM <image>@<digest> 示例: FROM microsoft/dotnet:2.2-aspnetcore-runtime |
RUN | 执行命令, 是启动容器时才指定运行的指令 RUN有两种形式: 1.RUN <command>(shell表单,该命令在shell中运行,默认情况下/bin/sh -c在Linux或cmd /S /CWindows 上运行) 2.RUN ["executable", "param1", "param2"](执行形式) 示例: RUN echo "hello world" |
CMD | 指定启动容器默认执行的命令 每个Dodckerfile 只能有一条CMD命令,如果指定了多条命令,只有最后一条会被执行 CMD有三种形式: CMD ["executable","param1","param2"](执行形式,这是首选形式) CMD ["param1","param2"](作为ENTRYPOINT的默认参数) CMD command param1 param2(在Shell中使用) 示例: CMD [ "dotnet","XXX.dll" ] |
LABEL | 指定生成镜像的元数据标签信息 格式: LABEL <KEY>=<VALUE> 示例: LABEL version=”1.0” |
MAINTAINER | 指定维护者信息(已过时),格式为MAINTAINER name 建议使用LABEL代替,例如:LABEL maintainer=”cxt@docker.com” |
EXPOSE | 声明镜像内服务所监听的端口 示例:EXPOSE 80 |
ENV | 指定环境变量,环境变量可以在后续RUN指令中使用 格式: ENV <key> <value> 示例: ENV JAVA_HOME /path/to/java |
ADD | ADD指令用于复制文件,复制指定的<src> 路径下的内容到容器中的<dest>路径下,<src>可以为URL;如果为tar文件,会自动解压到<dest>路径下 格式: ADD <src>... <dest> |
COPY | 复制本地主机的<src>路径下的内容到镜像中的<dest>路径下;COPY指令和ADD指令类似,COPY不支持URL和压缩包一般情况下推荐使用COPY,而不是ADD 格式: COPY <src>... <dest> 示例:COPY nginx.conf /etc/nginx/nginx.conf |
ENTRYPOINT | 指定镜像的默认入口 ENTRYPOINT和CMD指令的目的一样,都是指定Docker容器启动时执行的命令,可多次设置,但只有最后一个有效 格式: ENTRYPOINT ["executable", "param1", "param2"] |
WORKDIR | WORKDIR指令可以在创建容器时在容器内部指定一个工作目录 例如: WORKDIR /data |
Dockerfile示例;
FROM microsoft/dotnet:2.2-aspnetcore-runtime
LABEL version = "1.0"
RUN mkdir /data
COPY ./ /data
WORKDIR /data
EXPOSE 80
CMD [ "dotnet","Docker.dll" ]