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版
网友评论