• Dockerfile


    什么是 Dockerfile?

    Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

    先看一个例子

    登录hub.docker.com,搜索centos,找到centos7.9

    具体网址:https://github.com/CentOS/sig-cloud-instance-images/blob/b2d195220e1c5b181427c3172829c23ab9cd27eb/docker/Dockerfile

    FROM scratch
    ADD centos-7-x86_64-docker.tar.xz /

    LABEL
        org.label-schema.schema-version="1.0"
        org.label-schema.name="CentOS Base Image"
        org.label-schema.vendor="CentOS"
        org.label-schema.license="GPLv2"
        org.label-schema.build-date="20201113"
        org.opencontainers.image.title="CentOS Base Image"
        org.opencontainers.image.vendor="CentOS"
        org.opencontainers.image.licenses="GPL-2.0-only"
        org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

    CMD ["/bin/bash"]

    上面红色大写字母就是dockerfile的指令,后面跟随相对应的参数,当docker根据dockerfile构建镜像的时候,会逐行执行这些指令,每条指令都会创建一个新的镜像层,最后生成我们想要的镜像。

    注:scratch是初始镜像,可理解为c#中的基类。

    构建命令

    docker build -f ./dockerfile -t myImageName .

    -f dockerfile文件的路径,如果是在当前目录下,可省略

    -t 要生成的镜像的名字,可跟 :版本号,自定义镜像版本

    . 上下文路径,在构建镜像时可能要用到本机文件,会将路径下的所有内容打包。如果未说明最后一个参数,那么默认上下文路径就是 Dockerfile 所在的位置。上下文路径下不要放无用的文件,因为会一起打包发送给 docker 引擎,如果文件过多会造成过程缓慢。

    Dockerfile常用指令

    FROM

    定制的镜像都是基于 FROM 的镜像,例如 FROM centos,若本地没有这个镜像会自动下载该镜像到本地。

    RUN

    在docker build时执行的命令,有两种格式:

    ①shell格式,等同在shell终端操作的命令

    RUN yum install vim -y

    ②exec格式

    RUN ["yum","install","vim","-y"]

    MAINTAINER

    镜像维护者的姓名和邮箱地址

    EXPOSE

    当前容器对外暴露的端口号

    WORKDIR

    进入容器后所在的目录位置,如 WORKDIR /usr/local

    ENV

    在构建镜像过程中设置环境变量,

    格式ENV <key> <value>或ENV <key1>=<value> <key2>=<value>   如 ENV version 1.0

    使用就是 $version

    COPY

    从上下文目录中复制文件或者目录到容器指定路径

    COPY [--chown=<user>:<group>] <源路径1>...  <目标路径>

    [--chown=<user>:<group>]:可选参数,用户改变复制到容器内文件的拥有者和属组。

    COPY hom* /mydir  代表将上下文目录下的hom*文件复制到容器中的/mydir目录下

    ADD

    与COPY类似,但会自动解压tar文件以及处理URL

    VOLUME

    容器数据卷,格式 VOLUME ["路径1","路径2","路径3"]

    CMD

    在docker run时运行的命令,并且仅最后一个生效,格式:

    CMD <shell 命令>

    CMD ["可自行的命令或文件","参数1","参数2"...]

    ENTRYPOINT

    与CMD类似,但可以追加参数,两种方式:

    ENTRYPOINT yum install vim

    ①在运行容器时后面添加命令参数

    docker run -it mycentos -y

    ②在dockerfile中追加参数

    ENTRYPOINT yum install vim #定参

    CMD ["-y"] #变参

    ONBUILD

    延迟构建的命令,即在本次构建的镜像过程中不会执行,当有其他dockerfile继承自该镜像时,会触发ONBUILD后面的命令。

  • 相关阅读:
    asp.net中virtual和abstract的区别分析
    .NET中的Timer类型用法详解
    类型参数的约束(C# 编程指南)T
    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
    jquery的$.extend和$.fn.extend作用及区别
    类型参数约束 : Controller where T : class,new()
    asp.net获取当前网址url的各种属性(文件名、参数、域名 等)的代码
    字符串一级指针的内存模型图(盲点,以前自己懵懂)
    字符串的基本操作,初始化和赋值之类的区别,和数据名是一个常量指针不可以改变和赋值(盲点众多)
    关于内存四区和指针的修改问题
  • 原文地址:https://www.cnblogs.com/1016391912pm/p/14602809.html
Copyright © 2020-2023  润新知