Dockerfile是docker的配置文件,用户可以通过它快速的构建镜像。

context

docker build可以通过Dockerfile构建镜像,构建的上下文是文件的位置(PATH或URL)。

上下文是可以迭代运行的,因此PATH可以包含子路径,URL 可以包含子模块。

以当前目录构建镜像

$ docker build .
Sending build context to Docker daemon  6.51 MB
...

构建过程是通过Docker daemon运行,而不是CLI,因此构建的第一个过程是将全部的context发送给daemon.

最佳实践:将Dockerfile置于空目录,然后在该目录中添加需要的文件.

警告:不要经/作为构建路径

通过context,Dockerfile中的命令可以引用需要的文件。

同时,为了提高运行效率,可以添加.dockerignore 文件,排除不需要的文件与目录。

Dockerfile

通常,Dockerfile 就取名为Dockerfile ,但是也可以通过-f 指定。

$ docker build -f /path/to/a/Dockerfile .

tag

可以在构建镜像时,指定repository与tag

$ docker build -t shykes/myapp .

如果需要为多个repository标记镜像,可以添加多个-t 参数

$ docker build -t shykes/myapp:1.0.2 -t shykes/myapp:latest .

syntax validation

在Docker daemon运行Dockerfile中命令之前,它会执行检验,返回语法错误

$ docker build -t test/myapp .
Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD

运行

Docker daemon会逐行执行Dockerfile 中的命令,并将每个指令的执行结果提交给新镜像(如果必要)。最后,输出新镜像的ID。

Docker daemon会自动清空发送的context。由于,每个指令都是单独运行的,并可能创建新的镜像。因此,RUN cd /tmp 不会对接下来的命令有影响。

Docker会重复使用中间层镜像,从而加速docker build,这可以从控制台输出看到using cache

$ docker build -t svendowideit/ambassador .
Sending build context to Docker daemon 15.36 kB
Step 1/4 : FROM alpine:3.2
 ---> 31f630c65071
Step 2/4 : MAINTAINER [email protected]
 ---> Using cache
 ---> 2a1c91448f5f
Step 3/4 : RUN apk update &&      apk add socat &&        rm -r /var/cache/
 ---> Using cache
 ---> 21ed6e7fbb73
Step 4/4 : CMD env | grep _TCP= | (sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat -t 100000000 TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/' && echo wait) | sh
 ---> Using cache
 ---> 7ea8aef582cc
Successfully built 7ea8aef582cc

【参考】

1。docker:dockerfile:https://docs.docker.com/engine/reference/builder/\#usage

results matching ""

    No results matching ""