专栏首页cwl_Java快速学习Docker-Docker-file的指令格式

快速学习Docker-Docker-file的指令格式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42528266/article/details/102871377

指令主要分为两种
  • 注释 : # Comment
  • 指令 : INSTRUCTION argument
FROM(包含两种格式)
  • FROM
  • FROM :

image要求是已经存在的镜像,我们也称为基础镜像.必须是第一条非注释指令

MAINTAINER

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

RUN:
  • 指定当前镜像中运行的命令
RUN  <command> (shell模式)
        /bin/sh -c command
        RUN echo hello
RUN [“executable”,”param1”,”param2”] (exec模式)
RUN [“/bin/bash”,”-c”,”echo hello”]

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

EXPOSE
  • 指定运行该镜像的容器使用的端口.
  • 虽然我们在构建镜像的时候暴露了端口号,但是我们在运行容器的时候依然需要指定端口的映射.
  • 我们使用EXPOSE只是告诉Docker运行该镜像的容器会使用80端口,出于安全的考虑,docker并不会打开该端口.
  • 而是需要我们在使用该镜像运行容器的时候指定端口的映射.
CMD
  • CMD指令提供容器默认运行的命令,和之前讲的RUN指令类似.都是执行一个命令,但是RUN命令指定的命令是在镜像构建的过程运行的.
  • CMD的命令是在容器运行的时候运行的.如果我们在docker run命令中指定运行的命令的时候,CMD的指令会被覆盖,默认命令就不会执行.
  • CMD命令是指定容器启动的时候默认命令.
  • 两种模式.
    • CMD [“executable”,”param1”,”param2”] (exec模式)
    • CMD command param1 param2 (shell 模式)
    • CMD [”param1”,”param2”] (作为ENTRYPOINT指令的默认参数.)

示例:

  • 通过构建的镜像来创建容器
docker run -p 80 --name cmd_test1 -itd lanxw0720/df_test3
docker top cmd_test1
  • 发现已经启动nginx了.
  • 如果我们在启动的时候指定了参数,默认的CMD命令就会被覆盖了.
ENTRYPOINT
  • 这个和我们刚刚讲的CMD指令非常相似,唯一的区别:不会给docker run的启动命令给覆盖.
  • 如果需要覆盖ENTRYPOINT的指令,需要在docker run使用docker run --entrypoint覆盖.
  • ENTRYPOINT [“executable”,”param1”,”param2”] (exec模式)
  • ENTRYPOINT command param1 param2 (shell 模式)

示例:

	docker build -t="lanxw0720/df_test4" .
	docker run -p 80 --name ep_test1 -d lanxw0720/df_test4 
	docker ps -l
  • 可以发现,启动的容器依然使用的ENTRYPOINT指定的命令执行.
ADD
  • 将文件和目录复制到使用dockerfile构建的镜像中.
  • 目标的来源可以本地的地址也可以是远程地址.
  • 如果是本地地址,本地地址必须是构建目录中的相对地址
  • 对于远程URL,docker并不推荐使用,更建议使用的是curl或者wget的命令来获取
  • 目标路径需要指定镜像中的绝对路径
  • ADD …
  • ADD “”…””
COPY:

示例:

  • 在Dockerfile所在目录添加index.html文件
	docker build -t="lanxw0720/df_test6" .
	docker run -p 80 --name add_test1 -d lanxw0720/df_test6
	curl http://127.0.0.1:32775
VOLUME

用于基于镜像创建的容器添加卷,一个卷可以存在一个或者多个容器的特定目录.这个目录可以绕过联合文件系统.提供共享数据和持久化数据的 功能.(后面单独讲)

WORKDIR:
WORKDIR /path/to/workdir
  • 这个指令从指令创建一个容器是,在容器内部设置工作目录.ENTRYPOINT和CMD的命令都会在这个目录下执行.我们也可以使用这个命令给后续的构建中指定工作目录.通常会使用绝对路径,如果使用了相对路径,那这个路径会一致传递下去.如下所示:
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd

*结果====>/a/b/c*

ENV
	ENV <key><value>
	ENV <key><value>...
  • 这个指令主要是来设置环境变量,这个环境变量在构建过程中和运行过程中都有效.
USER
	USER daemon
  • 指定镜像会以什么样的用户去运行.
  • 比如:USER nginx
  • 基于该镜像启动的容器就会以nginx的用户来运行.
  • 如果没有指定USER,容器会使用root用户来运行.
ONBUILD
	ONBUILD [INSTRUCTION]
  • 镜像触发器.
  • 当一个镜像被其他镜像作为基础镜像时执行
  • 会在构建过程中插入指令

示例:

docker run -p 80 --name onbuild_test1 -d lanxw0720/df_test7
curl http://127.0.0.1:32776
  • 发现在构建这个镜像的时候并没有执行COPY命令.
  • 接下来我们基于这个镜像来构建新的镜像.
docker build -t="lanxw0720/df_test8" .
docker run -p 80 --name onbuild_test2 -d lanxw0720/df_test8
curl http://127.0.0.1:32777
  • 此时发现已经执行COPY命令了.
DockerFile的构建过程
  • 1.从基础镜像运行一个容器.
  • 2.执行一条指令,对容器做出修改.
  • 3.执行类似docker commit 的操作,提交一个新的镜像层.
  • 4.再基于刚提交的镜像运行一个新容器.
  • 5.执行Dockerfile中的下一条指令,知道所有指令执行完毕.

docker build会删除中间层创建的容器,但是不会删除中间层创建的镜像.我们可以使用docker run 的方式来运行中间层镜像.从而查看每一步创建后的镜像的实际状态,这就给了我们调试镜像的能力. docker会把之前创建过的中间层镜像建立成缓存,第二次构建的时候其实就直接中缓存中拿到中间层的镜像.但是有些时候我们不想使用缓存.

docker build --no-cache

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 快速学习Docker-Docker镜像和仓库

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • Docker私有仓库

    (3)打开浏览器 输入地址http://192.168.184.141:5000/v2/_catalog看到{"repositories":[]} 表示私有仓库...

    cwl_java
  • 快速学习Docker-获取和推送镜像

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • Dockerfile 详解,看这一篇就够了

    使用这个指令的目的是告诉应用程序容器内应用程序会使用的端口,在运行时还需要使用-p参数指定映射端口。这是docker处于安全的目的,不会自动打开端口。

    DevOps时代
  • Docker的镜像

    镜像是容器的运行基础,容器是镜像运行后台的形态 镜像的概念 镜像是一个包含程序运行必要依赖环境和代码的只读文件,它采用分层的文件系统,将每一次改变以读写层的形式...

    coders
  • docker搭建私有仓库

    "insecure-registries":["192.168.174.130:5000"]

    爱撒谎的男孩
  • 6. Dockerfile详解

    Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等...

    用户7798898
  • Docker入门-搭建docker私有仓库

    目前Docker官方维护了一个公共仓库Docker Hub,其中已经包括了数量超过15000个镜像。大部分需求都可以通过在Docker Hub中直接下载镜像来使...

    小码农薛尧
  • Docker 入门到实战教程(五)构建Docker镜像

    Docker 镜像(Image)是一种分层结构的文件系统,基于Docker Hub中已构建好的镜像后,我们可以快速构建自己的镜像。还可以将自己构建的镜像免费推送...

    小东啊
  • docker容器技术系列三:docker镜像

    本系列教程由旺旺知识库授权进行发布 前面基本概念部分我们已经介绍了docker镜像就是一个只读模板,可以从镜像启动一个容器实例。我们也发现,在启动容器的过程中...

    小小科

扫码关注云+社区

领取腾讯云代金券