zoukankan      html  css  js  c++  java
  • Docker:Dockerfile基础知识

    Dockerfile

    Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

    构建三步骤:

    • 编写Dockerfile
    • docker build
    • docker run

    基础知识:

    • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
    • 指令按照从上到下,顺序执行
    • 表示注释

    • 每条指令都会创建一个新的镜像层,并对镜像进行提交

    docker执行Dockerfile的大致流程

    1. docker从基础镜像运行一个容器
    2. 执行一条指令并对容器做出修改
    3. 执行类似docker commit的操作提交一个新的镜像
    4. docker再基于刚提交的镜像运行一个新容器
    5. 执行Dockerfile中的下一条指令直到所有指令都执行完成
      Dockerfile面向开发,Docker镜像成为交付标准,Docker容器涉及部署与运维。三者合力充当Docker体系的基石。

    Dockerfile保留字指令

    FROM:基础镜像,当前新的镜像是基与哪个镜像
    MAINTAINER:镜像维护者的姓名和邮箱地址
    RUN:容器构建时需要运行的命令
    EXPOSE:当前容器对外暴露出的端口
    WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
    ENV:用来构建镜像过程中设置环境变量
    ADD:将宿主机目录下的文件拷贝进镜像,且会自动处理URL和解压tar压缩包
    COPY:拷贝文件和目录到镜像中(copy src dest || copy ["src","dest"])
    VOLUME:容器数据卷,用于数据保存和持久化工作。
    CMD:指定一个容器启动要运行的命令,Dockerfile中可以有多个CMD指令,但是 只有最后一个生效,CMD会被docker run之后的参数替换
    解释:执行命令 docker run -it -p 8080:8080 tomcat ls -l 后,ls -l 会替换tomcat中的Dockerfile最后的CMD ["catalina.sh" "run"],变成CMD ls -l,这样tomcat就会启动失败。如下图所示:

    ENTRYPOINT:指定一个容器启动要运行的命令,docker run之后的参数会被当做参数传递给ENTRYPOINT,之后形成新的命令组合
    ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
    LABEL:语法:LABEL = = = ...
    LABEL 指令将元数据添加到镜像。LABEL 是键值对。要在 LABEL 值中包含空格,请使用引号和反斜杠,就像在命令行解析中一样。

    Base镜像(scratch)

    Docker hub中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。

    举例:

    官方centos8的Dockerfile:

    FROM scratch
    ADD centos-8-x86_64.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="20200809"
    CMD ["/bin/bash"]
    

    编写自己的Dockerfile:

    FROM centos
    MAINTAINER wj<wj@qq.com>
    ENV mypath /opt
    WORKDIR $mypath
    RUN yum -y install vim
    RUN yum -y install net-tools
    EXPOSE 10000
    CMD  /bin/bash
    

    构建命令:

    docker build -t 镜像名:TAG .
    

    执行刚才自定义的Dockerfile:

    docker build -t wj/centos:1.2 .
    

    2020-09-17_214537
    查看刚才创建的镜像的创建历史:
    image-20200917220842513

    总结

  • 相关阅读:
    20165214 第八周学习任务
    20165214 实验二 Java面向对象程序设计
    20165214 结队编程项目-四则运算
    20165214 第七周学习任务
    20165214 第六周学习任务
    20165214 实验一 Java开发环境的熟悉
    20165313 《Java程序设计》第八周学习总结
    结对编程-四则运算
    2017-2018-2 20165313实验二《Java面向对象程序设计》
    20165313 《Java程序设计》第七周学习总结
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/13688156.html
Copyright © 2011-2022 走看看