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...