从Docker文件和“上下文”构建Docker映像。 构建的上下文是位于指定PATH
或URL
中的文件。 构建过程可以引用上下文中的任何文件。 例如,您的构建可以使用ADD指令来引用上下文中的文件。
URL
参数可以指三种资源:Git存储库,压缩包上下文和纯文本文件。
用法:
docker build [OPTIONS] PATH | URL | -
1. Git存储库
当URL参数指向Git存储库的位置时,存储库充当构建上下文。 系统使用git clone --depth 1 --recursive
命令递归地克隆资源库及其子模块。 此命令在本地主机上的临时目录中运行。 命令成功后,该目录将作为上下文发送到Docker守护程序。本地克隆使您能够使用本地用户凭据,VPN等访问私有存储库。
例如,运行此命令在分支容器中使用名为docker
的目录:
$ docker build http://github.com/docker/rootfs.git#container:docker
2.压缩包上下文
如果将URL传递是给定的远程tarball
,则URL本身将发送到守护程序:
$ docker build http://server/context.tar.gz
下载操作将在Docker守护程序正在运行的主机上执行,这不一定是发出构建命令的主机。 Docker守护程序将获取context.tar.gz
并将其用作构建上下文。 Tarball上下文必须是符合标准tar UNIX格式的tar存档,并且可以使用’xz
‘,’bzip2
‘,’gzip
‘或’identity
‘(无压缩)格式中的任何一个进行压缩。
3.纯文本文件
不使用指定上下文,可以传递URL中的单个Docker文件或通过STDIN管理文件。 从STDIN管道Dockerfile:
$ docker build - < Dockerfile
例子
1.使用PATH构建
$ docker build .
Uploading context 10240 bytes
Step 1/3 : FROM busybox
Pulling repository busybox
---> e9aa60c60128MB/2.284 MB (100%) endpoint: http://cdn-registry-1.docker.io/v1/
Step 2/3 : RUN ls -lh /
---> Running in 9c9e81692ae9
total 24
drwxr-xr-x 2 root root 4.0K Mar 12 2013 bin
drwxr-xr-x 5 root root 4.0K Oct 19 00:19 dev
drwxr-xr-x 2 root root 4.0K Oct 19 00:19 etc
drwxr-xr-x 2 root root 4.0K Nov 15 23:34 lib
lrwxrwxrwx 1 root root 3 Mar 12 2013 lib64 -> lib
dr-xr-xr-x 116 root root 0 Nov 15 23:34 proc
lrwxrwxrwx 1 root root 3 Mar 12 2013 sbin -> bin
dr-xr-xr-x 13 root root 0 Nov 15 23:34 sys
drwxr-xr-x 2 root root 4.0K Mar 12 2013 tmp
drwxr-xr-x 2 root root 4.0K Nov 15 23:34 usr
---> b35f4035db3f
Step 3/3 : CMD echo Hello world
---> Running in 02071fceb21b
---> f52f38b7823e
Successfully built f52f38b7823e
Removing intermediate container 9c9e81692ae9
Removing intermediate container 02071fceb21b
此示例指定PATH
为.
,因此本地目录中的所有文件都已获取并发送到Docker守护程序。 PATH指定在Docker守护程序上查找构建“上下文”的文件的位置。 守护进程可能在远程计算机上运行,并且在客户端(正在运行docker构建)时不会解析Dockerfile。 这意味着PATH中的所有文件都将被发送,而不仅仅是在Docker文件中列出的文件。
2.使用URL构建
$ docker build github.com/creack/docker-firefox
这将克隆GitHub存储库并使用克隆的存储库作为上下文。 存储库根目录下的Dockerfile用作Dockerfile。 可以使用git://
或git@scheme
指定任意的Git仓库。
$ docker build -f ctx/Dockerfile http://server/ctx.tar.gz
Downloading context: http://server/ctx.tar.gz [===================>] 240 B/240 B
Step 1/3 : FROM busybox
---> 8c2e06607696
Step 2/3 : ADD ctx/container.cfg /
---> e7829950cee3
Removing intermediate container b35224abf821
Step 3/3 : CMD /bin/ls
---> Running in fbc63d321d73
---> 3286931702ad
Removing intermediate container fbc63d321d73
Successfully built 377c409b35e4
3.使用 - 构建
$ docker build - < Dockerfile
这将从没有上下文的STDIN
读取Dockerfile。 由于缺少上下文,任何本地目录的内容都不会发送到Docker守护程序。 因为没有上下文,Dockerfile ADD
只有在引用远程URL时才有效。
$ docker build - < context.tar.gz
这将构建一个从STDIN读取的压缩上下文的映像。支持的格式有:bzip2
,gzip
和xz
。
4.使用.dockerignore文件
$ docker build .
Uploading context 18.829 MB
Uploading context
Step 1/2 : FROM busybox
---> 769b9341d937
Step 2/2 : CMD echo Hello world
---> Using cache
---> 99cc1ad10469
Successfully built 99cc1ad10469
$ echo ".git" > .dockerignore
$ docker build .
Uploading context 6.76 MB
Uploading context
Step 1/2 : FROM busybox
---> 769b9341d937
Step 2/2 : CMD echo Hello world
---> Using cache
---> 99cc1ad10469
Successfully built 99cc1ad10469