zoukankan      html  css  js  c++  java
  • 容器技术(三) 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 指令定义的环境变量已经生效。

  • 相关阅读:
    关于android.view.WindowLeaked异常的解决方案
    android 使用shape使android组件呈现特殊效果
    (IOS)N duplicate symbols for architecture i386
    (IOS)国际本地化设置
    URL参数中有 特殊符号或加密数据 的问题解决
    S2S:分享出的营销机遇
    (IOS)Apple 证书相关
    (IOS)阻止文件被iTunes和iCloud同步
    (IOS)多线程开发
    时间复杂度
  • 原文地址:https://www.cnblogs.com/cuiyongchao007/p/13915921.html
Copyright © 2011-2022 走看看