当前位置: 首页 » 产品 » 新闻资讯 » 正文

Docker 基础之Dockerfile命令详解

放大字体  缩小字体 发布日期: 2024-09-29 07:25   来源:http://www.baidu.com/  作者:无忧资讯  浏览次数:10
核心提示:  Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像。我们会先介绍 Dockerfile的基本结构

  Dockerfile 是一个文本格式的配置文件,用户可以使用 Dockerfile 快速创建自定义的镜像。我们会先介绍 Dockerfile 的基本结构及其支持的众多指令,并具体讲解通过执行指令来编写定制镜像的 Dockerfile。

  基本结构

  Dockerfile 由一行行命令语句组成,并且支持已 # 开头的注释行。一般而言,Dockerfile 的内容分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。例如:

  # This dockerfile uses the Ubuntu image

  # VERSION 2

  # Author: docker_user

  # Command format: Instruction [arguments / command] …

  # 第一行必须指定基于的容器镜像

  FROM ubuntu

  # 维护者信息

  MAINTAINER docker_user docker_user@email.com

  # 镜像的操作指令

  RUN echo “deb raring main universe” >> /etc/apt/sources.list

  RUN apt-get update && apt-get install -y nginx

  RUN echo “ daemon off;” >> /etc/nginx/nginx.conf

  # 容器启动时执行指令

  CMD /usr/sbin/nginx

  其中,一开始必须指明所基于的镜像名称,接下来一般会说明维护者的信息。后面则是镜像操作指令,例如 RUN 指令,RUN 指令将对镜像执行跟随的命令。每运行一条 RUN 指令,镜像添加新的一层,并提交。最后是 CMD 指令,来指定运行容器时的操作命令。

  下面是两个 dockerhub 上的例子,同学们可以对 Dockerfile 结构有个基本的感知。

  第一个是在 Ubuntu 镜像的基础上安装 inotify-tools、nginx、apache2、openssh-server 等软件,从而创建一个新的 nginx 镜像:

  # nginx

  # VERSION 0.0.1

  FROM ubuntu

  MAINTAINER Victor Vieus

  RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server

  第二个也是基于 ubuntu 镜像,安装 firefox 和 vnc 软件,启动后,用户可以通过 5900 端口通过 vnc 方式使用 firefox:

  # Firefox over VNC

  # VERSION 0.3

  FROM Ubuntu

  # Install vnc, xvfb in order to create a ‘fake' display and firefox

  RUN apt-get update && apt-get install -y x11vnc xvfb firefox

  RUN mkdir /.vnc

  # setup a password

  RUN x11vnc -storepasswd 1234 ~/.vnc/passwd

  # Autostart firefox

  RUN bash -c ‘echo “firefox” >> /.bashrc'

  EXPOSE 5900

  CMD [“x11vnc”, “-forever”, “-usepw”, “-create”]

  指令

  指令的一般格式为 INSTRUCTION arguments,指令包括 FROM、MAINTAINER、RUN 等,下面分别介绍。

  FROM

  格式为 FROM

Docker 基础之Dockerfile命令详解

或 FROM

Docker 基础之Dockerfile命令详解

:。

  Dockerfile 的第一条指令必须为 FROM 指令。并且,如果在同一个 Dockerfile 中创建多个镜像时,可以使用多个 FROM 指令。

  MAINTAINER

  格式为 MAINTAINER ,指定维护者信息。

  注意:MAINTAINER 指令已经被抛弃,建议使用 LABEL 指令。

  LABEL

  格式为:

  LABEL===...

  LABEL 指令为镜像添加标签。一个 LABEL 就是一个键值对。

  下面是一些例子:

  LABEL "com.example.vendor"="ACME Incorporated"

  LABEL com.example.label-with-value="foo"

  LABEL version="1.0"

  LABEL description="This text illustrates hat label-values can span multiple lines."

  我们可以给镜像添加多个 LABEL,需要注意的是,每条 LABEL 指令都会生成一个新的层。所以最好是把添加的多个 LABEL 合并为一条命令:

  LABEL multi.label1="value1" multi.label2="value2" other="value3"

  也可以写成这样:

  LABEL multi.label1="value1" \

  multi.label2="value2" \

  other="value3"

  如果新添加的 LABEL 和已有的 LABEL 同名,则新值会覆盖掉旧值。

  我们可以使用 docker inspect 命令查看镜像的 LABEL 信息。

  RUN

  有两种格式,分别为:

  RUN

  RUN [“executable”, “param1”, “param2”]

  前者将在 shell 终端中运行命令,即 /bin/sh -c,后者则使用 exec 执行。指定使用其他终端可以通过第二种方式实现,例如 RUN [“/bin/bash”, “-c”, “echo hello”]。

  每条 RUN 指令将在当前镜像的基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 \ 来换行。

  CMD

  支持三种格式:

  CMD [“executable”, “param1”, “param2”] 使用 exec 执行,推荐方式。

  CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用。

  CMD [“param1”, “param2”] 提供给 ENTRYPOINT 的默认参数。

 
 
[ 产品搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]

 

 
推荐图文
推荐产品
点击排行
    行业协会  备案信息  可信网站