• 容器技术(三) dockerfile常用指令【11】


    (八)dockerfile常用指令

    (1)常用命令

    • FROM,指定base镜像;

    • MAINTAINER,设置镜像的作者,可以任意字符串;

    • COPY,将文件build context 复制到镜像里。

      COPY支持两种形式:

      ​ ①COPY src dest

      ​ ②COPY ["src","dest"]

      ​ 注意,src只能指定build context 中的文件或者目录。

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

      ENV MY_VERSION 1.3
      RUN apt-get install mypackage=$MY_VERSION
      
      
    • ADD,与copy类似,从build context复制文件到镜像。不同的是,如果src是归档文件(tar,zip,tgz,xz等),文件会被自动解压到dest。

    • 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:

    root@cuiyongchao:/dockerfile# cat Dockerfile 
    #my dockerfile
    FROM busybox
    MAINTAINER cuiyongchao@163.com
    WORKDIR /dockerfile
    RUN touch tmpfil02
    COPY ["testfile01","."]
    ADD ["testfile01.tar.gz","."]
    ENV WELCOM "YOU ARE IN MY CONTAINER,WELCOM!"
    
    root@cuiyongchao:/dockerfile# 
    
    

    构建镜像:

    root@cuiyongchao:/dockerfile# docker build -t my-image .
    Sending build context to Docker daemon  14.34kB
    Step 1/7 : FROM busybox
     ---> f0b02e9d092d
    Step 2/7 : MAINTAINER cuiyongchao@163.com
     ---> Running in 603035a08fa2
    Removing intermediate container 603035a08fa2
     ---> 900411854c68
    Step 3/7 : WORKDIR /dockerfile
     ---> Running in e81a95656061
    Removing intermediate container e81a95656061
     ---> ab089ef583dd
    Step 4/7 : RUN touch tmpfil02
     ---> Running in 25a5af1ebc5e
    Removing intermediate container 25a5af1ebc5e
     ---> dc0c07e6400d
    Step 5/7 : COPY ["testfile01","."]
     ---> 214e7ed1b78f
    Step 6/7 : ADD ["testfile01.tar.gz","."]
     ---> 28dd901049c5
    Step 7/7 : ENV WELCOM "YOU ARE IN MY CONTAINER,WELCOM!"
     ---> Running in cdd4dd07b271
    Removing intermediate container cdd4dd07b271
     ---> a0fdf1e57442
    Successfully built a0fdf1e57442
    Successfully tagged my-image:latest
    root@cuiyongchao:/dockerfile# 
    
    

    ​ ① 构建前确保 build context 中存在需要的文件。

    ​ ② 依次执行 Dockerfile 指令,完成构建。

    ​ 运行容器,验证镜像:

    root@cuiyongchao:/dockerfile# docker run -it my-image
    /dockerfile # ls 
    testfile01  tmpfil02
    /dockerfile # echo $WELCOM
    YOU ARE IN MY CONTAINER,WELCOM!
    /dockerfile # 
    
    

    ​ ① 进入容器,当前目录即为 WORKDIR。如果 WORKDIR 不存在,Docker 会自动为我们创建。

    ​ ② WORKDIR 中保存了我们希望的文件和目录:
    目录 testfile01:由 ADD 指令从 build context 复制的归档文件 testfile01.tar.gz,已经自动解压。
    文件 tmpfil02:由 RUN 指令创建。
    文件 testfile01:由 COPY 指令从 build context 复制。

    ​ ③ ENV 指令定义的环境变量已经生效。

  • 相关阅读:
    #敏捷个人# 每日成长101:第72天【自我接纳】
    如何从敏捷个人架构图看出时间管理的演变
    #敏捷个人# 每日成长101:第73天【选择】
    2012年度总结:内心宁静的2012
    欢迎关注敏捷个人微信公众帐号
    敏捷个人的创立与详解Scrum会议
    学习敏捷个人卡片V1.0
    #敏捷个人# 每日认识101(11):做自己的医生
    #敏捷个人# 面向对象分析与PPT有什么关系?
    《敏捷个人-认识自我,管理自我 v0.6.pdf》配套PPT打印书籍
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/13915921.html
Copyright © 2020-2023  润新知