zoukankan      html  css  js  c++  java
  • docker基础dockerfile创建镜像(二)

    结合 docker入门实操基础命令干货(一)所学,创建dockerfile

    dockerfile仅仅是用来制作镜像的源码文件,是构建容器过程中的指令,docker能够读取dockerfile的指定进行自动构建容器,基于dockerfile制作镜像,每一个指令都会创建一个镜像层,即镜像都是多层叠加而成,因此,层越多,效率越低,创建镜像,层越少越好。因此能在一个指令完成的动作尽量通过一个指令定义。

    构建三步骤

    1、手动编写dockerfile文件,当前必须要符合file的规范;

    2、编写好file后,直接docker  bulid命令执行,获得一个自定义的镜像;

    3、使用run将已经生成的镜像启动。

    dockerfile内容基础知识

    1、每条保留字指令都必须为大写字母且后面要跟随至少一个参数;

    2、指令按照从上到下、顺序执行;

    3、#便是注释;

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

    docker执行dockerfile的大致流程

    1、docker从基础镜像运行一个容器;

    2、执行一条指令并对容器做出修改;

    3、执行类似dockers commit的操作提交一个新的镜像层;

    4、docker在基于刚提交的镜像运行一个新容器;

    5、执行dockerfile中的下一条指令直到所有指令都执行完成。

    dockerfile体系结构(保留字指令)

    FROM 基础镜像,当前新镜像是基于哪个镜像的

    MAINTAINER 镜像维护者的姓名和邮箱

    RUN 容器构建时需要运行的命令

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

    WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

    ENV 用来指定在构建镜像过程中设置环境变量

    ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

    COPY  类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径> 的文件/目录复制到新的一层的镜像内的<目标路径>位置。COPY src dest ,COPY ["src","dest"]

    VOLUME 容器数据卷,用于数据保存和持久化工作

    CMD 指定一个容器启动时要运行的命令。dockerfile中可以有多个CMD指令,但是最后一个生效,CMD会被docker run 之后的参数替换

    ENTERPOINT 指定一个容器启动时要运行的命令。ENTERPOINT的目的和CMD一样,都是在指定容器启动程序及参数。但是ENTERPOINT不会覆盖,只会追加

    ONBUILD  当构建一个被继承的dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被出发。

    主流命令图

     案例一

    首先编写一个简单的dockerfile

    vim dockerfile

    如上dockerfile与我们用命令的方法大概一致,只不过通过dockerfile生成镜像,直接启动成容器不需要执行太多命令。

    (docker run -it -v /宿主机的某个目录:/datatest1 -v /宿主机的某个目录:/datatest2 centos /bin/bash  )

    但是在dockerfile不支持   -v  /宿主机:/datatest1,只能支持VOLUME,处于可移植和分享考虑,用-v /主机目录:/容器目录 这种方法不能够直接在dockerfile中实现。由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的目录。

    将dockerfile生成成为一个容器

    docker  build  -f  /mydocker/dockerfile  -t   new/centos  .   (最后有个点,不加会报错)

    查看已经生成镜像

    启动验证是否创建两个容器卷

    通过docker inspect b633d2c6201b(经运行的容器ID),查看容器卷的两个目录在宿主机的具体位置。

    /datatest1容器卷对应的宿主机目录

    /datatest2容器卷对应的宿主机目录

    在容器卷目录中创建两个文件,切换至宿主机对应目录查看已经共享。

     一个简单的创建centos镜像,并添加容器卷已近完成。

    案例二

    自定义centos镜像,因为下载的精简版的centos,很多命令是没有的没办法使用。自己定义的centos镜像根据自我需求添加。

    登陆后的默认路径/home

    给centos镜像添加vim,运行成容器后能够使用vim编辑器

    精简版的centos镜像运行后是无法使用ifconfig命令,在案例中我们让支持ifconfig

    vim dockerfile

    生成新的镜像

    查看完成

    运行验证启动后是否在/home目录

     

    验证是否能使用ifconfig

     验证是否能够使用vim

    案例三

    CMD与ENTRYPOINT的区别,CMD有多个但是只会执行最后一个,ENTRYPOINT可以有多个但是会依次执行

    创建一个镜像启动后,会查看网卡信息。

     docker build -f /mydocker/dockerfile -t centos:1.2 .     创建成一个镜像

    启动镜像时,查看网卡信息。如果使用CMD就会报错。当有多个执行命令时,就需要使用ENTRYPOINT。

  • 相关阅读:
    IntrospectorCleanupListener作用
    买新车流程
    EXCEL-表格安全性:加密给与不同操作权限、表格怎么不让别人复制粘贴?
    全球安全帽品牌推荐整理
    Oracle-SQL语句的语法顺序和执行顺序
    Oracle-除了会排序,你对ORDER BY的用法可能一无所知!
    EXCEL——排序函数RANK,6种花式使用技巧
    常用云盘总结
    关于运算符结合顺叙的一些小探索
    类继承小总结
  • 原文地址:https://www.cnblogs.com/sxshaolong/p/14096155.html
Copyright © 2011-2022 走看看