您所在的位置: > 主页 > 大众创业网 > 资讯 > 正文
Docker镜像和Dockerfile详解!来源: 日期:2020-11-19 04:30:30  阅读:-

    镜像是容器的模板,容器是镜像运行的实例,可以类比为模具和实物的关系或者编程语言里面"类"和"实例"的关系,镜像是静态的定义,容器是动态运行的实体

    一、镜像的构成

    hello-world

    Hello-world是docker官方提供的一个很小的镜像,用来测试docker是否正确运行

    $ docker run hello-world$ docker images
    Docker镜像和Dockerfile详解

    这个镜像才1.04kb,我们看下他的Dockerfile描述

    FROM scratchCOPY hello /CMD ["/hello"]

    (1) FROM scratch 说明镜像是白手起家,从0开始构建

    (2) COPY hello / 将文件"hello"复制到镜像的目录

    (3) CMD ["/hello"] 容器启动时执行 /hello

    二、Dockerfile的构建

    概念:Dockerfile 是一个包含创建镜像所有命令的文本文件,通过docker build命令可以根据 Dockerfile 的内容构建我们自己需要的镜像

    base镜像:

    a、不依赖其他镜像,从scratch开始

    b、以其他镜像为基础扩展

    Dockerfile常用指令,主要分为配置指令和操作指令,一图展示各种命令


    Docker镜像和Dockerfile详解

    dockerfile常用命令

    配置指令

    2.1、ARG(定义镜像创建过程中的变量)

    用法:ARG []

    2.2、FROM

    用法:FROM 
    • FROM指定构建镜像的基础源镜像,如果本地没有该镜像,默认会从 DockerHub上拉取镜像
    • FROM scratch 说明镜像是从0开始构建,不依赖其他镜像
    • FROM可以在一个 Dockerfile 中出现多次,如果有需求在一个 Dockerfile 中创建多个镜像

    2.3、LABEL

    用法:LABEL = = =

    例如:LABEL version="l.0.0-rc3"

    LABEL author="yeasy@github" date="2020-01-01"

    2.4、EXPOSE(声明镜像内服务监听的端口)

    用法:EXPOSE 

    例如:EXPOSE 22 80 8443

    2.5、ENV

    用法:ENV  或 ENV =

    例如:

    ENV APP_VERSION=1.0.0

    ENV APP_HOME=/usr/local/bin

    ENV PATH $PATH:/usr/local/bin

    2.6、ENTRYPOINT

    支持两种格式:

    □ ENTRYPOINT ["executable", "paraml ", "param2"]:exec 调用执行;

    □ ENTRYPOINT command param 1 param2: shell 中执行;

    每个Dockerfile 中只能有一个ENTRYPOINT, 当指定多个时,只有最后一个起效。

    2.7、WORKDIR

    指定工作目录

    用法:WORKDIR 

    WORKDIR /root/test

    操作指令

    2.8、RUN

    用法:RUN 

    例如:

    RUN apt-get update \

    && apt-get install -y libsnappy-dev zliblg-dev libbz2-dev \

    && rm -rf /var/cache/apt

    2.9、CMD(启动容器时指定默认执行的命令)

    用法:CMD command paraml param2 :在默认的Shell 中执行

    每个Dockerfile 只能有一条CMD 命令。如果指定了多条命令,只有最后一条会被执行

    2.10、ADD

    格式为ADD  

    COPY的作用和ADD类似,这里不再赘述

    三、通过示例练习Dockerfile

    # This my first nginx Dockerfile# Version 1.0# Base images 基础镜像FROM centos#MAINTAINER 维护者信息MAINTAINER pythontaotao#ENV 设置环境变量ENV PATH /usr/local/nginx/sbin:$PATH#ADD  文件放在当前目录下,拷过去会自动解压ADD nginx-1.8.0.tar.gz /usr/local/  ADD epel-release-latest-7.noarch.rpm /usr/local/  #RUN 执行以下命令 RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpmRUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean allRUN useradd -s /sbin/nologin -M www#WORKDIR 相当于cdWORKDIR /usr/local/nginx-1.8.0 RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make installRUN echo "daemon off;" >> /etc/nginx.conf#EXPOSE 映射端口EXPOSE 80#CMD 运行以下命令CMD ["nginx"]

    (正文已结束)

    免责声明及提醒:此文内容为本网所转载企业宣传资讯,该相关信息仅为宣传及传递更多信息之目的,不代表本网站观点,文章真实性请浏览者慎重核实!任何投资加盟均有风险,提醒广大民众投资需谨慎!