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后面的参数进行更改。

  • 相关阅读:
    python_函数设计
    python_自定日历
    python_日历
    python_选择结构
    python_集合
    python_code list_3
    Oracle 游标使用全解
    JavaWeb中验证码的实现
    oracle 存储过程和函数例子
    Oracle中的存储过程简单例子
  • 原文地址:https://www.cnblogs.com/lkun/p/7683504.html
Copyright © 2011-2022 走看看