docker build 命令-建立一个新的image

build 主要用于建立一个新的image,也就是属于你自己的image

Usage: docker build [OPTIONS] PATH | URL |-Build a new image from the source code at PATH


--force-rm=falseAlways remove intermediate containers, even after unsuccessful builds
--no-cache=falseDonotuse cache when building the image
-q,--quiet=falseSuppress the verbose output generated by the containers
--rm=trueRemove intermediate containers after a successful build
-t,--tag=""Repository name (and optionally a tag) to be applied to the resulting image incase of success

使用这个命令来搭配Dockerfile 创建一个image

 PATH or URL  在这2项中的文件被当作资源上下文. 创建image过程中,所有的文件都可能会被标记,比如说执行 ADD 项. 当一个Dockerfile只有 URL STDIN (docker build - < Dockerfile), 那么就没有上下文了.

如果 URL 中指定了一个git repo,那么这个git repo也会被使用。 这个git repo会被当作子目录 (git clone -recursive). A fresh git clone occurs in a temporary directory on your local host, and then this is sent to the Docker daemon as the context. 反正如果使用git你必须处理好git的凭证和假如需要的VPN设置.

 .dockerignore 在 PATH 项的根目录,这提供一种指定忽略的方式. 符合忽略规则的文件或目录将被忽略。

See also:

Dockerfile Reference.

Examples:

$ sudo docker build .Uploading context 10240 bytes

Step1: FROM busybox
Pulling repository busybox
---> e9aa60c60128MB/2.284 MB (100%) endpoint: https://cdn-registry-1.docker.io/v1/Step2: RUN ls -lh /--->Runningin9c9e81692ae9
total
24
drwxr
-xr-x 2 root root 4.0KMar122013 bin
drwxr
-xr-x 5 root root 4.0KOct1900:19 dev
drwxr
-xr-x 2 root root 4.0KOct1900:19 etc
drwxr
-xr-x 2 root root 4.0KNov1523:34 lib
lrwxrwxrwx
1 root root 3Mar122013 lib64 -> lib
dr
-xr-xr-x 116 root root 0Nov1523:34 proc
lrwxrwxrwx
1 root root 3Mar122013 sbin -> bin
dr
-xr-xr-x 13 root root 0Nov1523:34 sys
drwxr
-xr-x 2 root root 4.0KMar122013 tmp
drwxr
-xr-x 2 root root 4.0KNov1523:34 usr
---> b35f4035db3f
Step3: CMD echo Hello world
--->Runningin02071fceb21b---> f52f38b7823e
Successfully built f52f38b7823e
Removing intermediate container 9c9e81692ae9Removing intermediate container 02071fceb21b

这个 PATH 是 .,也就是当前目录, 所以当期目录中的文件都被 tar.然后发送给了docker daemon。 要注意如果docker在远端服务器,那么发送文件将不会执行Dockerfile过滤, 也就是path中的所有巍峨见都可能被传输而不是ADD指定的文件。

 docker 接到发送的文件时会显示 "Sending build context" message.

如果你想保留生成过程中的中间文件就指定 --rm=false. 这个项不会影响到cache

$ docker build .Uploading context 18.829 MB

Uploading context
Step0: FROM busybox
--->769b9341d937Step1: CMD echo Hello world
--->Using cache
--->99cc1ad10469Successfully built 99cc1ad10469
$ echo
".git">.dockerignore
$ docker build
.Uploading context 6.76 MB
Uploading context
Step0: FROM busybox
--->769b9341d937Step1: CMD echo Hello world
--->Using cache
--->99cc1ad10469Successfully built 99cc1ad10469

下面示例.dockerignore 基本上和git 的忽略文件设置一致。

$ sudo docker build -t vieux/apache:2.0.

这个命令和之前的差不多,只不过这个为image取名为vieux/apache 并标记为 2.0

$ sudo docker build -<Dockerfile

docker将stdin输入的指定文件打包进去

$ sudo docker build -< context.tar.gz

支持压缩格式 bzip2, gzip and xz.

$ sudo docker build github.com/creack/docker-firefox

将git repo中的文件指定个打包 使用git:// 

Note: docker build will return a no such file or directory 如果提示文件或目录不存在,那么就需要你仔细核实一下. 确认路径 权限或网络 这些都可能是问题的原因. This is also the reason whyADD ../file will not work.

New layer...
New layer...