美文网首页
Dockerfile 创建 image

Dockerfile 创建 image

作者: Josaber | 来源:发表于2017-10-16 23:30 被阅读0次

    Dockerfile

    Commends begin with #

    FROM

    # 基础镜像,必须为第一条指令
    # Base image to use, this must be set as the first line
    FROM ubuntu:14.04
    

    Maintainer

    # 维护者信息,写入镜像Author域
    # Maintainer: docker_user docker_user@email.com (@docker_user)
    MAINTAINER josaber josaber@example.com
    

    RUN

    # 运行指定命令
    # RUN <command>: RUN echo hello
    # RUN ["executable", "param1", "param2"]: RUN ["/bin/bash", "-c", "echo hello"]
    RUN echo "deb http://archive.ubuntu.com/ubuntu/ raring main universe" >> /etc/apt/sources.list
    RUN apt-get update && apt-get install -y nginx
    RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf
    # every run-command -> image add a layer -> commit
    

    CMD

    # 容器启动时默认命令
    # Only one or last one.
    # CMD ["executable", "param1", "param2"] # exec
    # CMD command param1 param2 # /bin/sh
    # CMD ["param1", "param2"] # ENTRYPOINT default arguments
    CMD /usr/sbin/nginx
    # 如果用户运行`docker run`手动指定命令则会覆盖掉CMD
    

    LABEL

    # 指定元数据标签信息
    # LABEL <key>=<value> <key>=<value> ...
    LABEL version="1.0"
    LABEL description="This is description."
    

    EXPOSE

    # 声明镜像内服务监听的端口
    # EXPOSE <port> [<port> ...]
    EXPOSE 22 80 5000
    

    ENV

    # 指定环境变量,可被后续RUN使用,启动的容器中也会存在
    # ENV <key> <value>
    # ENV <key>=<value>
    ENV PG_VERSION 9.9.1
    # RUN ... $PG_VERSION ...
    

    ADD

    # 复制指定<src>内容到<dest>下
    # <src>: path/url/tar-file(auto-untar)
    # <dest>: absolute-path/<WORKDIR>-path
    # ADD <src> <dest>
    ADD *.c /code/
    

    COPY

    # 复制本地主机文件或目录
    # COPY <src> <dest>
    # <src>: path/file
    # path support RE
    # 推荐使用
    

    ENTRYPOINT

    # 指定镜像默认入口命令,根命令
    # ENTRYPOINT ["executable", "param1", "param2"] # exec
    # ENTRYPOINT command param1 param2 # shell
    # Only one or last one.
    # 会被run命令的--entrypoint覆盖掉
    

    VOLUME

    # 创建挂载点
    # 本地主机或其他容器
    VOLUME ["/data"]
    

    USER

    # 指定运行容器时的用户名或UID,后续的RUN等指令会使用指定的用户身份
    # USER daemon
    

    WORKDIR

    # 配置工作目录
    # WORKDIR /path/to/workdir
    # 可以指定多个,相对路径会基于工作目录
    WORKDIR /a
    WORKDIR b
    WORKDIR c
    RUN pwd # /a/b/c
    

    ARG

    # 指定镜像内使用的参数
    # docker build时以--build-arg <varname>=<value>
    # ARG <name> [=<default value>]
    

    ONBUILD

    # 配置所创建镜像作为基础镜像时,所执行的创建操作命令
    # ONBUILD [INSTRUCTION]
    ...image-a
    ONBUILD ADD . /app/src
    ONBUILD RUN /usr/local/bin/python-build --dir /app/src
    ...
    FROM image-a # automaticly add on-build instruction
    ...
    

    STOPSIGNAL

    # 启动的容器接收退出的信号值
    # STOPSIGNAL signal
    

    HEALTHCHECK

    # 配置所启动容器如何进行健康检查
    # HEALTHCHECK [OPTION] CMD command # 判断返回值是否为0
    # HEALTHCHECK NONE # 禁止健康检查
    # OPTION
    # --interval=DURATION # 30s, 多久检查一次
    # --timeout=DURATION # 30s, 每次检查等待结果的超时
    # --retries=N # 3, 重试次数
    

    SHELL

    # 默认shell类型
    # SHELL ["executable", "parameters"]
    # default: ["/bin/sh", "-c"]
    


    Create Image

    > # Dockerfile
    > `sudo docker build -t josaber/repo:tag path/(.)`创建镜像: 建议`Dockerfile`路径为空
    > `-f`指定路径
    > `-t`标签信息
    >
    > # Container
    > `sudo docker commit <container-id> <image-full-name>`将容器当前状态保存为image
    > # cat ~/.ssh/id_rsa.pub >authorized_keys
    

    Ignore

    > .dockerignore文件
    >
    > 忽略匹配的文件和目录
    

    Tips

    # 精简镜像用途
    # 选择合适的基础镜像
    # 提供足够的注释和维护者信息
    # 正确使用版本号
    # 减少镜像层数
    # 及时删除临时和缓存文件
    # 提高生成速度
    # 调整合理的指令顺序
    # 减少外部源的干扰
    

    Ref

    Docker 技术入门与实战 第2版

    相关文章

      网友评论

          本文标题:Dockerfile 创建 image

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