IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Dockerfile详解

    showerlee发表于 2015-12-31 09:15:47
    love 0

    Docker可以通过获取Dockerfile编写的命令自动Build出一个新的镜像,里面的Docker内建命令会帮助我们在已有的image下创建一个新的定制image.

    这里我们先给大家介绍一些常用Dockerfile编写规范.

    Docker配置传送门: http://www.showerlee.com/archives/1758

    1.FROM 

    FROM <image>:<tag>

    FROM会使用当前本地或者远程Docker仓库的image, 这个要首先写到该脚本的第一行.

    例:

    FROM centos67base/apache:apache_base

    这里代表我们使用本地的centos67base/apache镜像.

    查看本地缓存镜像可以使用

    # docker images

    2.MAINTAINER

    MAINTAINER <name>

    这个会给生成的镜像创建一个作者名

    3.RUN

    RUN <command> (命令行格式, 执行一段shell命令)

    RUN ["executable", "param1", "param2"] (列表格式, "executable"可以更改不同shell格式, 例如/bin/sh或/bin/bash, "param1"代表shell参数)

    这个可以理解为执行shell命令到image, 一般来说用来给镜像安装package, 或者更改系统配置等.

    例:

    RUN /bin/bash -c echo 123
    RUN ["/bin/bash" "-c" "echo 123"]

    4.CMD

    CMD ["executable","param1","param2"] (同RUN)

    CMD ["param1","param2"] (使用系统默认shell)

    CMD command param1 param2 (命令行格式)

    这个CMD基本使用格式与RUN类似, 区别在于如果存在多个CMD行, 则只有最后一行生效, 这个我们常用执行默认的shell命令给该容器.

    5.LABEL

    LABEL <key>=<value> <key>=<value> <key>=<value> ...

    例:

    LABEL "com.example.vendor"="ACME Incorporated"
    LABEL com.example.label-with-value="foo"
    LABEL version="1.0"
    LABEL description="This text illustrates \
    that label-values can span multiple lines."

    这个可以理解为给image传送一个键值对.

    可以使用如下命令查看已Build好的image LABEL

    # docker inspect

    6.EXPOSE

    EXPOSE <port> [<port>...]

    这个用来通知容器在某一具体端口进行监听, 但不会打开该端口, 如需打开要在创建容器容器的时候配合-P参数使用.

    7.ENV

    ENV <key> <value>

    ENV <key>=<value> ...

    例如:

    ENV myName="John Doe" myDog=Rex\ The\ Dog \
           myCat=fluffy

    相当于给镜像添加环境变量.

    8.ADD

    ADD <src>... <dest>

    ADD ["<src>",... "<dest>"] (这种写法会避免路径名含有空格而报错)

    ADD命令会copy本地目录, 文件或远程URL到容器目的路径, <src>, <dest>支持通配符和绝对相对路径.

    例如:

    ADD hom* /mydir/        # adds all files starting with "hom"
    ADD hom?.txt /mydir/    # ? is replaced with any single character, e.g., "home.txt"
    ADD test relativeDir/   # adds "test" to `WORKDIR`/relativeDir/
    ADD test /absoluteDir   # adds "test" to /absoluteDir

    9.COPY

    COPY <src>... <dest>

    COPY ["<src>",... "<dest>"] (这种写法会避免路径名含有空格而报错)

    本身用法和ADD类似, 唯独不能使用远程URL

    10.VOLUME

    VOLUME ["/data"]
    VOLUME会给该image创建一个挂载点.

    11.WORKDIR

    WORKDIR /path/to/workdir

    顾名思义, 指定一个当前的工作目录.


    12.Dockerfile实例

    # Nginx
    #
    # VERSION               0.0.1
    
    FROM      ubuntu
    MAINTAINER Victor Vieux <victor@docker.com>
    
    LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0"
    RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server
    
    
    # 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 (might not be the best way, but it does the trick)
    RUN bash -c 'echo "firefox" >> /.bashrc'
    
    EXPOSE 5900
    CMD    ["x11vnc", "-forever", "-usepw", "-create"]
    

    更多详细配置请参考: http://www.showerlee.com/archives/1758 第10项

    声明: 本文采用 CC BY-NC-SA 3.0 协议进行授权
    转载请注明来源:一路向北的博客
    本文链接地址:http://www.showerlee.com/archives/1837


沪ICP备19023445号-2号
友情链接