zoukankan      html  css  js  c++  java
  • centos7下安装docker(dockerfile常用的指令)

    FROM:指定ase镜像

    MAINTAINER:设置镜像作者,可以是任意字符

    COPY:将文件从build  context复制到镜像。支持两种形式:1.COPY src dest 2.COPY [“src”,“dest”]

    注意:src只能指定build context中的文件或目录

    ADD:与COPY类似,从build context复制文件到镜像。不同的是。如果src是归档文件(tar,zip,tgz,xz等),文件会自动解压到dest。

    ENV:设置环境变量,环境变量可被后面的指令使用。

    例如:ENV MY_VERSION 1.3

       RUN yum install -y mypackage=$ENV MY_VERSION 1.3

    EXPOSE:制定容器中的进程会监听牧歌端口,Docker可以将该端口暴露出来

    VOLUME:将文件或者是目录声明为volume

    WORKDIR:为后面的RUN CMD ENTRYPOINT ADD   COPY   指令设置镜像中的当前目录

    RUN: 在容器中运行相应的指令

    CMD:容器启动时运行的相应的命令,dockerfile中可以有多个cmd指令,但只有最后一个生效。CMD可以被docker run 之后的参数代替

    ENTRYPOINT:设置容器启动的时候运行的命令。Dockerfile中可以有多个ENTRYPOINT指令,但只有最后一个生效,CMD或docker run之后的参数都会被当作参数传递给ENTRYPOINT

    下面做一个实验

    编辑dockerfile

    创建镜像进行验证:

    创建完成

    进行验证:

    证明,运行容器时默认会进入WORKDIR指定的目录下,RUN和COPY也会在WORKDIR下执行,输出ENV的变量hello

     

    注:build context值得是Dockerfile所在的目录以及子目录

    分析RUN CMD ENTRYPOINTDE 区别

    1.RUN:执行命令,创建新的镜像层,通常执行安装的命令

    2.CMD:容器启动后默认执行的命令,可以被docker run后面的参数代替

    3.ENTRYPOINT:容器启动时执行的命令,CMD的参数可以执行给ENTRYPOINT

    RUN  CMD  ENTRYPOINT执行的时候会有两种形式:SHELL 和 EXEC

    SHELL格式:<说明><命令>

    例如:RUN yum install -y tree

              CMD echo “hello”

              ENTRYPOINT echo “likun”

    SHELL 会调用/bin/sh -c <命令>

    例如:ENV  name  likun

             ENTRYPOINT echo “hello,$name”

    执行 docker run <镜像>

    会输出 hello,likun   这里的环境变量被likun代替

    EXEC格式:<说明>["executable","param1","param2",...]

    例如:RUN ["yum","install","tree"]

              CMD ["/bin/echo","hello world"]

              ENTRYPOINT ["/bin/echo","hello world"]

    当命令执行的时候,会直接调用<命令>,不会被shell解析

    例如:ENV name likun

               ENTRYPOINT [“/bin/echo”,“hello,$name”]

    实验充分证明:exec格式不会解析shell,以上的实验直接将$HELLO输出,而不是hi,hello

    如果希望使用环境变量,可以做一下修改:

    ENV HELLO "hello"

    ENTRYPOINT ["/bin/sh",-c","echo hi,$HELLO"]

    运行容器时输出  hi,hello

    下面做一下实验:

    修改Dockerfile

    创建新的镜像:

    创建成功

    运行镜像:

    直接输出hi,hello

    注:EXEC格式可读性更强,更容易被理解。CMD 和ENTRYPOINT 推荐使用EXEC格式,RUN则两种格式都可以

    以上说明了两中格式,下面研究一下他们的区别,什么时候用什么格式

    RUN

    RUN有两种格式:

    1.Shell格式:RUN

    2.EXEC格式:RUN ["executable",“param1”,“param2”]

    使用RUN安装多个安装包的例子

    RUN yum insatll -y tree httpd vim

    注意:1.yum install  update和yum install -y最好放在一个指令中执行,如:RUN yum install update && yum install -y tree,这样能够保证每次安装的都是新的安装包。如果他们分开使用的话会分别为yum install update 和yum install -y分别创建一个镜像层,下次创建新的镜像的时候会直接使用cache这个镜像,不能保证安装的是最新的安装包。

    2.也可以使用docker build -t 镜像名字 --no-cache也可以保证install是最新的。

    3.--no-cache适用于任何场景,update&install仅适用于安装软件

    CMD

    容器启动且docker run 没有指定其他命令时运行的命令

    1.如果docker run指定了新的命令,CMD指定的默认命令将被忽略

    2.如果Dockerfile中有多个CMD,,只有最后一个CMD生效

    CMD有三种格式:

    1.Exec格式:CMD ["executable","param1","param2"]这是CMD的推荐格式

    2.CMD[“param1”,“param2”]为ENTRYPOINT提供额外的参数,此时ENTRYPOINT必须使用Exec格式,这种格式要与ENTRYPOINT配合使用,为ENTRYPOINT提供默认参数

    3.SHELL格式:CMD command param1 param2 

    param是参数的意思

    进行实验

    同样是修改Dockerfile

    制作镜像

    查看镜像

    运行镜像,输出hi likun

    在docker run it  centos-cmd:cmd加命令,CMD会被忽略,下面进行实验

    CMD直接被忽略,输出hello docker

    ENTRYPOINT:可以让容器以应用程序或者服务的形式运行

    ENTRYPOINT和CMD很像,都可以指定要执行的命令及参数。但是ENTRYPOINT不会被忽略,一定会被执行,即使docker run后面指定了其他命令。

    ENTRYPOINT有两种格式:

    1.Exec格式:ENTRYPOINT [“executable”,“param1”,“param2”],这个是ENTRYPOINT的推荐格式

    2.SHELL格式:ENTRYPOINT command param1 param2

    注:在为ENTRYPOINT选择格式时一定要注意,因为两种格式差别很大。

    再次强调:ENTRYPOINT的exec格式中的参数始终会被使用,CMD的参数会被docker run后面的参数替换;shell格式会忽略任何CMD或docker run提供的参数

    总结

    1.使用RUN 指令安装应用和软件包,构建镜像

    2.使用ENTRYPOINT运行应用程序或服务,比如运行一个MySQL,应该优先使用EXEC格式的ENTRYPOINT指令

    3.CMD可为ENTRYPOINT提供额外的默认参数,同时可以利用docker run后面的参数进行更改。

  • 相关阅读:
    Java核心技术 卷一 笔记四 库类的直接使用
    Java核心技术 卷一 笔记三 大数值及数组
    Java核心技术 卷一 笔记2 字符串的复制
    Java核心技术 卷一 笔记1
    修改css 样式后, hover事件 不生效
    修改 element ui input 输入框 样式不生效问题
    css3 计算属性
    Vue3 改动系列
    浏览器实现,向下滑动 鼠标滚轮,页面横向移动
    linux ceont0s7 vue 打包压缩图片 一直报错
  • 原文地址:https://www.cnblogs.com/lkun/p/7683504.html
Copyright © 2011-2022 走看看