资讯动态

使用Dockerfile build镜像

发布时间:2026/9/8 15:13:48 来源:尧图企业网站定制
映像是能够认作作为容器的压缩包, 它涵盖拥有应用程序以及运行该应用程序所必要的依赖, 而容器是映象的运行时候的实例。一般而言, 构建镜像时通常采用的是进行构建的方式, 而非其他方式 , 虽说在构建过程中也会创建出新层 , 然而这实际上是一种通过手工来创建镜像的途径 , 这种方式极易出现错误 , 而且效率较为低下 , 使用者对于镜像是怎样被创建出来的并不知晓 , 进而无法针对镜像开展审计工作 , 如此便存在着安全方面的隐患。我们将解释什么是如何创建以及如何使用构建映像。What is它乃是一个专门用于构建镜像的文本文件, 该文本文件之中所涵盖的内容, 有着一条条构建镜像时所必需的指令, 还有相关说明。下面将一些最常用的指令的简短说明给列出来了, 指令并不区分大小写, 然而却约定名称得使用大写。ENV进行环境变量的设置, 对环境变量予以了定义, 在后续的那些指令里面, 便能够运用这个环境变量。ARG- 跟 ENV 所起的作用是一样的。然而其作用的范围并不相同。由 ARG 所设置出来的环境变量仅仅在特定范围内才有效。就是说仅仅只有在 build 的这个过程当中是有效的。而构建完成的镜像里面是不存在这个环境变量的。FROM那个被用来构建新镜像的基础镜像, 这条指令必然得是处于当中的第一条并非注释的指令, 此规则的唯一例外情况乃是当您期望在from参数里去使用变量的时候, 在这种情形下, FROM的前面能够放上一条或者多条ARG指令。LABEL是用来给镜像增添元数据的, 像描述、版本、作者这类, 能够指定好多标签, 并且每个标签指令都是一组键值对句号。ADD具备这样一种功能, 它是专门用来把文件以及目录, 从选定的指定源处, 复制到镜像之上的指定目的地的。其中, 源能够是本地的文件, 或者是目录, 又或者是URL链接。一旦源文件属于本地tar归档文件, 那么它就会自动地进行解压缩, 之后进入到映像当中。COPY- 与ADD类似但源只能是本地文件或目录。RUN有关此当中所指定的命令, 将会于build进程期间予以执行, 每一条运行指令, 都会在当下镜像的顶部生成一个全新的层。CMD用来专门指明, 在运行容器之际, 将会据此执行的命令。并且, 在其中仅仅能够使用一条CMD指令。存在一种指令, 它和 RUN 指令相类似, 其作用是用来运行程序, 然而, 这二者运行的时间点并非一致, 并非相同喔。注意, 要是当中存在着多个CMD指令, 那么仅仅是最后一个会生效, CMD指令是能够被run命令行参数里面所指定的指令给覆盖掉的。- 与CMD类似此指令定义运行容器时将执行的命令。但是, 其不会被由run所对应的、命令行参数指定的相关指令给覆盖掉, 并且, 这些命令行参数会被当作参数送去给指令所指定的那个程序。注意如果 中如果存在多个 指令仅最后一个生效。能够与CMD命令搭配来运用: 通常来讲是变参的情形下才会用到CMD, 此处的CMD等同于在进行传参操作, 举例如下。FROM nginx ENTRYPOINT [nginx, -c] # 定参 CMD [/etc/nginx/nginx.conf] # 变参为了当前的工作 , 针对 RUN, CMD 和 COPY 以及 ADD 设置此指令。USER去设置, 在运行CMD这条指令时, 还有COPY指令时, 以及ADD指令时, 所要使用的用户名或者组。- 将主机目录装载到容器。- 用于指定容器在运行时侦听的端口。将添加至映像中的文件以及目录予以排除之举, 需于上下文目录里创建一个.文件, 使得.之语法同一于Git的.文件。a镜像的创建, 通常是从Hub那儿拉取已有的镜像, 最常被使用的基本镜像, 是这样的, 因其体积微小, 且得以优化, 能够在RAM当中运行。在这个例子里头, 我们会要来开创一个Redis映像, 我们选用18.04当作基本镜像。首先创建一个目录用于存放和程序所用到的文件:mkdir ~/redis_docker进入该目录创建,内容如下FROM ubuntu:18.04 RUN apt-get update \ apt-get install -y redis-server \ apt-get clean EXPOSE 6379 CMD [redis-server, --protected-mode no]the Image接下来的步骤是去构建镜像, 要将此行为予以执行的话, 那就从所处的目录去运行下面这样的命令:build -t /redis .选项 -t进行指定, 这时镜像名称通常是以“/:tag”这种格式呈现的, 其中包含用户名跟标记, 而标记属于可选项目。构建过程的输出将如下所示Sending build context to Docker daemon 3.584kB Step 1/4 : FROM ubuntu:18.04 --- 7698f282e524 Step 2/4 : RUN apt-get update apt-get install -y gosu redis-server apt-get clean --- Running in e80d4dd69263 ... Removing intermediate container e80d4dd69263 --- e19fb7653fca Step 3/4 : EXPOSE 6379 --- Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc --- 13b92565c201 Step 4/4 : CMD [redis-server, --protected-mode no] --- Running in a67ec50c7048 Removing intermediate container a67ec50c7048 --- d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest构建完成后可使用 image ls查看镜像列表。docker image lsREPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MBa现在镜像已创建可以通过以下命令运行容器docker run-d-p 6379:6379 --name redis linuxize/redis后台模式运行容器, 是通过 -d 选项来告知的, 容器 6379 端口映射到主机的 6379 端口, 是借助 -p 6379:6379 选项达成的, 指定容器名称, 运用的是 --name redis 选项。运行容器时最后一个参数 /redis , 它是用于运行容器的镜像名称。容器启动时使用以下命令列出所有正在运行的容器docker container lsCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 redis-server --pro… 5 minutes ago Up 5 minutes 0.0.0.0:6379-6379/tcp redis结论本教程只是介绍运用构建镜像的基础内容, 若想要知晓关于怎样编写以及最佳实践的更多讯息, 那就去参阅有关最佳实践的相关内容, Best for |。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价