zoukankan      html  css  js  c++  java
  • [Dockerfile构建镜像]

    构建镜像

    构建镜像的特征(前提)

    
    1、需要基础环境
    2、可执行命令
    3、启动命令
    
    

    Dockerfile

    
    	Dockerfile 由一行行命令语句组成, 并且支持以 # 开头的注释行。一般而言, Dockerfile 主体内容分为四 部分:基础镜像信息、 维护者信息、 镜像操作指令和容器启动时执行指令。
    	
    	Docker 以从上到下的顺序运行 Dockerfile 的指令。为了指定基本映像,第一条指令必须是 FROM。一个声 明以#字符开头则被视为注释。可以在 Docker 文件中使用 RUN,CMD,FROM,EXPOSE,ENV 等指令。
    
    	1、Dockerfile命名:Dockerfile
    	
    	2、Dockerfile是由指令组成(Dockerfile指令必须大写)
    	
    	3、实现基础环境:FROM
    	
    	4、可执行命令:RUN
    	
    	5、启动命令(指定命令必须运行在前台):CMD # 镜像启动后执行的命令
    	
    	6、开始构建:docker build -t [镜像名称] . ( . 指代的就是Dockerfile文件所在路径)
    	
    	7、docker build --no-cache 是禁止构建镜像使用缓存
    	
    

    Dockerfile指令

    FROM :指定基础镜像

    
    以什么镜像为基础来构建自己的镜像,必须指定 
    
    格式:
    
        FROM <image> 
        FROM <image>:<tag> 
        FROM <image>@<digest> 
        
    示例: 
    
    	FROM mysql:5.6 
    
    注: tag 或 digest 是可选的,如果不使用这两个值时,会使用 latest 版本的基础镜像
    
    

    MAINTAINER :维护者信息

    
    可以备注一些信息,名字、联系方式等等一些信息,可以不写
    
    格式:
    
        MAINTAINER <info> 
    
    示例:
    
        MAINTAINER username 
        MAINTAINER username@163.com 
        MAINTAINER Jusername username@163.com
    
    

    RUN :执行一个命令

    
    	构建镜像的时候,执行什么命令!执行的命令结果可以在构建的镜像中体现。
    	
    	如果 执行 echo 命令,则会构建镜像中 打印 echo 打印的信息,也可以安装一些 rpm 包,镜像启动后,容器中就会带有安装好的 rpm 。
    
    格式:
     
        RUN <command>	
    
    注意:
    	
    	RUN 的每次执行应该是以根目录为当前位置
    	
    	RUN 指令创建的中间镜像会被缓存,只要不改变并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建 时指定--no-cache 参数,如:docker build --no-cache
    		
    

    CMD:设置一个启动命令

    
    构建的镜像 run 后调用,也就是在容器启动时才进行调用
    
    格式:
    
    	CMD command(执行的命令)
    	
    注: 
    
    	CMD 不同于 RUN,CMD 用于指定在容器启动时所要执行的 命令,而RUN 用于镜像指定构建时所要执行的命令。
    
    

    WORKDIR:设置工作目录

    
    容器启动后,默认所在的目录位置,进入容器就在这个目录
    
    格式:
    
    	WORKDIR /path/to/workdir
    
    示例:
    
        WORKDIR /a (这时工作目录为/a) 
        WORKDIR b (这时工作目录为/a/b) 
        WORKDIR c (这时工作目录为/a/b/c)
    	
    注:
    
    	通过 WORKDIR 设置工作目录后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT、ADD、COPY 等命令都会在该目录下执行。在使用 docker run 运行容器时,可以通过-w 参数覆盖构建时所设置的工作目录。
    	
    

    ENV:设置容器内默认的环境变量

    
    格式:
    
    	ENV <key> <value> 
    	#<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置 一个变量
    	
    	ENV <key>=<value> ... 
    	#可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果 <key>中包含空格,可以使用来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
    
    示例:
    	
    	ENV myName liudehua
    	ENV myName=wuyanzu
    	
    

    EXPOSE:指定于外界交互的端口

    
    对外暴露(开放)的端口 可以跟多个端口 也可指定协议 
    
    格式:
    
    	EXPOSE <port> [<port>...多个端口号]
    	
    示例:
    
    	EXPOSE 80 
    	EXPOSE 8080 9998
    	EXPOSE 11211/tcp 11211/udp
    	
    注:
    
    	EXPOSE 并不会让容器的端口访问到主机。要使其可访问,需要在 docker run 运行容器时通过-p 来 发布这些端口,或通过-P 参数来发布 EXPOSE 导出的所有端口.
    	如果不使用EXPOSE指定端口,使用-大P也不会映射端口,只有-小p才能指定端口
    	
    

    VOLUME : 指定存储卷

    
    格式:
    
    	VOLUME ["/path/to/dir"]
    	
    示例:
    
    	VOLUME ["/data", "/var/log", "/mnt"]
    	
    注:
    	
    	还是需要 -v 映射挂载才可以使用,VOLUME 指定的是容器的路径,有个提示的作用,告诉我们需要挂载到容器内哪些目录来使用这个镜像。
    
    

    查看挂载点

    
    df -h
    
    

    ARG : 指定运行时变量

    
    用于指定构建镜像中运行的变量
    
    格式:
    
    	ARG 变量名=默认的变量值(可以不写)
    	
    示例:
    
    	ARG NAME
    	ARG username=liudehua
    	
    使用场景:
    	
    	定义一个构建镜像的模板,不知道以后要装什么东西,可以先在构建镜像的Dockerfile文件里面定义变量名,构建镜像的时候传入参数(自己想要安装的rmp包名),比较方便。
    
    

    ONBUILD : 触发器

    
    当当前的镜像作为基础镜像时执行
    
    格式: 
    	
    	ONBUILD 指令(ADD、RUN之类的)
    	
    示例:
    
    	ONBUILD ADD . /app/src
    	ONBUILD RUN rm -rf / 
        
    注:
    
    	构建自己的镜像的时候,在构建镜像的文件中加入ONBUILD 指令,这样你构建的镜像被人当作基础镜像时候的时候,就会触发你设置的ONBUILD 指令。如果不想别人使用你的镜像,便可以这样操作。
    
    

    ADD:添加文件到镜像

    
    可以把本地的文件添加到镜像中,tar 类型文件会自动解压。也可以访问网络资源,但是网络压缩资源不会被解压
    
    格式:
    
    	ADD hom* /mydir/ 	 # 支持使用 * 表示hom开头的都添加
    	ADD hom?.txt /mydir/ # hom开头 .txt结尾的都添加
    	ADD 宿主主机路径 镜像路径 
    
    

    COPY:复制文件到镜像

    
    功能类似 ADD,但是是不会自动解压文件,也不能访问网络资源
    
    语法:
    
    	COPY 宿主主机路径 镜像路径
    
    提示:
    
    	指令逻辑和 ADD 十分相似,镜像路径可以是一个绝对路径,也可以是相对路径(相对路径的对象是WORKDIR的路径)。
    	
    

    ADDCOPY之间的区别<

    	1、ADD 支持解压(tar类型的压缩包),COPY不支持
    		
    		ADD 从宿主主机添加到容器目录里面的文件如果是压缩包,ADD添加到容器中会自动解压,COPY则不会自动解压,COPY添加什么就是什么。
    		
    	2、ADD支持网络下载(不支持解压),COPY不支持
    	
    		COPY 后面第一个参数跟 URL 会直接提示来源不能是一个 URL ,ADD 则可以下载 网络资源,支持网络的下载 ,但是下载是压缩文件也不会自动解压。
    	
    	3、ADD和COPY : 当镜像中目录不存在时,需要加/结尾。当镜像中目录存在时,则没有区别。
    	
    		如果镜像目录不存在,也没有 / 结尾,宿主主机的文件,会在容器中改成镜像指定目录的名字。如果镜像目录最后 / 结尾,宿主主机的文件则会在容器的镜像指定目录下,也就是说 / 结尾 容器中如果不存在镜像指定目录,会先创建目录,然后再把宿主的文件放在目录下。
    
    

    Dockerfile 构建镜像案例

    
    FROM centos7   # 基础镜像
    
    MAINTAINER Alvin alvincy@qq.com # 备注信息
    
    RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    # 执行指令  
    
    RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 执行指令
    
    RUN yum makecache  # 执行指令
    
    RUN yum update -y  # 执行指令
    
    RUN yum install python3 -y  # 执行指令
    
    RUN pip3 install django  # 执行指令
    
    COPY docker /root/docker  # 复制宿主主机目录 到 镜像
    
    WORKDIR /root/docker  # 设定容器的默认目录
     
    EXPOSE 8080  # 对外开放端口
    
    CMD ["python3", "manage.py", "runserver", "0.0.0.0:8080"] # 设置启动命令
    
    

    docker build 开始构建镜像

    
    docker build 参数  PATH | URL | -
    
    其中PATH代表含有Dockfile的目录,当然也可以是URL中含有Dockerfile
    
    常用参数:
    
        -t  --tag list  指定生成镜像标签,格式为name:tag
        	
        	docker bulid -t django:998 .
        
        -f, --file string  单独指定Dockerfile文件位置
        
        	docker build -t django:998 -f mysql(构建镜像使用的文件名) .
        
        --build-arg list  设置构建时的变量
        
        	docker build --build-args=NAME=liudehua
        	docker build --build-args=STR='python3 httpd-tools'
        
        --no-cache  构建镜像时候不使用缓存

    转https://www.cnblogs.com/liupengfei1123/p/14942280.html
  • 相关阅读:
    数据库优化
    List,map,Set区别
    ID选择器
    最简单的添加删除行操作
    JQ2
    最简单的JQ实现
    20180416
    一行细分的HTML写法
    out参数的使用
    结构的使用
  • 原文地址:https://www.cnblogs.com/smallfa/p/14943650.html
Copyright © 2011-2022 走看看