zoukankan      html  css  js  c++  java
  • dockerfile构建镜像常用命令

    一、什么是dockerfile

    Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。
    docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。
    # 例如:
    docker build -f /path/to/a/Dockerfile

    Dcokerfile的基本结构

    Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,'#' 为 Dockerfile 中的注释。

    二、dockerfile文件说明

    Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以字符开头则被视为注释。可以在Docker文件中使用RUNCMDFROMEXPOSEENV等指令。

    # 基础镜像:centos后可加版本:centos:7
    FROM centos:7
    #维护者信息注释(选写)
    MAINTAINER xx xx@xx.com
    
    # 安装基础软件:尽可能少RUN,可以使用&& 链接
    RUN rpm -ivh https://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm && yum  install nginx -y
    
    # add 将本地文件扔到容器里
    ADD index1.html /usr/share/nginx/html/index.html
    
    # 开放端口
    EXPOSE 80
    # ADD run.sh /run.sh
    # RUN chmod 755 /run.sh
    # 启动执行
    CMD ["nginx"]
    # 创建新镜像 : .为Dockerfile所在目录,在创建镜像的目录执行下面命令,ADD里的东西也放在同一个目录
    docker build -t nginx:centos .
    
    # 启动镜像,去访问index.html
    docker run -d -P nginx:centos
    [root@ ~]# docker images
    REPOSITORY          TAG       IMAGE ID       CREATED         SIZE
    nginx               centos    578353538643   5 minutes ago   420MB
    
    # 登录
    docker run -it -P  nginx:centos bash
    
    [root@ ~]# docker ps
    CONTAINER ID   IMAGE          COMMAND   CREATED          STATUS          PORTS                                                                                NAMES
    8de513a57286   nginx:centos   "bash"    17 seconds ago   Up 16 seconds   0.0.0.0:49174->80/tcp, :::49174->80/tcp, 0.0.0.0:49173->443/tcp, :::49173->443/tcp   sharp_sammet

    常用参数:

    FROM: 指定基础镜像,必须为第一个命令
    
    MAINTAINER: 维护者信息
    
    ADD
    #构建镜像时执行的命令,将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源
    格式:ADD <src>... <dest>
    
    COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
    
    EXPOSE 指定容器与宿主机交互端口
    
    RUN
    # 构建镜像时执行的命令,重复执行这个dockerfile时不会再执行
    # linux
    RUN shell命令
    # windows
    RUN ["executable", "param1", "param2"]
    """
    注1:
      RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache
    
    注2:多行命令不要写多个RUN,原因是Dockerfile中每一个指令都会建立一层.
    多少个RUN就构建了多少层镜像,会造成镜像的臃肿、多层,不仅仅增加了构件部署的时间,还容易出错。
    """
    
    CMD
    构建容器后调用,也就是在容器启动时才进行调用
    格式:
        CMD ["executable","param1","param2"] (执行可执行文件,优先)
        CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
        CMD command param1 param2 (执行shell内部命令)
    示例:
        CMD echo "This is a test." | wc -
        CMD ["/usr/bin/wc","--help"]注:   CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
    
    ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去"application",只使用参数。
    
    ENV 设置环境变量
    # 语法有两种
    1. ENV <key> <value>
    2. ENV <key>=<value> ...
    # 两者的区别就是第一种是一次设置一个,第二种是一次设置多个
    
    VOLUME 可实现挂载功能,可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种
    # 语法为,可以时多个值:
    VOLUME ["/data"]
    VOLUME ["/var/log/"]
    VOLUME /var/log
    VOLUME /var/log /var/db
    
    USER 设置启动容器的用户
    USER daemo
    注意:如果设置了容器以daemon用户去运行,那么RUN, CMD 和 ENTRYPOINT 都会以这个用户去运行
    
    WORKDIR
    # 语法,类似cd功能:
    WORKDIR /path/to/workdir
    # 设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次。
    
    ARG:用于指定传递给构建运行时的变量
    格式:
        ARG <name>[=<default value>]

     

  • 相关阅读:
    SQL 分组 行变列的一个例子
    用JS如何獲得DropDownList所選Text和Value?
    用了.net2.0,再用1.1的问题。1.1里修改.cs文件不重新编译,.dll不重新生成。
    ASP.NET中上传文件
    获得用户控件的值!
    在没有vs2005环境里部署Crystal Reports 10水晶报表
    onkeypress,onkeydown,onkeyup区别
    2012湖南大学第八届程序设计竞赛 Incredible[公式]
    POJ3624 Charm Bracelet[01背包问题入门]
    HDOJ1257 最少拦截系统[DP入门]
  • 原文地址:https://www.cnblogs.com/yangmeichong/p/15450356.html
Copyright © 2011-2022 走看看