Dockerfile常用指令

  利用Dockerfile构建镜像比较方便快捷,在编写Dockerfile文件中我们需要用到很多常用的指令,为了方便以后使用,具体用法及说明在此记录一下,如有错误请及时指出,谢谢!

 

FROM指令:

FROM <image> FROM <image>:<tag>
View Code

 image必须是已存在的镜像

作为将要构建的镜像的基础镜像
必须是第一条非注释的指令
例如:

FROM ubuntu:latest
View Code

 

MAINTAINER指令:

MAINTAINER<name>
View Code

指定镜像的作者信息,包含镜像的所有者和联系信息

例如:

MAINTAINER fngje "fngje0128@163.com"
View Code

 

RUN指令:(在镜像构建过程运行)

RUN <command> (shell模式) /bin/bash -c command RUN echo hello world RUN apt-get update RUN apt-get install -y nginx
View Code

每一个RUN命令都会在当前镜像的上层创建一个新的镜像来运行指定的命令。

EXPOSE指令:

EXPOSE <potrt>[<potrt>...]
View Code

指定运行该镜像的容器使用的端口,可以指定一个或多个端口,"EXPOSE 80"

虽然在EXPOSE指令中已经暴露了80端口,但是在启动容器的时候还是要指定端口信息,容器本身不会自动暴露端口,例如:

docker run -p 80 -d jie/nginx nginx -g "daemon off;"
View Code


CMD指令:(在容器运行时运行,docker run启动容器时如果指定了容器运行时的命令,那么CMD指令会被覆盖,不会执行)

CMD [ "executable","param1","param2" ](exec模式) CMD command param1 param2 (shell模式) CMD ["param1","param2"](作为ENTERYPOINT指令的默认参数)
View Code

 

ENTERYPOINT指令:(不会被docker run启动容器时指定的指令覆盖,如果要覆盖,可以使用docker run --entrypoint覆盖)

ENTERYPOINT ["executable","param1","param2"] (exec模式) ENTERYPOINT command param1 param2 (shell模式)
View Code

 

ADD指令:

ADD <src>...<dest> ADD ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)
View Code

 

COPY指令:

COPY <src>...<dest> COPY ["<src>"..."<dest>"] (适用于文件路径中有空格的情况)
View Code

如下Dockerfile

#use centos build nginx images FROM centos:latest MAINTAINER fngje "fngje0128@163.com" RUN yum update RUN yum install -y nginx COPY index.html /usr/share/nginx/html EXPOSE 80 CMD ["/usr/sbin/nginx","-g","daemon off;"]
View Code

 

ADD与COPY指令对比:

  1. ADD包含类似tar的解压功能
  2. 如果单纯复制文件,Docker推荐使用COPY

VOLUME指令:(用于向基于镜像创建的容器添加卷,一个卷可以存在于一个或多个容器的特定目录,这个目录可以绕过联合文件系统,并提供共享数据、数据持久化的功能)

VOLUME ["/data"]
View Code

 

WORKDIR指令:(用来在从镜像创建新容器时,在容器内部设置工作目录,ENTERYPOINT或者CMD指令都会在这个目录下执行)

WORKDIR /path/to/workdir
View Code

通常使用绝对路径,如果是相对路径,那么工作路径会一直传递下去。相对路径结果如下所示:

WORKDIR /a WORKDIR b WORKDIR c RUN pwd #输出结果: "/a/b/c"
View Code

 

ENV指令:(用来设置环境变量与WORDDIR类似,在构建和运行中都生效)

ENV <key><value> ENV <key>=<value>...
View Code

 

USER指令:(用来指定镜像以哪个用户去运行,基于该镜像启动的容器也会以该用户去运行)

USER daemon USER nginx
View Code

可以使用 UID GID 用户组,默认使用root用户

USER user USER uid USER user:group USER uid:gid USER user:gid USER uid:group
View Code

 

ONBUILD指令:(为镜像添加触发器,当一个镜像被用作其他镜像的基础镜像时,这个触发器会被执行,当子镜像在构建时,会执行触发器中的指令)

ONBUILD [INSTRUCTION]
View Code

可以看下面的Dockerfile文件:

#use centos build nginx images FROM centos:latest MAINTAINER fngje "fngje0128@163.com" RUN yum install -y wget WORKDIR /etc/yum.repos.d/ RUN mkdir -p tmp/ && mv /etc/yum.repos.d/* tmp RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.c om/repo/epel-7.repo RUN yum install -y nginx ONBUILD index.html /usr/share/nginx/html EXPOSE 80 CMD ["/usr/sbin/nginx","-g","daemon off;"]
View Code

构建这个镜像之后,以这个镜像为基础构建的新的nginx镜像就会执行ONBUILD指令中复制index.html文件,nginx的主页文件就会是当前Dockerfile同级目录中的index.html的内容。


__EOF__

本文作者StaryJie
本文链接https://www.cnblogs.com/jie-fang/p/7206981.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   StaryJie  阅读(345)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示