zoukankan      html  css  js  c++  java
  • Dockerfile的用法及写法

    Dockerfile是一堆指令,在docker build的时候,按照该指令进行操作,最终生成我们期望的镜像

    1.Dockerfile用法

    #build是构建镜像必须的参数
    #.是指定当前目录
    #-t及后面的参数是镜像名字
    #-f为指定Dockerfile文件,如果文件名为Dockerfile也可以不写
    docker build . -t ImageName:ImageTag -f Dockerfile

    2.Dockerfile写法

    • FROM 指定基础镜像,必须为第一个命令

    格式:
    	FROM <image>
    	FROM <image>:<tag>
    示例:
    	FROM mysql:5.7
    注意:
    	tag是可选的,如果不使用tag时,会使用latest版本的基础镜像
    • MAINTAINER 镜像维护者的信息

    格式:
    	MAINTAINER <name>
    示例:
    	MAINTAINER Yongxin Li
        MAINTAINER inspur_lyx@hotmail.com
        MAINTAINER Yongxin Li <inspur_lyx@hotmail.com>
    注意:
    	这个参数不是很重要,不写也可
    • COPY|ADD 添加本地文件到镜像中

    格式:
    	COPY <src>... <dest>
    示例:
        ADD hom* /mydir/          # 添加所有以"hom"开头的文件
        ADD test relativeDir/     # 添加 "test" 到 `WORKDIR`/relativeDir/
        ADD test /absoluteDir/    # 添加 "test" 到 /absoluteDir/
    注意:
    	此参数做数据持久化及配置文件更新
    • WORKDIR 工作目录

    格式:
    	WORKDIR /path/to/workdir
    示例:
        WORKDIR /a  (这时工作目录为/a)
    注意:
    	通过WORKDIR设置工作目录后,Dockerfile中其后的命令RUN、CMD、ENTRYPOINT、ADD、COPY等命令都会在该目录下执行
    • RUN 构建镜像过程中执行命令

    格式:
    	RUN <command>
    示例:
        RUN yum install nginx
        RUN pip install django
        RUN mkdir test && rm -rf /var/lib/unusedfiles
    注意:
    	RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache
    • CMD 构建容器后调用,也就是在容器启动时才进行调用

    格式:
        CMD ["executable","param1","param2"] (执行可执行文件,优先)
        CMD ["param1","param2"] (设置了ENTRYPOINT,则直接调用ENTRYPOINT添加参数)
        CMD command param1 param2 (执行shell内部命令)
    示例:
        CMD ["/usr/bin/wc","--help"]
        CMD ping www.baidu.com
    注意:
    	CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。
    • ENTRYPOINT 设置容器初始化命令,使其可执行化

    格式:
        ENTRYPOINT ["executable", "param1", "param2"] (可执行文件, 优先)
        ENTRYPOINT command param1 param2 (shell内部命令)
    示例:
        ENTRYPOINT ["/usr/bin/wc","--help"]
    注意:
    	ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令
    • ENV定义的环境变量

    格式:
        ENV <key> <value>
        ENV <key>=<value>
    示例:
        ENV myName John
        ENV myCat=fluffy
    注意:
    	如果是定义了系统环境变量,就会直接被系统调用。比如MySQL的的用户密码,不过这种参数最好在启动容器的时候用-e参数指定比较灵活,像字符集这种变量可以在docker里直接指定
    • EXPOSE

    #该参数只会在容器启动后显示所写端口,没有实际意义
    格式:
        EXPOSE <port> [<port>...]
    示例:
        EXPOSE 80 443
        EXPOSE 8080
        EXPOSE 11211/tcp 11211/udp
    注意:
        EXPOSE并不会让容器的端口访问到主机。要使其可访问,需要在docker run运行容器时通过-p来发布这些端口,或通过-P参数来发布EXPOSE导出的所有端口

    通常来说Dockerfile要以CMD结尾,我是这样理解的。

  • 相关阅读:
    Android Studio 解决unspecified on project app resolves to an APK archive which is not supported
    IOS 一句代码搞定启动引导页
    iOS—最全的真机测试教程
    Hue的三大特点、三大功能和架构
    CentOS和Ubuntu系统下安装vsftp(助推大数据部署搭建)
    Starting vsftpd for vsftpd: [FAILED]问题的解决
    大数据搭建各个子项目时配置文件技巧(适合CentOS和Ubuntu系统)(博主推荐)
    CentOS6.5下Cloudera安装搭建部署大数据集群(图文分五大步详解)(博主强烈推荐)
    Hue的全局配置文件hue.ini(图文详解)
    Cloudera Hue是什么?
  • 原文地址:https://www.cnblogs.com/zrxuexi/p/15735333.html
Copyright © 2011-2022 走看看