dockerfile 1

目录

进一步了解dockerfile

通过Dockerfile构建镜像的基本方法

什么是构建上下文

通过Dockerfile构建镜像的基本方法

        镜像构建过程

构建上下文

FROM指令——设置基础镜像

RUN指令——运行命令

CMD指令——指定容器启动时默认执行的命令

LABEL指令——向镜像添加标记(元数据)

EXPOSE指令——声明容器运行时侦听的网络端口

ENV指令——指定环境变量

COPY指令——将源文件复制到容器

ADD指令——将源文件复制到容器


进一步了解dockerfile

Dockerfile是由一系列指令和参数构成的脚本文件,每一条指令构建一层。
镜像的定制实际上就是定制每一层所要添加的配置和文件。
Dockerfile的格式:
# Comment
INSTRUCTION arguments
INSTRUCTION表示指令,不区分大小写,建议大写。arguments表示指令的参数。
Dockerfile文件必须以FROM指令开头,定义构建镜像的基础镜像。
以“#”符号开头的行都将被视为注释。
Docker可使用解析器指令escape设置转义字符。

通过Dockerfile构建镜像的基本方法

什么是构建上下文

        上下文是由文件路径(本地文件系统上的目录)或一个URL(Git仓库位置)定义的一组文件。
        构建上下文以递归方式处理,本地路径包括其中的任何子目录,URL包括仓库及其子模块。
        使用当前目录作为上下文的简单构建命令:
                docker build .

通过Dockerfile构建镜像的基本方法

        镜像构建过程

        建过程中一开始将整个上下文递归地发送给守护进程。
        要使用构建上下文中的文件,Dockerfile引用由指令(如COPY)指定的文件。
        使用-f选项显式指定Dockerfile文件的具体位置:
                docker build -f /path/to/a/Dockerfile .
        可以指定构建成功之后要保存的新镜像的仓库名和标签:
                docker build -t shykes/myapp .
        Docker守护进程逐一运行Dockerfile中的指令,每条指令被独立执行并创建一个新镜像。
        只要有可能,Docker将重用过程中的中间镜像(缓存),以加速构建过程。

构建上下文

        (1)为构建上下文创建一个目录并切换到该目录。
                mkdir myproject && cd myproject
        (2)将内容“hello”写入一个名为hello的文本文件。
                echo "hello" > hello
        (3)创建一个Dockerfile并在其中运行cat命令。
                echo -e "FROM busybox\nCOPY /hello /\nRUN cat /hello" > Dockerfile
        (4)从构建上下文(.)构建镜像。
                docker build -t helloapp:v1 .

FROM指令——设置基础镜像

        FROM指令的用法有以下3种格式:
        FROM <image> [AS <name>]
        FROM <image>[:<tag>] [AS <name>]
        FROM <image>[@<digest>] [AS <name>]
        FROM指令为后续指令设置基础镜像,可以在同一个Dockerfile文件中多次出现,以创建多个镜像层。
        image参数指定任何有效的镜像,特别是可以从公有仓库拉取的镜像。
        FROM指令AS <name>是可选的,可以用来对此构建阶段指定一个名称。
        tag或digest的值是可选的。如果省略其中任何一个,构建器将默认使用latest。

RUN指令——运行命令

        RUN指令的用法有以下两种格式:
                RUN <command>
                RUN ["executable", "param1", "param2"]
        第1种是shell格式,命令在shell环境中运行。
        第2种是exec格式,不会启动shell环境。
        RUN指令将在当前镜像顶部的新层中执行命令,并提交结果。
        exec格式可以避免shell字符串转换。
        shell格式中的默认shell可以使用SHELL命令来更改。

CMD指令——指定容器启动时默认执行的命令

        CMD指令的用法有以下3种格式:
                CMD ["executable","param1","param2"]
                CMD ["param1","param2"]
                CMD command param1 param2
        第1种是首选的exec格式。
        第2种提供给ENTRYPOINT指令的默认参数。
        第3种是shell格式。
        一个Dockerfile文件中若有多个CMD指令,则只有最后一个CMD有效。
        CMD指令的主要目的是为运行中的容器提供默认值。

LABEL指令——向镜像添加标记(元数据)

        LABEL指令的语法格式如下:
                LABEL <key>=<value> <key>=<value> <key>=<value> ...
        每个标记(元数据)以键值对的形式表示。要在其中包含空格,应使用引号和反斜杠。
        一个镜像可以有多个标记。可以将多个标记合并到单个LABEL指令中以减少层数。
        基础镜像或父镜像中包含的标记会被镜像继承。

EXPOSE指令——声明容器运行时侦听的网络端口

        EXPOSE指令的语法格式如下:
                EXPOSE <port> [<port>...]
        EXPOSE指令通知Docker容器在运行时侦听指定的网络端口。
        EXPOSE指令不会发布该端口,只是起到声明作用。

ENV指令——指定环境变量

        ENV指令的用法有以下两种格式:
                ENV <key> <value>
                ENV <key>=<value> ...
        ENV指令以键值对的形式定义环境变量。
        第1种格式将单个变量设置为一个值。
        第2种格式允许一次设置多个变量,可以使用等号(=),而第1种形式不使用

COPY指令——将源文件复制到容器

        COPY指令的用法有以下两种格式:
                COPY [--chown=<user>:<group>] <src>... <dest>
                COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
        --chown选项只能用于构建Linux容器,不能在Windows容器上工作。
        COPY指令将指定的源路径(由<src>参数指定)的文件或目录复制到容器文件系统中指定的目的路径(由<dest>参数指定)。
        可以指定多个源路径,但文件和目录的路径将被视为相对于构建上下文的源路径。
        目的路径是绝对路径,或者是相对于工作目录(由WORKDIR指令指定)路径。

ADD指令——将源文件复制到容器

        ADD指令的用法有以下两种格式:
                ADD [--chown=<user>:<group>] <src>... <dest>
                ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
        它与COPY指令的功能基本相同,不同之处有两点:
                源可以使用URL指定。
                归档文件在复制过程中能够被自动解压缩。
        如果源是具有可识别的压缩格式的本地Tar归档文件,则将其解包为目录。来自远程URL的资源不会被解压缩。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值