精华内容
下载资源
问答
  • Dockerfile制作镜像

    2019-09-03 17:52:34
    Dockerfile制作镜像 文章目录Dockerfile制作镜像Dockerfile的指令 镜像生成的途径 Dockerfile制作 基于容器制作(直接在容器中制作) Dockerfile只是构建Docker映像的源代码 Docker可以通过读取Dockerfile中的...

    Dockerfile制作镜像

    • 镜像生成的途径

      1. Dockerfile制作
      2. 基于容器制作(直接在容器中制作)
        docker2_002
    • Dockerfile只是构建Docker映像的源代码

      1. Docker可以通过读取Dockerfile中的指令来自动构建图像
      2. Dockerfile是一个文本文档,包含用户可以在命令行上调用的所有命令来组装一个图像
      3. 使用docker构建用户可以创建一个自动构建,该构建可以连续执行多个命令行指令
        docker2_001
    • Dockerfile的文件格式

      1. 格式(Format)
        • # Comment#开头的为注释信息
        • INSTRUCTION arguments 指令和参数
      2. Dockerfile的指令不区分大小写
        • 通常都会将指令写成大写,以便于区分指令和参数。
      3. Docker按顺序在Dockerfile中运行指令
      4. 第一个指令必须是“FROM”,以便指定要从中构建的基本映像
    • 环境替代(Environment replacement)

      1. Environment变量(使用ENV语句声明)也可以在某些指令中用作Dockerfile要解释的变量
      2. Dockerfile中使用$variable_name${variable_name}标注环境变量
      3. ${variable_name)语法还支持一些标准的bash修饰符
        • ${variable:-word} 如果variable有值,那么使用variable的值,如果没有就使用word字符串作为值
        • ${variable:+word} 如果variable有值,那么使用word字符串作为值,如果没有设置就是variable值,即空值。

    Dockerfile的指令

    1. FROM 指令

      • FROM指令是最重要的一个且必须为Dockerfile文件开篇的第一个非注释行,用于为映像文件构建过程指定基准镜像,后续的指令运行与此基准镜像所提供的运行环境
      • 实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build会在docker主机上查找指定的镜像文件,在其不存在时,则会从Docker Hub Registry上拉取所需的镜像文件
        • 如果找不到指定的镜像文件,docker build会返回一个错误信息
      • 语法:
        • FROM <repository>[:<tag>]<FROM <resository>@<digest>
          • <reposotiry>:指定作为base image的名称
          • <tag>:buse image的标签,省略时默认为latest;
          • <digest> buse image镜像的哈希码
      # 在任意目录中创建Dockerfile文件
      [root@gdy img1]# vim Dockerfile
      
    2. MAINTANIER 指令(depreacted,作者信息)

      • 用于让Dockerfile制作者提供本人的详细信息
      • Dockerfile 并不限制MAINTAINER指令可能出现的位置,但推荐将其放置于FROM指令之后
      • 语法:MAINTAINER <authtor's detail>
        • <authtor's detail>可以是任何文本信息,单通常会使用作者名称及邮件地址
          1. 示例:MAINTAINER "xdd <xdd@xdd.com>"
    3. LABEL 指令(docker1.7后的语法)指定元数据

      • 语法:LABEL <key>=<value> <key>=<value> <key>=<value> ...
    4. COPY 指令

      • 用于从Docker主机复制文件至创建的新映像文件

      • 语法 COPY <src> ... <dest>COPY ["<src>",..."<dest>"]

        • <src>:要复制的源文件或目录,支持使用通配符
        • <dest>:目标路径,即正在创建的image的文件系统路径;建议为<dest>使用绝对路径,否则,COPY指定则以WORKDIR为其实路径;
      • 文件复制准则

        • <src>必须是build上下文中的路径,不能是其父目录中的文件
        • 如果<src>是目录,则其内部文件或子目录会被递归复制,但<src>目录自身不会被复制
        • 如果指定了多个<src>,或在<src>中使用了通配符,则<dest>必须是一个目录,且必须以/结尾
        • 如果<dest>事先不存在,它将会被自动创建,这包括其父目录路径
      • 测试dockerfile文件内容为:

        # Description: test image
        FROM busybox:latest
        MAINTAINER "xdd <xdd@xdd.com>"
        # LABEL maintainer="xdd <xdd@xdd.com>"
        
        # 指定环境路径
        # WORKDIR=/data/
        # 复制单个文件
        COPY index.html /data/web/html/
        # 复制目录下的所有文件
        COPY yum.repos.d /etc/yum.repos.d/
        
        • docker build -t tinyhttpd:v0.1-1 ./ #更具当前目录下的dockerfile文件制作镜像
        • docker run --name t1 --rm tinyhttpd:v0.1-1 cat /data/web/html/index.html #可以测试镜像中文件是否已经存在
    5. ADD 命令

      • ADD命令类似于COPY命令,ADD支持使用TAR文件和URL路径
      • 语法:ADD <src> ... <dest>ADD ["<src>",..."<dest>"]
      • 操作准则
        1. 同COPY指令
        2. 如果<src>为URL且不以/结尾,则<src>指定的文件将被下载并直接创建为<dest>;如果<dest>/结尾,则文件名URL指定的文件将被直接下载并保存为<dest>/<filename>
        3. 如果<src>是一个本地系统上的压缩格式的tar文件,它将被展开为一个目录,其行为类似于tar -x命令;然而,通过URL获取到的tar文件将不会自动展开;
        4. 如果<src>有多个,或其间接或直接使用了通配符,则<dest>必须是一个以/结尾的目录路径;如果<dest>不以/结尾,则其被视作一个普通文件,<src>的内容将被直接写入到<dest>;
    6. VOLUME 命令(指定卷)

      • 用于在image中创建一个挂载点目录,以挂载Docker host上的卷或其它容器上的卷
      • 语法:VOLUME <mountpoint>VOLUME ["<mountpoint>"]
      • 如果挂载点目录路径下此前有文件存在,docker run 命令会在卷挂载完成后将此前的所有文件复制到新挂载的卷中
    7. EXPOSE 命令

      • 用于为容器打开指定要监听的端口以实现与外部通信
      • 指定暴露出的端口会绑定宿主机的随机端口
      • 语法:EXPOSE <port>[/<protocol>] [<port>[/<protocol>] ...]
        • <protocol>用于指定传输层协议,可为tcp或udp二者之一,默认为TCP协议
      • EXPOSE指令可一次指定多个端口,例如EXPOSE 11211/udp 11211/tcp
        1. 指定暴露端口后的容器可以使用-P选项暴露端口
          • docker run --name t2 --rm -P tinyhttpd:v0.1-7 /bin/httpd -f -h /data/web/html
          • docker port t2 可以查看t2暴露的端口信息
    8. ENV 命令

      • 用于为镜像定义所需要的环境变量,并可被Dockerfile文件中位于其后的其它指定(如ENV、ADD、COPY等)所调用
      • 调用格式为$variable_name${variable_name}
      • 语法:ENV <key> <value>ENV <key>=<value> ...
      • 第一种格式中,<key>之后的所有内容均被视作其<value>的组成部分,因此,一次只能设置一个变量;
      • 第二种格式可用一次设置多个变量,每个变量为一个<key>=<value>的键值对,如果<value>中包含空格,可以以反斜线(\)进行转义,也可通过对<value>加引号进行标识;另外,反斜线也可用于续行;
      • 定义多个变量时,建议使用第二种方式,以便在同一层中完成所有功能
    9. RUN 命令

      • 用于指定docker build过程中运行的程序,其可以是任何命令

      • 语法:RUN <command>RUN ["<executable>","<paraml>","<param2>"]

      • 第一种格式中,<command>通常是一个shell命令,且以"/bin/sh -c"来运行它,这意味着此进程在容器中的PID不为1,不能接收Unix信号,因此,当时用docker stop <container>命令停止容器时,此进程接收不到SIGTERM信号;

      • 第二种语法格式中的参数是一个JSON格式的数组,其中<executable>为要运行的命令,后面的<paramN>为传递给命令的选项或参数;然而,此种格式指定的命令不会以"/bin/sh -c"来发起,因此常见的shell操作如变量替换以及通配符(?.*等)替换将不会进行;不过,如果要运行的命令依赖于此shell特性的话,可以将其替换为类似下面的格式。

        • RUN ["/bin/bash","-c","<executable>","<param1>"]
      • 注意:如果要在shell中使程序获取主进程,可以使用exec COMMAND来执行命令。

        • Json数组中,要使用双引号
      • 简单示例,在dockerfile文件中使用:

        # Description: test image
        FROM busybox:latest
        MAINTAINER "xdd <xdd@xdd.com>"
        # LABEL maintainer="xdd <xdd@xdd.com>"
        
        ENV DOC_ROOT=/data/web/html/ \
            WEB_SERVER_PACKAGE="nginx-1.15.2.tar.gz"
        
        # 指定环境路径
        #WORKDIR=/
        #LABEL IMGDIR="/data/web/html/"
        
        COPY index.html ${DOC_ROOT:-/data/web/html/}
        COPY yum.repos.d /etc/yum.repos.d/
        ADD http://nginx.org/download/${WEB_SERVER_PACKAGE} /usr/local/src/
        #ADD ${WEB_SERVER_PACKAGE} /usr/local/src/
        # 设定容器的工作目录
        WORKERDIR /usr/local/
        
        RUN cd /usr/local/src && \
            tar -xf ${WEB_SERVER_PACKAGE} && \
            mv nginx-1.15.2 webserver
        
        # 绑定本地文件,使用docker托管的目录挂载到镜像下的/data/mysql/目录中
        VOLUME /data/mysql/
        
        # 运行容器时使用-P会暴露的端口
        EXPOSE 80/tcp
        
    10. CMD 命令

      • 类似于RUN指令,CMD指令也可用于运行任何命令或应用程序,不过,二者的运行时间点不同
        • RUN指定运行与映像文件构建的过程中,而CMD指令运行与基于Dockerfile构建出的新映像文件启动一个容器时
        • CMD指令的首要目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器也将终止;不过,CMD指定的命令其可以被docker run的命令行选项所覆盖
        • 在Dockerfile中可以存在多个CMD指令,但仅最后一个会生效
      • 语法:
        • CMD <command>
          • 会自动运行成shell的子进程,进程id不是1,然后在做进程切换转换为id为1的进程
        • CMD ["<executable>","<param1>","<param2>"]
          • 会直接启动一个id为1的进程,即超管进程。并不会是shell的子进程,即不支持shell环境变量。除非启动shell执行
        • CMD ["<param1>","<param2>"]
      • 前两种语法 格式的意义同RUN
      • 第三种则用于为ENTRYPOINT指令提供默认参数
    11. ENTRYPOINT 命令

      • 类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序

      • 与CMD不同的是,由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给ENTRYPOINT指定指定的程序

        • 不过,docker run命令的--entrypoint选项的参数可覆盖ENTRYPOINT指令指定的程序
      • 语法ENTRYPOINT <command>ENTRYPOINT ["<executable>","<param1>","<param2>"]

      • docker run命令传入的命令参数会覆盖CMD指令的内容并且附加到ENTRYPOINT命令最后做为其参数使用

      • Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一条会生效。

        • 示例Dockerifle文件如下:
        FROM busybox
        LABEL maintainer="xdd  <xdd@xdd.com>" app="httpd"
        
        ENV WEB_DOC_ROOT="/data/web/html/"
        
        RUN mkdir -p $WEB_DOC_ROOT && \
            echo "<h1>HEllo word xdd</h1>" > ${WEB_DOC_ROOT}/index.html
        
        #CMD ["/bin/httpd","-f","-h","${WEB_DOC_ROOT}"]
        # CMD  /bin/httpd -f -h ${WEB_DOC_ROOT}
        # CMD ["/bin/sh","-c","/bin/httpd","-f","-h /data/web/html/"]
        CMD ["/bin/httpd","-f","-h ${WEB_DOC_ROOT}"]
        ENTRYPOINT ["/bin/sh","-c"]
        #ENTRYPOINT /bin/sh -c
        
        • 注意:启用时,ENTYPOINT会接受最后一个CMD命令中定义的参数,如果启动时指定命令,会默认替换掉文件中的CMD命令。例如:docker run --name tinyweb2 -it -P tinyhttpd:v0.2-7 ls /data
      • 综合示例:配置

        1. Dockerfile文件内容

          FROM nginx:1.14-alpine
          LABEL maintainer="xdd <xdd@xdd.com>"
          
          ENV NGX_DOC_ROOT="/data/web/html/"
          ENV HOSTNAME="gdy"
          ENV PORT="8080"
          
          ADD index.html ${NGX_DOC_ROOT}
          ADD entrypoint.sh /bin/
          
          EXPOSE 8080
          
          CMD ["/usr/sbin/nginx","-g","daemon off;"]
          
          ENTRYPOINT ["/bin/entrypoint.sh"]
          
        2. entrypoint.sh文件内容

          #!/bin/sh
          #
          
          cat > /etc/nginx/conf.d/www.conf << EOF
          server {
              server_name ${HOSTNAME};
              listen ${IP:-0.0.0.0}:${PORT:-80};
              root ${NGX_DOC_ROOT:-/usr/share/nginx/html};
          }
          EOF
          
          # 运行传递给脚本的所有参数
          exec "$@"
          
        3. index.html文件内容

          <h1> nginx web </h1>
          
        4. 相关命令

          • 制作镜像:docker build -t myweb:v0.3-8 ./
          • 启动镜像:docker run --name myweb1 --rm -P myweb:v0.3-8
          • 查看镜像暴露出的端口:docker port myweb1
    12. USER 命令

      • 用于指定运行image时的或运行Dockerfile中任何RUN、CMD或者ENTRYPOINT指令指定的程序时的用户名或UID
      • 默认情况下,container的运行身份为root用户
      • 语法:USER <UID>|<USERName>
        • 需要注意的是、<UID>可以为任意数字,但实践中其必须为/etc/passwd中某用户的有效UID,否则,docker run命令将运行失败
    13. HEALTHCHECK 命令

      • 监控容器是否还在运行。
      • 这可以检测一些情况,比如web服务器陷入无限循环,无法处理新的连接,服务器进程仍然运行
      • 语法:
        1. HEALTHCHECK [options] CMD command #通过运行一个命令检查容器健康。容器内
        2. HEALTHCHECK NONE #禁用从基本映像继承的任何healthcheck
      • 详细语法:
        • 在CMD命令之前的选项有:

          1. --interval=DURATION#每隔多长时间执行一次,默认30s。
          2. --timeout=DURATION #响应超时时间,默认30s
          3. --start-period=DURATION#等待主进程启动时间(第一次执行时),默认0s
          4. --retries=N#每次检查多少次,默认3次
        • 检查请求发出时的状态:

          1. 0:success#该容器是健康的,可以使用
          2. 1:unhealthy#容器不能正常工作
          3. 2:reserved#未使用,保留
        • 例子:HEATHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1

          • 修改之前一个命令例子如下:
          FROM nginx:1.14-alpine
          LABEL maintainer="xdd <xdd@xdd.com>"
          
          ENV NGX_DOC_ROOT="/data/web/html/"
          ENV HOSTNAME="gdy"
          ENV PORT="8080"
          
          ADD index.html ${NGX_DOC_ROOT}
          ADD entrypoint.sh /bin/
          
          EXPOSE 8080/tcp 80/tcp
          
          #3秒后开启动检查,2秒后执行一条命令,即启动后移动等待5秒
          HEALTHCHECK --start-period=3s --interval=2s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/
          
          CMD ["/usr/sbin/nginx","-g","daemon off;"]
          
          ENTRYPOINT ["/bin/entrypoint.sh"]
          
    14. SHELL 命令

      • SHELL指令允许覆盖命令的SHELL形式所使用的默认SHELL。
      • 当前默认shell在linux上是["/bin/sh","-c"]在windows上是["cmd","/S","/C"]
      • SHELL指令必须在Dockerfile中以JSON格式编写。
        • 语法:SHELL["可执行文件","参数"]
      • SHELL指令可以出现多次。
      • 每个SHELL指令覆盖所有以前的SHELL指令,并影响所有后续指令。
    15. STOPSIGNAL 命令

      • 发送给系统的停止信号指令
      • 例如,这个信号可以是一个有效的无符号数字,它匹配内核syscall表中的某个位置。例如:9或者格式为SIGNAME的信号名,为SIGKILL
      • 语法:STOPSIGNAL signal
    16. ARG 命令

      • ARG可以指定变量,可以在用户使用dockerfile文件制作镜像时使用--build-arg <varname>=<vglue>为将要生成的镜像重新指定变量值。有点类似于EVN命令。
      • 如果用户指定了Dockerfile中没有定义的生成参数,则生成一个警告
      • 语法:ARG <name>=[=<default value>]
      • Dockerfile可以插入一个或多个ARG指令。
      • 一个ARG指令可以选择包含一个默认值:
        • ARG version=1.14
        • ARG user=xdd
    17. ONBUILD 命令

      • 用于在Dockerfile中定义一个触发器
      • Dockerfile用于build映像文件,此映像文件亦可作为"base image父镜像文件"被另一个Dockerfile用作FROM指令的参数,并以之构建新的映像文件
      • 在后面的这个Dockerfile中的FROM指令在build过程中被执行时,将会“触发”创建其"base image父镜像"的Dockerfile文件中的ONBUILD指令定义的触发器
      • 语法:ONBUILD <INSTRUCTION>
      • 尽管任何指令都可以注册成为触发器指令,但ONBUILD不能自我嵌套,且不会触发FROM和MAINTAINER指令。
      • 使用包含ONBUILD指令的Dockerfile构建的镜像应该使用特殊的标签,例如:ruby:2.0-onbuild
      • 在ONBUILD指令中使用ADD或COPY命令应该格外小心,因为新构建过程的上下文在缺少指定的源文件时会失败。
    展开全文
  • Docker(五)--Dockerfile制作镜像

    万次阅读 2018-12-21 15:05:00
    docker镜像制作,可以基于容器创建镜像,也可基于dockerfile构建镜像。但需要注意的是,我们并不是真正&quot;创建&quot;新镜像,而是基于一个已有的基础镜像,如centos或ubuntu等,构建新镜像而已。 1....

    docker 镜像的制作,可以基于容器创建镜像,也可基于 dockerfile 构建镜像。但需要注意的是,我们并不是真正"创建"新镜像,而是基于一个已有的基础镜像,如 centos 或 ubuntu 等,构建新镜像而已。

    1.基于容器制作

    联合文件系统(UnionFS)挂载提供了容器的文件系统,任何对容器内文件系统的改动都会被写入到新的文件层中,这个文件层归创建它的容器所有。而我们就对做出改动的容器进行镜像构建。我这儿使用 busybox 作为 base image,我们可以认为 busybox 为一个精简的 linux 系统。在 busybox 上运行一个 httpd 程序,并将其制作为镜像文件。
    1.拉取镜像

    ~]# docker image pull busybox:latest		#默认会从dockerhub上拉取
    ...
    ~]# docker image ls
    	REPOSITORY    TAG       IMAGE ID        CREATED             SIZE
    	busybox      latest    59788edf1f3e    2 months ago        1.15MB
    

    2.运行镜像

    ~]# docker container run --name bbox -it busybox:latest		#启动镜像,并交互式登录
    

    3.运行httpd
    busybox 自带有 httpd 程序

    / # httpd -h
    Usage: httpd [-ifv[v]] [-c CONFFILE] [-p [IP:]PORT] [-u USER[:GRP]] [-r REALM] [-h HOME]
    	   httpd -d/-e/-m STRING
            -i              Inetd mode
            -f              Don't daemonize
            -v[v]           Verbose
            -p [IP:]PORT    Bind to IP:PORT (default *:80)
            -u USER[:GRP]   Set uid/gid after binding to port
            -r REALM        Authentication Realm for Basic Authentication
            -h HOME         Home directory (default .)
            -c FILE         Configuration file (default {/etc,HOME}/httpd.conf)
            -m STRING       MD5 crypt STRING
            -e STRING       HTML encode STRING
            -d STRING       URL decode STRING
    
    / # mkdir /data/html		#家目录
    / # echo "httpd server" >> /data/html/index.html		#测试页
    / # httpd -h /data/html		#指定家目录,启动服务
    

    4.镜像制作
    新打开一个控制台

    ~]# docker container commit --help
    	Usage:  docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
    	Options:
    	  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
    	  -c, --change list      Apply Dockerfile instruction to the created image
    	  -m, --message string   Commit message
    	  -p, --pause            Pause container during commit (default true)
    
    ~]# docker container commit -p bbox test/mybbox:v0.1		#-p制作镜像时,容器暂停运行,防止在制作镜像时有数据写入
    ~]# docker image ls
    	test/mybbox      v0.1     e07687dd8546    1 minutes ago     1.15MB 
    

    注:若是想对版本号或者镜像名称进行修改,可使用docker tag命令,但是修改后不会覆盖原镜像,会新生成一个镜像,类似于硬链接。

    5.更改启动命令
    当我们运行mybbox时,会发现虽然文件都有,但是并没有运行httpd服务,这是因为每个镜像都有一个运行时启动的初始命令,我们若想镜像启动时就运行某个命令,需要我们在制作镜像时就指定。

    ~]# docker image inspect -f {{.Config.Cmd}} test/mybbox:v0.1
    	[sh]						#可见 mybbox 镜像还是使用 busybox 的初始命令。
    
    ~]# docker container commit -a "test <test@docker.com>" -c 'CMD ["/bin/httpd,"-h /data/html"]' -p bbox test/mybbox:v0.2
    ~]# docker image inspect -f {{.Config.Cmd}} test/mybbox:v0.2         
    	[/bin/sh -c ["/bin/httpd,"-h /data/html"]]
    

    6.推送至仓库
    镜像制作完成,就可以推送至仓库,默认是推送到dockerhub,我们可以自己在 dockerhub 创建账号并创建仓库,然后本地 docker login 登录,就可以将本地镜像 push 上去。需要注意的是在 dockerhub 上创建仓库时,命名空间要为test,仓库名为 mybbox(对于本次实验),必须要严格一致。由于我这儿登不了 dockerhub,就不在演示了。

    7.保存镜像至本地
    当镜像制作好,可保存到本地进行分发,也就不需要上传到仓库了。

    ~]# docker image save -o /tmp/mybbox.gz test/mybbox:v0.2	#-o指定保存目录,也可多个镜像一起保存
    ~]# docker image load -i /tmp/mybbox.gz 		#使用时导入即可
    

    2. 基于Dockerfile制作镜像

    其实我们发现,基于容器构建镜像,在对配置变动频繁或需要重复构建镜像时,效率是非常低下的。所以我们就需要使用Dockerfile来实现快速构建镜像,Dockerfile是一个文件,它由构建镜像的指令组成,指令由Docker镜像构建者自上而下排列,能够被用来修改镜像的任何信息。

    注意事项:

    1. Dockerfile文件需放置在一个目录中,这个目录中有构建镜像的所有文件,可以创建子目录。
    2. 在Dockerfile文件中,"#“号开头表示注释,每行为"INSTRUCTION arguments”,习惯大写表示关键字(但并不区分大小写),后面小写表示值。
    3. 每个Dockerfile的第一行(注释行除外),必须使用"FROM"关键字。
    4. 当我们在docker build构建镜像时,会将我们的指定的上下文目录(即Dockerfile所在目录)打包传递给docker 引擎,而这个上下文中并非所有文件都会在Dockerfile中使用,这样就会使传送给docker引擎的目录过大,影响构建速度,所以可以在此目录中,定义.dockerignore文件,将不使用的文件文件名写入到该文件即可,且支持通配符。
    5. 最小化镜像的层数,Dockerfile中每一行命令就是一层,层数过多影响构建效率。
    6. Dockerfile文件中命令从上往下逐行执行。

    2.1 Dockerfile命令

    1.FROM: FROM 指令是最重的一个且必须为 Dockerfile 文件开篇的第一个非注释行,用于为映像文件构建过程指定基准镜像,后续的指令运行于此基准镜像所提供的运行环境。实践中,基准镜像可以是任何可用镜像文件,默认情况下,docker build 会在 docker 主机上查找指定的镜像文件,在其不存在时,则会从Docker Hub Registry 上拉取所需的镜像文件如果找不到指定的镜像文件,docker build 会返回一个错误信息。

    Syntax: 
    	FROM <image>[:<tag>] 
    	FROM <image>@<digest>
    	
    	<image> :指定作为base image的名称,默认从dockerhub拉取镜像,若使用其他仓库可在镜像前指定;
    	<tag>	:base image的标签,为可选项,省略时默认为latest;
    
    eg:
    	FROM busybox:latest
    

    2.MAINTAINER: 用于让镜像制作者提供本人的详细信息,Dockerfile 并不限制 MAINTAINER 指令可在出现的位置,但推荐将其放置于 FROM 指令之后,已经被 LABEL 取代,但仍可使用。

    Syntax:
    	MAINTAINER <authtor's detail>
    	
    	<author's detail>:可是任何文本信息,但约定俗成地使用作者名称及邮件地址
    

    3.LABEL: 效果同上,指定多个元数据

    Syntax:
    	 LABEL <key>=<value> [<key>=<value> ...]
    
    eg:
    	LABEL name=test mail=test@163.com
    

    4.COPY: 用于从 Docker 主机复制文件至创建的新映像文件

    Syntax:
    	COPY <src> ... <dest> 
    	COPY ["<src>",... "<dest>"] 
    
    	<src>  :要复制的源文件或目录,支持使用通配符
    	<dest> :目标路径,即正在创建的image的文件系统路径;
    		    建议为<dest>使用绝对路径否则,COPY指定则以WORKDIR为其起始路径;
    
    文件复制准则:
    	1.<src>必须是build上下文中的路径,不能是其父目录中的文件
    	2.如果<src>是目录,则其内部文件或子目录会被递归复制,但<src>目录自身不会被复制
    	3.如果指定了多个<src>,或在<src>中使用了通配符,则<dest>必须是一个目录,且必须以/结尾
    	4.如果<dest>事先不存在,它将会被自动创建,这包括其父目录路径
    
    eg:
    	COPY index.html /data/web/		#最后不加斜线会改名为web
    	COPY src/ /data/web				#src/* 被拷贝到/data/web目录下
    	COPY test1 test2 /data/web/		#多文件最后必须加/
    

    5.ADD: ADD指令类似于 COPY 指令,ADD 支持使用 TAR 文件和 URL 路径

    Syntax:
    	ADD <src> ... <dest> 
    	ADD ["<src>",... "<dest>"] 
    
    操作准则:同COPY指令
    	1.如果<src>为URL且<dest>不以/结尾,则<src>指定的文件将被下载并直接被创建为<dest>;
    	  如果<dest>以/结尾,则文件名URL指定的文件将被直接下载并保存为<dest>/<filename>。
    	2.如果<src>是一个本地系统上的压缩格式的tar文件,它将被展开为一个目录,其行为类似于“tar -x”命令;
    	  然而,通过URL获取到的tar文件将不会自动展开;
    	3.如果<src>有多个,或其间接或直接使用了通配符,则<dest>必须是一个以/结尾的目录路径;
    	  如果<dest>不以/结尾,则其被视作一个普通文件,<src>的内容将被直接写入到<dest>;
    
    eg:
    	ADD http://nginx.org/download/nginx-1.14.2.tar.gz  /data/		#nginx-1.14.2.tar.gz会放在/data/目录下,不会解压
    	ADD nginx-1.14.2.tar.gz	/date		#nginx-1.14.2目录会放在/data/目录下,会解压
    

    6.WORKDIR: 用于为 Dockerfile 中所有的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指定设定工作目录,其生效范围为本次定义workdir到下一次定义之间,且还会影响到进入容器时的目录

    Syntax:
    	WORKDIR <dirpath>
    
    注:在Dockerfile文件中,WORKDIR指令可出现多次,其路径也可以为相对路径,不过,其是相对此前一个WORKDIR指令指定的路径另外,
    WORKDIR也可调用由ENV指定定义的变量
    
    eg:
    	WORKDIR /var/log
    	WORKDIR $STATEPATH
    

    7.VOLUME: 用于在 image 中创建一个挂载点目录,以挂载 Docker host 上的卷或其它容器上的卷,但需要注意的是此选项只能创建容器管理的卷,即在宿主机上随机挂载一个目录,而不能指定目录挂载

    Syntax:
    	VOLUME <mountpoint> 
    	VOLUME ["<mountpoint>"] 
    
    注:如果挂载点目录路径下此前有文件存在,docker run 命令会在卷挂载完成后将此前的所有文件复制到新挂载的卷中。
    
    eg:
    	VOLUME /data		#不能指定宿主机目录,随机挂载在 /var/lib/docker/volumes/...
    

    8.EXPOSE: 用于为容器打开指定要监听的端口以实现与外部通信,但不能指定宿主机的端口绑定,并且即使在 Dockerfile 中定义了 EXPOSE ,也必须要在启动容器时手动加上 -P 选项才会生效。

    Syntax:
    	EXPOSE <port>[/<protocol>] [<port>[/<protocol>] ...]
    	<protocol>用于指定传输层协议,可为tcp或udp二者之一,默认为TCP协议
    
    eg:
    	EXPOSE 11211/udp 11211/tcp	#EXPOSE指令可一次指定多个端口
    

    9.ENV: 用于为镜像定义所需的环境变量,并可被 Dockerfile 文件中位于其后的其它指令(如ENV、ADD、COPY等)所调用,调用格式为 $variable_name 或 ${variable_name}。

    Syntax:
    	ENV <key> <value> 或
    	ENV <key>=<value> ...
    
    注:
    	1.第一种格式中,<key>之后的所有内容均会被视作其<value>的组成部分,因此,一次只能设置一个变量;
    	2.第二种格式可用一次设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果<value>中包含空格,可以以反斜线(\)进行转义,
    	  也可通过对<value>加引号进行标识;另外,反斜线也可用于续行;
    	3.定义多个变量时,建议使用第二种方式,以便在同一层中完成所有功能
    	4.docker run时可以使用 -e 参数指定环境变量,相同环境变量会覆盖Dockerfile中的值
    
    eg:
    	ENV name=zhang \
    		age=15	\
    		sex=N
    

    10.ARG: 此参数和 ENV 有些相似,都是指定变量值,但是在使用 ENV 时,若要动态的传递变量值,只能在 docker run 时才能传递,而 ARG 可以在 docker build 过程中,通过–build-arg 来进行动态传递参数值。除此之外,ENV 的值会保留在镜像的环境变量中,但 ARG 的值不会保存。所以若想在 build 镜像的过程中修改变量的值,推荐使用 ARG

    用法同上,下图说明了构建过程,RUN 与 CMD 指令见下面介绍

    在这里插入图片描述

    11.RUN: 用于指定 docker build 过程中运行的命令,其可以是基础镜像中存在的任何命令,见下图所示。

    Syntax:
    	RUN <command> 
    	RUN ["<executable>", "<param1>", "<param2>"]
    
    注:
    	1.第一种格式中,<command>通常是一个shell命令,且以“/bin/sh -c”来运行它,这意味着此进程在容器中的PID不为1,不能接收Unix信号,
    	  因此,当使用docker stop <container>命令停止容器时,此进程接收不到SIGTERM信号;即在运行该命令前会先起一个sh进程,然后运行此命令。
    	2.第二种语法格式中的参数是一个JSON格式的数组,其中<executable>为要运行的命令,后面的<paramN>为传递给命令的选项或参数;
    	  然而,此种格式指定的命令不会以“/bin/sh -c”来发起,因此常见的shell操作如变量替换以及通配符(?,*等)替换将不会运行;
    	  不过,如果要运行的命令依赖于此shell特性的话,可以将其替换为类似的格式:RUN ["/bin/bash", "-c", "<executable>", "<param1>"]
    
    eg:
    	RUN ls /data		#将会在构建的时候执行 "ls /data"命令
    	RUN ["/bin/sh","-c","mkdir -p /data/hello"]	
    

    12.CMD: 类似于RUN指令,CMD 指令也可用于运行任何命令或应用程序,不过,二者的运行时间点不同,RUN指令运行于映像文件构建过程中(docker build),而CMD指令运行于基于 Dockerfile 构建出的新映像文件启动一个容器时(docker run),CMD 指令的首要目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器也将终止;不过,CMD 指定的命令其可以被 docker run 的命令行选项所覆盖,在 Dockerfile 中可以存在多个 CMD 指令,但仅最后一个会生效。

    Syntax:
    	CMD <command> 
    	CMD ["<executable>","<param1>","<param2>"] 
    	CMD ["<param1>","<param2>"]
    
    注:前两种语法格式的意义同RUN,第一种用法虽然会先起sh进程,但是执行完command后,sh进程会退出,并由command的进程替代为1号进程,第三种则用于为ENTRYPOINT指令提供默认参数。
    
    eg:
    	CMD /bin/httpd -f -h $DOC_ROOT	#如下可见在运行命令之前会预先运sh命令
    	~]# docker image inspect -f {{.Config.Cmd}} test
    		[/bin/sh -c /bin/httpd -f -h $DOC_ROOT]
    
    ~]# docker container run --name NAME -it --rm IMAGE_NAME /bin/bash		#CMD 指定的命令可在 docker run 时指定命令修改
    

    13.ENTRYPOINT: 类似 CMD 指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序,与 CMD 不同的是,由 ENTRYPOINT 启动的程序不会被 docker run 命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给 ENTRYPOINT 指定指定的程序。不过,docker run 命令的 --entrypoint 选项的参数可覆盖 ENTRYPOINT 指令指定的程序。

    Syntax:
    	ENTRYPOINT <command>
    	ENTRYPOINT ["<executable>", "<param1>", "<param2>"]
    
    注:
    	1.docker run命令传入的命令参数会覆盖CMD指令的内容并且附加到ENTRYPOINT命令最后做为其参数使用。
    	2.Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效。
    
    eg:
    	CMD ["/bin/ls","/etc"]
    	ENTRYPOINT ["/bin/bash","-c"]		#会先启动sh进程,CMD指定的命令会被当做参数传给 /bin/bash -c
    	
    ~]# docker container run --name NAME -it --rm IMAGE_NAME /bin/bash		#使用entrypoint时,docker run时动态指定的命令将会被当做参数传递给entrypoint定义的命
    ~]# docker container run --name NAME -it --rm --entrypoint "/bin/bash" IMAGE_NAME	#entrypoint指定的命令可以在docker run时添加的 --entrypoint 后的命令所覆盖 
    

    14.USER: 用于指定运行image时的或运行 Dockerfile 中任何 RUN、CMD 或 ENTRYPOINT 指令指定的程序时的用户名或 UID,默认情况下,container 的运行身份为root用户。

    Syntax:
    	USER <UID>|<UserName>
    
    	注:需要注意的是,<UID>可以为任意数字,但实践中其必须为/etc/passwd中某用户的有效UID,否则,docker run命令将运行失败。
    

    15.HEALTHCHECK: 对容器进行健康状态检测。

    Syntax:
    	HEALTHCHECK [OPTIONS] CMD command
    
    OPTIONS:
    	--interval:多长时间检测一次,默认30s
    	--timeout:超时时长,默认30s
    	--start-period:容器启动后多久开始检测,默认30s
    	--retries:重试次数:默认3次
    
    响应码:
    	0:success
    	1:unhealthy
    	2:reserved
    	
    eg:
    	HEALTHECK --interval=5m --timeout=30s CMD curl -f http://localhost/ || exit 1	
    

    16.SHELL: 在使用 RUN、CMD 等命令时,有些格式在运行命令前会先启动一个sh进程,默认使用的是 /bin/sh,但在有些时候我们需要改变默认的 SHELL。

    Syntax:
    	SHELL ["executable","parameters"]
    

    17.STOPSIGAL: 默认的 stop-signal 是 SIGTERM,在 docker stop 的时候会给容器内 PID 为1的进程发送这个 signal,通过 --stop-signal 可以设置自己需要的 signal,主要的目的是为了让容器内的应用程序在接收到 signal 之后可以先做一些事情,实现容器的平滑退出,如果不做任何处理,容器将在一段时间之后强制退出,会造成业务的强制中断,这个时间默认是10s。这个命令很少用到。

    18.ONBUILD: 用于在 Dockerfile 中定义一个触发器,Dockerfile 用于 build 映像文件,此映像文件亦可作为 base imag 被
    另一个 Dockerfile 用作 FROM 指令的参数,并以之构建新的映像文件,在后面的这个 Dockerfile 中的 FROM 指令在 build 过程中被执行时,将会“触发”创建其 base image 的 Dockerfile 文件中的 ONBUILD 指令定义的触发器。简单来说,就是别人基于你的镜像重新制作镜像时才会触发此命令。

    Syntax:
    	ONBUILD <INSTRUCTION>
    注:
    	1.尽管任何指令都可注册成为触发器指令,但ONBUILD不能自我嵌套,且不会触发FROM和MAINTAINER指令
    	2.使用包含ONBUILD指令的Dockerfile构建的镜像应该使用特殊的标签,例如ruby:2.0-onbuild
    	3.在ONBUILD指令中使用ADD或COPY指令应该格外小心,因为新构建过程的上下文在缺少指定的源文件时会失败
    

    2.2 简单示例

    容器运行nginx:

    ~]# mkdir myng
    ~]# cd myng
    ~]# cat Dockerfile
    	#Dockerfile for my nginx
    	
    	FROM nginx:1.14-alpine
    	
    	LABEL maintainer="chuan <chuan@test.com>"
    	
    	ENV DOC_ROOT="/data/web/html/"
    	
    	#ARG参数不会写到容器的环境变量中,所以在此环境下,PORT不会传递给配置中的变量,此处应使用ENV
    	#ARG PORT=80
    	ENV PORT=80
    	
    	COPY entrypoint.sh /bin/
    	ADD index.html $DOC_ROOT
    	
    	EXPOSE ${PORT}/tcp
    	
    	ENTRYPOINT ["/bin/entrypoint.sh"]
    	CMD ["/usr/sbin/nginx","-g","daemon off;"]
    	
    	HEALTHCHECK --interval=10s --start-period=10s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/index.html
    
    ~]# cat index.html
    	<h1>hello world</h1>
    
    ~]# cat entrypoint.sh 			#exec命令表示用将要执行的进程代替当前进程,否则此程序将作为sh的子进程运行
    	#!/bin/sh
    	#
    	cat > /etc/nginx/conf.d/www.conf << EOF
    	server {
    	        server_name $HOSTNAME;
    	        listen ${IP:-0.0.0.0}:${PORT:-8080};
    	        root ${DOC_ROOT:-/usr/share/nginx/html};
    	}
    	EOF
    	exec "$@"
    
    ~]# chmod a+x entrypoint.sh
    ~]# docker image build . -t 	test/myweb:v0.1		#PATH 要为Dockerfile文件的父目录
    

    容器运行httpd:

    ~]# mkdir ap
    ~]# cd ap
    ~]# cat Dockerfile 
    	#Dockerfile for my httpd
    	
    	FROM centos:7
    	
    	LABEL maintainer="chuan <chuan@test.com>"
    	
    	ENV doc_root=/var/www/html \
            listen_port=80 \
    	    server_name=localhost
    	
    	RUN yum makecache && \
    	    yum install -y httpd php php-mysql && \
    	    yum clean all 
    	
    	ADD phpinfo.php ${doc_root}
    	ADD entrypoint.sh /bin/
    	
    	EXPOSE 80/tcp
    	
    	VOLUME ${doc_root}
    	
    	CMD ["/usr/sbin/httpd","-DFOREGROUND"]
    	ENTRYPOINT ["/bin/entrypoint.sh"]
    
    ]# cat phpinfo.php 
    	<?php
    	        phpinfo();
    	?>
    
    ~]# cat entrypoint.sh
    	#!/bin/bash
    	
    	LISTEN_PORT=${listen_port:-80}
    	SERVER_NAME=${server_name:-localhost}
    	DOC_ROOT=${doc_root:-/var/www/html}
    	
    	cat > /etc/httpd/conf.d/myweb.conf <<EOF
    	Listen $LISTEN_PORT
    	<VirtualHost *:$LISTEN_PORT>
    	        ServerName "$SERVER_NAME"
    	        DocumentRoot "$DOC_ROOT"
    	        <Directory "$DOC_ROOT">
    	                Options none
    	                AllowOverride none
    	                Require all granted
    	        </Directory>
    	</VirtualHost>
    	EOF
    	
    	exec "$@"
    	
    ~]# chmod a+x entrypoint.sh
    ~]# docker image build . -t 	test/myweb:v0.2
    
    ~]# docker container run --name myweb2 --rm -P test/myweb:v0.2	
    
    展开全文
  • 文章目录一、Dockerfile介绍1.1 Dockerfile的结构1.2 Docker基础镜像二、制作镜像2.1 环境准备2.2 准备jar包2.3 执行命令三、启动容器 一、Dockerfile介绍 Dockerfile文件以书面形式说明了如何构建一个Docker镜像,...

    一、Dockerfile介绍

    Dockerfile文件以书面形式说明了如何构建一个Docker镜像,Docker镜像通常包含如下内容:

    • 首先需要一个基本的Docker镜像,在这个基础Docker镜像上构建自己的Docker镜像。
    • 一组需要安装在Docker镜像中的工具和应用。
    • 一组需要复制到Docker镜像中的文件(比如配置文件)。
    • 可能需要在防火墙中打开的网络(TPC/UDP)端口或其他。

    1.1 Dockerfile的结构

    如下是为名为pai-sn的springboot项目编写的Dockerfile:

    ##FROM命令用于指定Docker基础镜像,如是从java8镜像开始
    FROM java:8
    ##MAINTAINER命令用于说明谁在维护这个Dockerfile文件
    MAINTAINER Double<test@qq.cn>
    ##ENV命令是在Docker镜像中设置环境变量,此环境变量可用于CMD命令在Docker镜像内部启动应用程序
    ENV TZ=Asia/Shanghai
    ##RUN可以在Docker镜像中执行命令行指令,执行时机是Docker镜像构建过程中,
    ##所以RUN命令只会执行一次。RUN命令可用于在Docker镜像中安装应用程序、
    ##提取文件或其他命令行功能,这些操作只需要执行一次,以供Docker镜像后续使用
    RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    RUN mkdir -p /app/project
    ##WORKDIR命令指明了Docker镜像中的工作目录,工作目录将对WORKDIR指令之后的所有命令生效
    WORKDIR /app/project
    ##EXPOSE命令将对外开放Docker容器中的网络端口
    EXPOSE 8080
    ##ADD命令可以复制并提取JAR文件到Docker镜像中
    ADD ./pai-sn.jar ./
    ##ENTRYPOINT命令为从该Docker镜像启动Docker容器提供入口点,入口点是Docker容器启动时执行的应用程序或命令,如下是执行java命令启动jar
    ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "pai-sn.jar"]
    

    1.2 Docker基础镜像

    Docker镜像是由层组成,每一层都会为最终的Docker镜像添加一些内容。每一个层实际上都是一个单独的Docker镜像,所以说,Docker镜像是由一个或多个层镜像组成,我们可以在其上添加自己的层。每一层都可以在不同镜像间共享,以减小镜像实际占用空间的大小。

    当通过Dockerfile文件指定自己的Docker镜像时,通常是从一个Docker基础镜像开始。这是另一个Docker镜像,可以在其上构建自己的Docker镜像。这个Docker基础镜像本身可能也包含多个层,并且是基于另一个基础镜像构建的。

    二、制作镜像

    2.1 环境准备

    • CentOS7服务器一台:192.168.131.136,服务器上安装docker
    • springboot项目的demo一个:pai-sn

    2.2 准备jar包

    打包得到pai-sn.jar
    在这里插入图片描述
    上传到服务器,文件共享或者ftp上传,编写Dockerfile文件,内容上面已展示
    在这里插入图片描述

    2.3 执行命令

    docker build -t会找到当前目录的Dockerfile执行

    ## pai-sn:1.0为镜像名称
    docker build -t pai-sn:snapshot .
    

    得到镜像
    在这里插入图片描述

    三、启动容器

    ## -it 交互启动,-p端口映射 ,--name 容器名称 后面是镜像名称,打开shell
     docker run -it -p 8080:8080 --name pai-sn pai-sn:snapshot /bin/bash
    

    容器已启动
    在这里插入图片描述
    推送镜像到harbor,harbor安装搭建请转到:Docker本地私有镜像仓库Harbor搭建及配置

    docker tag pai-sn:snapshot 192.168.136.1315001/library/pai-sn:alpine
    docker push 192.168.136.131:5001/library/pai-sn:alpine
    

    在这里插入图片描述
    查看harbor
    在这里插入图片描述

    展开全文
  • 其实操作系统没有关系,主要还是Dockerfile的编写和执行,过程来说比较简单。1.编写Dockerfile我的dockerfile如下,主要是用于golang和c++的开发,所以相关...

    其实操作系统没有关系,主要还是Dockerfile的编写和执行,过程来说比较简单。

    1.编写Dockerfile

    我的dockerfile如下,主要是用于golang和c++的开发,所以相关软件安装都是和这方面有关的。 本来打算使用163的源的,后来看了一下官方源速度也还不错,就直接用官方的源了。

    安装的主要软件是mysql,git,nginx,golang,vim


    #Version 0.1

    FROM ubuntu:latest

     

    MAINTAINER helight "helight@qq.com"

     

    #设置root用户为后续命令的执行者

    USER root

     

    # RUN rm -rf /etc/apt/sources.list

    # RUN echo 'deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse' >> /etc/apt/sources.list

    # RUN echo 'deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse' >> /etc/apt/sources.list

    # RUN echo 'deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse' >> /etc/apt/sources.list

    # RUN echo 'deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse' >> /etc/apt/sources.list

    # RUN echo 'deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse' >> /etc/apt/sources.list

     

    #执行操作

    RUN \

    apt-get update && \

    apt-get install -y build-essential && \

    apt-get install -y mariadb-server mariadb-common && \

    apt-get install -y git net-tools iputils-ping curl && \

    apt-get install -y golang-1.10 golang && \

    apt-get install -y nginx && \

    apt-get install -y sqlite3 && \

    apt-get install -y vim lua5.1

    RUN apt-get install -y c++ make autoconf

    #对外暴露端口

    EXPOSE 80 8080 3306

     

    CMD ["/bin/bash"]

    2制作镜像

    在Dockerfile文件所在目录执行以下命令就可以了,

    1

    docker build -t xubuntu:v4 .

    制作完成就可以看到制作好的镜像了。

    1

    2

    3

    4

    PS C:\Users\helightxu> docker images

    REPOSITORY TAG IMAGE ID CREATED SIZE

    xubuntu v4 037aaa8b4678 9 seconds ago 1.3GB

    ubuntu latest ea4c82dcd15a 2 weeks ago 123MB

    展开全文
  • dockerfile制作镜像

    2020-02-16 14:34:43
    1.dockerfile是一个文本的配置文件,它可以快速创建自定义的镜像。 2.文本内容:包含了若干的命令行,并支持#作为注释行。 3.文本格式:基础镜像FROM,维护者MAINTAINER,操作指令ADD,容器启动后指令等共计4部分。 二...
  • dockerfile制作镜像

    2019-05-25 19:43:00
    当需要创建多个tomcat容器,并在内部放置相同的文件时该...dockerfile就是为了制作满足要求的镜像,可以告诉docker我们想制作镜像每一步都是什么 dockerfile的内置命令: from命令:指明了创建的镜像是根据...
  • 利用Dockerfile制作镜像

    2021-03-02 21:13:18
    一、jdk8镜像制作 1、准备文件: 2、编写Dockerfile 二、利用自制jdk镜像部署java应用 1、准备文件 2、编写Dockerfile 一、jdk8镜像制作 1、准备文件: jdk压缩包,自行下载。此处以jdk-8u201-linux-x64.tar...
  • 1.dockerfile是一个文本的配置文件,他可以快速创建自定义的镜像。 2.文本内容:包含了若干的命令行,并支持#作为注释行 3.文本格式:基础镜像FROM,维护者MAINTAINER,操作指令ADD,容器启动后指令等共计四部分。 ...
  • Dockerfile1、Dockerfile简介dockerfile基本结构2、Docker制作jdk镜像0.启动虚拟机,进入centos1.创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件2.编写 Dockerfile 文件3.执行Dockerfile文件,初次...
  • 以下制作nginx镜像过程,分以下几步1.制作dockerfile文件包括nginx.sh的nginx安装脚本2.制作ngx-depoly.yaml文件包括k8s service,deployment,pv,pvc,nfs流程如下: 以下是具体内容 制作dockerfile #mkdir /root/...
  • docker基础命令/dockerfile制作镜像/docker-compose编排容器 什么是docker 我们在理解 docker 之前,我们首先要了解一下虚拟化技术. 百度百科定义: 在计算机中,虚拟化(英语:Virtualization)是一种资源管理...
  • 本篇文章主要介绍了Dockerfile构建官方Tomcat镜像镜像使用详解,具有一定的参考价值,有兴趣的可以了解一下
  • 4-Dockerfile制作镜像

    2020-03-11 14:03:00
    dockerfile 关键字 ...指定基础镜像 指定dockerfile基于那个image构建,建议格式写全 registry/namespace/project:tag 或者 registry/namespace/project:tag as aliasName MAINTAINER 作者信息 用来标明这个doc...
  • Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和...
  • 使用docker build命令从 Dockerfile 构建镜像。 首先介绍下如何从运行中的容器提交为镜像。我依旧使用 busybox 镜像举例,使用以下命令创建一个名为 busybox 的容器并进入 busybox 容器。 $ docker run –rm –name...
  • centos7.6下制作Dockerfile,用Dockerfile生成镜像,并且让生成的镜像自动自行预定义脚本。(无坑版) 本例拿nginx镜像做测试,让脚本自动实时刷新nginx的默认主页/usr/share/nginx/html/index.html内容(显示容器的...
  • 使用Dockerfile制作镜像、创建容器开始吧一、创建文件名为Dockerfile的文件二、进入Dockerfile文件所在的目录 & 创建镜像三、创建容器四、查看容器列表五、启动容器六、进入容器七、使用IP:PORT访问容器End ! ...
  • 主要介绍了docker Dockerfile文件制作自己的镜像的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Dockerfile简单镜像制作命令Dockerfile简介Docker制作jdk镜像1.创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件2.编写 Dockerfile 文件3.执行Dockerfile文件,初次依赖镜像的时候会下载相应镜像4.查看...
  • Docker学习-3: 用dockerfile制作镜像

    千次阅读 2019-06-12 20:24:42
    dockerfile是一个文本的配置文件,它可以快速创建自定义的镜像 文本内容:包含了若干的命令行,并支持#作为注释行 文本格式:基础镜像FROM,维护者MAINTAINER,操作指令ADD,容器启动后指令等共计4部分。 2, ...
  • docker之dockerfile文件制作镜像

    千次阅读 2019-12-01 19:37:47
    目录前言一、由dockerfile生成镜像1、dockerfile的基本结构2、传文件到宿主机中(案例)要了解的传输方式(lrzsz)要了解的传输方式(finalshell)3、编写dockerfile配置文件二、由容器搭建一个镜像后记 前言 我们都知道在...
  • 1)使用s2i工具制作镜像 2)使用dockerbuild制作镜像 3)在原有基础镜像上做修改,dockercommit(网上不推荐) 使用第1)或者第2)种方法,都需要写Dockerfile,个人理解Dockerfile类似于图纸,像盖房子,...
  • 删除none状态退出的镜像 vim abc.txt #!/bin/bash docker ps -a | grep Exited | awk '{print $1}' |xargs docker stop docker ps -a | grep Exited | awk '{print $1}' |xargs docker rm docker images | grep none...
  • 1、编写Dockerfile文件 #基础镜像 py/tornado_test为之前编写好的,包含全部环境、python运行依赖包的镜像文件 FROM py/tornado_test:latest #制作人信息 MAINTAINER lzy "liuzy74521@163.com" #将项目拷贝到指定...
  • dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像, 另外,使用Dockerfile去构建镜像好比使用pom去构建maven项目一样,有异曲同工之妙 dockerfile基本结构 Dockerfile 由一行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,517
精华内容 5,806
关键字:

dockerfile制作镜像