这是 Dockerfile 的快速参考备忘单。包含用户可以在命令行上调用以组装镜像的所有命令。
默认 Dockerfile 位于上下文的根目录中。
docker build -f /path/to/a/Dockerfile .
使用 -f 指向文件系统中任何位置的 Dockerfile。
# 注释说明
*/temp*
*/*/temp*
temp?
| :- | - |
|---|---|
# comment | 忽略 |
*/temp* | 在根的任何直接子目录中 排除名称以 temp 开头的文件和目录 |
*/*/temp* | 从根以下两级的任何子目录中 排除以 temp 开头的文件和目录 |
temp? | 排除根目录中名称为temp 的单字符扩展名的文件和目录 |
如果此文件存在,排除与其中的模式匹配的文件和目录,有利于避免 ADD 或 COPY 将敏感文件添加到镜像中。匹配是使用 Go 的 filepath.Match 规则完成的。
| 命令 | 说明 |
|---|---|
FROM image | 构建的基础镜像 |
MAINTAINER email | (已弃用)维护者的名字 |
COPY [--chown=<user>:<group>] <src>... <dest> | 将上下文中的路径复制到位置 dest 的容器中 |
ADD [--chown=<user>:<group>] <src>... <dest> | 与 COPY 相同,但解压缩存档并接受 http url。 |
RUN <command> | 在容器内运行任意命令。 |
USER <user>[:<group>] | 设置默认用户名。 |
WORKDIR /path/to/workdir | 设置默认工作目录。 |
CMD command param1 param2 | 设置默认命令 |
ENV <key>=<value> ... | 设置环境变量 |
EXPOSE <port> [<port>/<protocol>...] | 运行时侦听指定的网络端口 |
FROM wcjiang/docker-static-website:latest
# 使用 .dockerignore 文件来控制镜像中的内容!
# 复制当前目录内容,到容器中
COPY ./ .
这会产生一个 154KB + 的单层镜像。 如果您需要以不同的方式配置 httpd,您可以覆盖 CMD 行:
FROM wcjiang/docker-static-website:latest
COPY . .
CMD ["/busybox","httpd","-f","-v","-p","3000","-c","httpd.conf"]
缩小镜像过程查看原文,镜像 Dockerfile 源码。
FROM golang:alpine as builder
RUN apk --no-cache add git
WORKDIR /go/src/github.com/go/helloworld/
RUN go get -d -v github.com/go-sql-driver/mysql
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest as prod
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY /go/src/github.com/go/helloworld/app .
CMD ["./app"]
使用多阶段构建能将构建依赖留在 builder 镜像中,只将编译完成后的二进制文件拷贝到运行环境中,大大减少镜像体积。