Docker 之 Dockerfile

    xiaoxiao2024-03-22  127

    Dockerfile 命令介绍

    1、FROM 构建一个属于自己的镜像需要依赖一个基础镜像,就是指定一个官方提供的一个base image。在这个基础之上构建。例如使用daocloud.io提供的centos7作为基础镜像.FROM必须是第一行

    FROM daocloud.io/centos:7

    2、LABEL 一些注释信息,多行的话可以使用反斜线,以下三种方式

    # Set one or more individual labels LABEL com.example.version="0.0.1-beta" LABEL vendor="ACME Incorporated" LABEL com.example.release-date="2015-02-12" LABEL com.example.version.is-production="" # Set multiple labels on one line LABEL com.example.version="0.0.1-beta" com.example.release-date="2015-02-12" # Set multiple labels at once, using line-continuation characters to break long lines LABEL vendor=ACME\ Incorporated \ com.example.is-beta= \ com.example.is-production="" \ com.example.version="0.0.1-beta" \ com.example.release-date="2015-02-12"

    3、RUNRUN 后面要加上要构建镜像时,所要执行的脚本,多行命令换行也可以使用反斜线 来分隔,例如在centos7上安装并启用httpd

    RUN yum -y install httpd \ systemctl enable httpd.service

    ×需要注意,如果每一行RUN 命令都是单独存在的例如如下情况

    RUN yum update RUN yum install -y httpd

    这种情况下构建之后,如果修改了第二句话

    RUN yum update RUN yum install -y httpd nginx

    如果基于修改后的dockerfile构建新镜像,则不会安装新的源里的httpd和nginx,因为第一行没有变化,docker默认认为可使用缓存,所以第一句update不会执行,为了避免这种情况,建议使用反斜线 分隔命令行,这样docker会认为是一句话

    RUN yum update \ yum install -y httpd nginx

    4、pipes 管道

    RUN 中 使用|管道, RUN wget -O - https://some.site | wc -l > /number

    docker利用/bin/sh -c 执行RUN后面的命令,且只会判定最后一个命令执行结果来判断是否RUN正常执行,例如wc -l成功,但是wget失败,docker也会认为RUN执行成功而制作一个镜像,为了避免,我们可以在命令之前加上set -o pipefail,任意后面失败都会导致构建失败

    RUN set -o pipefail && wget -O - https://some.site | wc -l > /number

    不是所有shell都支持 set -o pipefail,bash支持,docker默认用/bin/sh ,可以在RUN后面显示的指定所用的shell

    RUN ["/bin/bash", "-c", "set -o pipefail && wget -O - https://some.site | wc -l > /number"]

    5、CMDCMD是运行容器时所需要执行的脚本,不同于RUN,RUN是构建镜像时需要执行的脚本。一般服务类型的镜像推荐使用CMD,运行时执行开启服务的脚本

    6、EXPOSE容器所要对外曝光的端口,例如httpd 是80

    7、ENVENV用来设置容器内的环境变量path用法 ENV 环境变量 环境变量值

    ENV PG_MAJOR 9.3 ENV PG_VERSION 9.3.4 RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && … ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

    8、COPY 、ADDADD src dest,add的src可以是一个url,add会下载到指定目录,add偶尔会根据下载文件格式进行解压,有时候不会解压,很奇怪COPY SRC DEST从本地指定的src复制至镜像的目录下 可以ADD URL DEST下载,然后RUN tar zxf .tar -C dest解压

    ADD http://example.com/big.tar.xz /usr/src/things/ RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things RUN make -C /usr/src/things all
    最新回复(0)