美文网首页
Docker_Dockerfile

Docker_Dockerfile

作者: 魔曦帝天 | 来源:发表于2019-10-18 20:05 被阅读0次

    Dockerfile 自动构建 Docker 镜像

    Dockerfile 指令集
    FROM:指定基础镜像,必须为第一个命令(FROM mysql:5.6)
    MAINTAINER: 维护者信息
    RUN:构建镜像时执行的命令 (RUN <command>)
    ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似 wget(ADD <src>... <dest>)
    COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
    CMD:构建容器后调用,也就是在容器启动时才进行调用
    ENV:设置环境变量
    EXPOSE:指定于外界交互的端口
    WORKDIR:工作目录,类似于cd命令
    USER:指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。使用USER指定用户时,可以使用用户名、UID或GID,或是两者的组合。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户
    

    1 RUN 和 CMD
    1.1 RUN 是在构建一个镜像时,在构建过程中的容器内运行的命令,并提交结果。
    每个 RUN 指令都会给目前正在创建的镜像增加一层。
    1.2 CMD 是当使用一个镜像运行为一个容器的时候默认运行的命令。
    CMD指令在构建时不执行任何操作,只是为运行一个容器时,提供一个默认执行的命令。
    一个镜像中只能有一个 CMD 指令,多个的话,最后一个生效。
    其指定的命令可以被运行一个容器时指定的命令所覆盖
    比如
    镜像中的 CMD 为:
    CMD ["/bin/bash"]

    假设运行容器时:

    docker run   -it   centos    ls  /tmp
    那就是执行 ls /tmp 命令
    

    二、关于文件方面
    1 COPY 和 ADD
    两者都是把宿主机的文件复制到容器中的

    1.1 COPY 是官方比较推荐的做法。
    原路径 支持通配符
    保留源文件的元数据
    
    1.2 ADD 支持自动解压,但是会导致构建镜像时的缓存失效,从而影响构建的效率
    

    三、关于容器数据持久化方面
    关于使用数据卷和挂载主机目录的提示

    如果将空卷挂载到容器中的含有内容的目录中,则会将这些内容复制到卷中。同样,如果您启动容器并指定一个尚不存在的卷,则会为您创建一个空卷。

    如果将一个bind mount 或非空的数据卷 挂载到容器中的一个非空目录中,则这些内容会被遮盖隐藏。隐藏的内容不会被删除或更改,此时也不可被访问。就像在 Linux 机器中使用 mount 命令一样的效果

    docker build -f /path/to/a/Dockerfile (-f指向文件系统中任何位置的Dockerfile)
    docker build --no-cache 不使用缓存
    

    必要准则
    第一条指令必须是 FROM。一个声明以#字符开头则被视为注释。可以在Docker文件中使用RUN,CMD,FROM,EXPOSE,ENV等指令
    CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令
    执行Dockerfile从当前路径下匹配

    Dokerfile中
    # Base images 基础镜像
    FROM centos
    
    #MAINTAINER 维护者信息
    MAINTAINER luoyinsheng 
    
    #ENV 设置环境变量
    ENV PATH /usr/local/nginx/sbin:$PATH
    
    #ADD  文件放在当前目录下,拷过去会自动解压
    ADD nginx-1.16.1.tar.gz /usr/local/   
    
    #RUN 执行以下命令 
    RUN yum -y install epel-release.noarch
    RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
    RUN useradd -s /sbin/nologin -M www
    
    #WORKDIR 相当于cd
    WORKDIR /usr/local/nginx-1.16.1 
    
    RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
    
    #EXPOSE 映射端口
    EXPOSE 80
    
    #CMD 运行以下命令
    CMD ["nginx","-g","daemon off;"]
    
    docker build -t nginx:v1  .  (制作镜像执行)
    
    911490-20171208222222062-849020400.png

    相关文章

      网友评论

          本文标题:Docker_Dockerfile

          本文链接:https://www.haomeiwen.com/subject/stuwmctx.html