0%

Docker的dockerfile编写

使用Dockerfile创建镜像

  • Dockerfile分为四部分
    • 基础镜像信息
    • 维护者信息
    • 镜像操作指令
    • 容器启动时执行指令

detail

指令 说明
FROM 指定基础镜像
MAINTAINER 维护者信息
RUN 运行命令
CMD 启动容器时默认执行命令,最多只能执行一个命令
LABEL 元数据标签信息
EXPOSE 监听端口
ENV 环境变量
ADD 复制<src>到容器<dest>,如果是tar自动解压,src可以是URL
COPY 复制本地<src>到容器<dest>
ENTRYPOINT 指定镜像默认入口,最多只有一个,可以被docker run --entrypoint覆盖掉
VOLUME 创建数据卷挂载点
USER 指定运行容器时的USER或UID
WORKDIR RUNCMDENTRYPOINT指令配置工作目录
ARG 指定一些镜像内使用的参数
ONBUILD 当创建的镜像为其他镜像的基础镜像时执行的操作命令
STOPSIGNAL 指定创建镜像启动的容器接收退出的信号值
HEALTHCHECK 配置启动容器如何进行健康检查
  • 使用.dockerignore文件可以让Docker忽略匹配路径下的目录和文件
    1
    2
    3
    4
    5
    # comment
    */temp*
    */*/temp*
    tmp?
    ~*

desc

指令 格式
FROM <image>:<tag> || <image>@<digest>
MAINTAINER <name>
RUN shell:<command> || exec:["executable", "param1", "param2"]
CMD ["executable", "param1", "param2"] || command param1 param2 || [“param1”, “param2”]
LABEL <key>=<value>[<key>=<value>...]
EXPOSE <port>[<port>...]
ENV <key> <value> || <key>=<value>[<key>=<value>...]
ADD <src> <dest>
COPY <src> <dest>
ENTRYPOINT shell:command param1 param2 || exec: ["executable", "param1", "param2"]
VOLUME ["/data"]
USER daemon
WORKDIR /path/to/workdir,如果是相对路径,路径是基于前个WORKDIR

exampe

1
2
3
4
5
6
7
8
FROM debian:jessie
MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com"
ENV NGINX_VERSION 1.10.1-1-jessie
RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys ....
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
$$ ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]

sys

如果使用alpine镜像

安装软件包需要用apk包管理器替换apt工具

1
$ apk add --no-cache <package>

可以从alpine搜索并确定安装包名称
如果需要指定社区的安装包,则:

1
2
$ echo "http://dl-4.alpinelinux.org/alpine/edge/teseting" >> /etc/apk/repositories
$ apk --update add --no-cache <package>