目录搜索
ComposeAbout versions and upgrading (Compose)ASP.NET Core + SQL Server on Linux (Compose)CLI environment variables (Compose)Command-line completion (Compose)Compose(组成)Compose command-line reference(组合命令行参考)Control startup order (Compose)Django and PostgreSQL (Compose)Docker stacks and distributed application bundles (Compose)docker-compose build(docker-compose构建)docker-compose bundledocker-compose configdocker-compose createdocker-compose downdocker-compose eventsdocker-compose execdocker-compose helpdocker-compose imagesdocker-compose killdocker-compose logsdocker-compose pausedocker-compose portdocker-compose psdocker-compose pulldocker-compose pushdocker-compose restartdocker-compose rmdocker-compose rundocker-compose scaledocker-compose startdocker-compose stopdocker-compose topdocker-compose unpausedocker-compose upEnvironment file (Compose)Environment variables in ComposeExtend services in ComposeFrequently asked questions (Compose)Getting started (Compose)Install ComposeLink environment variables (deprecated) (Compose)Networking in ComposeOverview of Docker ComposeOverview of docker-compose CLIQuickstart: Compose and WordPressRails and PostgreSQL (Compose)Sample apps with ComposeUsing Compose in productionUsing Compose with SwarmEngine.NET Core application (Engine)About images, containers, and storage drivers (Engine)Add nodes to the swarm (Engine)Apply custom metadata (Engine)Apply rolling updates (Engine)apt-cacher-ngBest practices for writing Dockerfiles (Engine)Binaries (Engine)Bind container ports to the host (Engine)Breaking changes (Engine)Build your own bridge (Engine)Configure container DNS (Engine)Configure container DNS in user-defined networks (Engine)CouchDB (Engine)Create a base image (Engine)Create a swarm (Engine)Customize the docker0 bridge (Engine)Debian (Engine)Default bridge networkDelete the service (Engine)Deploy a service (Engine)Deploy services to a swarm (Engine)Deprecated Engine featuresDocker container networking (Engine)Docker overview (Engine)Docker run reference (Engine)Dockerfile reference (Engine)Dockerize an applicationDrain a node (Engine)EngineFAQ (Engine)Fedora (Engine)Get started (Engine)Get started with macvlan network driver (Engine)Get started with multi-host networking (Engine)How nodes work (Engine)How services work (Engine)Image management (Engine)Inspect the service (Engine)Install Docker (Engine)IPv6 with Docker (Engine)Join nodes to a swarm (Engine)Legacy container links (Engine)Lock your swarm (Engine)Manage nodes in a swarm (Engine)Manage sensitive data with Docker secrets (Engine)Manage swarm security with PKI (Engine)Manage swarm service networks (Engine)Migrate to Engine 1.10Optional Linux post-installation steps (Engine)Overview (Engine)PostgreSQL (Engine)Raft consensus in swarm mode (Engine)Riak (Engine)Run Docker Engine in swarm modeScale the service (Engine)SDKs (Engine)Select a storage driver (Engine)Set up for the tutorial (Engine)SSHd (Engine)Storage driver overview (Engine)Store service configuration data (Engine)Swarm administration guide (Engine)Swarm mode key concepts (Engine)Swarm mode overlay network security model (Engine)Swarm mode overview (Engine)Understand container communication (Engine)Use multi-stage builds (Engine)Use swarm mode routing mesh (Engine)Use the AUFS storage driver (Engine)Use the Btrfs storage driver (Engine)Use the Device mapper storage driver (Engine)Use the OverlayFS storage driver (Engine)Use the VFS storage driver (Engine)Use the ZFS storage driver (Engine)Engine: Admin GuideAmazon CloudWatch logs logging driver (Engine)Bind mounts (Engine)Collect Docker metrics with Prometheus (Engine)Configuring and running Docker (Engine)Configuring logging drivers (Engine)Control and configure Docker with systemd (Engine)ETW logging driver (Engine)Fluentd logging driver (Engine)Format command and log output (Engine)Google Cloud logging driver (Engine)Graylog Extended Format (GELF) logging driver (Engine)Journald logging driver (Engine)JSON File logging driver (Engine)Keep containers alive during daemon downtime (Engine)Limit a container's resources (Engine)Link via an ambassador container (Engine)Log tags for logging driver (Engine)Logentries logging driver (Engine)PowerShell DSC usage (Engine)Prune unused Docker objects (Engine)Run multiple services in a container (Engine)Runtime metrics (Engine)Splunk logging driver (Engine)Start containers automatically (Engine)Storage overview (Engine)Syslog logging driver (Engine)tmpfs mountsTroubleshoot volume problems (Engine)Use a logging driver plugin (Engine)Using Ansible (Engine)Using Chef (Engine)Using Puppet (Engine)View a container's logs (Engine)Volumes (Engine)Engine: CLIDaemon CLI reference (dockerd) (Engine)dockerdocker attachdocker builddocker checkpointdocker checkpoint createdocker checkpoint lsdocker checkpoint rmdocker commitdocker configdocker config createdocker config inspectdocker config lsdocker config rmdocker containerdocker container attachdocker container commitdocker container cpdocker container createdocker container diffdocker container execdocker container exportdocker container inspectdocker container killdocker container logsdocker container lsdocker container pausedocker container portdocker container prunedocker container renamedocker container restartdocker container rmdocker container rundocker container startdocker container statsdocker container stopdocker container topdocker container unpausedocker container updatedocker container waitdocker cpdocker createdocker deploydocker diffdocker eventsdocker execdocker exportdocker historydocker imagedocker image builddocker image historydocker image importdocker image inspectdocker image loaddocker image lsdocker image prunedocker image pulldocker image pushdocker image rmdocker image savedocker image tagdocker imagesdocker importdocker infodocker inspectdocker killdocker loaddocker logindocker logoutdocker logsdocker networkdocker network connectdocker network createdocker network disconnectdocker network inspectdocker network lsdocker network prunedocker network rmdocker nodedocker node demotedocker node inspectdocker node lsdocker node promotedocker node psdocker node rmdocker node updatedocker pausedocker plugindocker plugin createdocker plugin disabledocker plugin enabledocker plugin inspectdocker plugin installdocker plugin lsdocker plugin pushdocker plugin rmdocker plugin setdocker plugin upgradedocker portdocker psdocker pulldocker pushdocker renamedocker restartdocker rmdocker rmidocker rundocker savedocker searchdocker secretdocker secret createdocker secret inspectdocker secret lsdocker secret rmdocker servicedocker service createdocker service inspectdocker service logsdocker service lsdocker service psdocker service rmdocker service scaledocker service updatedocker stackdocker stack deploydocker stack lsdocker stack psdocker stack rmdocker stack servicesdocker startdocker statsdocker stopdocker swarmdocker swarm cadocker swarm initdocker swarm joindocker swarm join-tokendocker swarm leavedocker swarm unlockdocker swarm unlock-keydocker swarm updatedocker systemdocker system dfdocker system eventsdocker system infodocker system prunedocker tagdocker topdocker unpausedocker updatedocker versiondocker volumedocker volume createdocker volume inspectdocker volume lsdocker volume prunedocker volume rmdocker waitUse the Docker command line (Engine)Engine: ExtendAccess authorization plugin (Engine)Docker log driver pluginsDocker network driver plugins (Engine)Extending Engine with pluginsManaged plugin system (Engine)Plugin configuration (Engine)Plugins API (Engine)Volume plugins (Engine)Engine: SecurityAppArmor security profiles for Docker (Engine)Automation with content trust (Engine)Content trust in Docker (Engine)Delegations for content trust (Engine)Deploying Notary (Engine)Docker security (Engine)Docker security non-events (Engine)Isolate containers with a user namespace (Engine)Manage keys for content trust (Engine)Play in a content trust sandbox (Engine)Protect the Docker daemon socket (Engine)Seccomp security profiles for Docker (Engine)Secure EngineUse trusted imagesUsing certificates for repository client verification (Engine)Engine: TutorialsEngine tutorialsNetwork containers (Engine)Get StartedPart 1: OrientationPart 2: ContainersPart 3: ServicesPart 4: SwarmsPart 5: StacksPart 6: Deploy your appMachineAmazon Web Services (Machine)Digital Ocean (Machine)docker-machine activedocker-machine configdocker-machine createdocker-machine envdocker-machine helpdocker-machine inspectdocker-machine ipdocker-machine killdocker-machine lsdocker-machine provisiondocker-machine regenerate-certsdocker-machine restartdocker-machine rmdocker-machine scpdocker-machine sshdocker-machine startdocker-machine statusdocker-machine stopdocker-machine upgradedocker-machine urlDriver options and operating system defaults (Machine)Drivers overview (Machine)Exoscale (Machine)Generic (Machine)Get started with a local VM (Machine)Google Compute Engine (Machine)IBM Softlayer (Machine)Install MachineMachineMachine CLI overviewMachine command-line completionMachine concepts and helpMachine overviewMicrosoft Azure (Machine)Microsoft Hyper-V (Machine)Migrate from Boot2Docker to MachineOpenStack (Machine)Oracle VirtualBox (Machine)Provision AWS EC2 instances (Machine)Provision Digital Ocean Droplets (Machine)Provision hosts in the cloud (Machine)Rackspace (Machine)VMware Fusion (Machine)VMware vCloud Air (Machine)VMware vSphere (Machine)NotaryClient configuration (Notary)Common Server and signer configurations (Notary)Getting started with NotaryNotary changelogNotary configuration filesRunning a Notary serviceServer configuration (Notary)Signer configuration (Notary)Understand the service architecture (Notary)Use the Notary client
文字

描述

从Dockerfile生成图像

使用

docker build [OPTIONS] PATH | URL | -

备选方案

名字,简写

默认

描述

--add-host


添加自定义的主机到IP映射(主机:IP)

--build-arg


设置构建时间变量

--cache-from


要考虑作为缓存源的图像

--cgroup- parent


容器的可选父cgroup

--compress

false

使用gzip压缩构建上下文

--cpu-period

0

限制CPU CFS(完全公平调度程序)期限

- --cpu-quota

0

限制CPU CFS(完全公平调度程序)配额

--cpu-shares,-c

0

CPU份额(相对重量)

--cpuset-CPU


允许执行的CPU(0-3,0,1)

--cpuset-MEMS


允许执行的MEM(0-3,0,1)

--disable-content-trust

true

跳过图像验证

--file,-f


Dockerfile的名称(默认为'PATH / Dockerfile')

--force-RM

false

始终删除中间容器

--iidfile


将图像ID写入文件

--isolation


容器隔离技术

--label


设置图像的元数据

--memory, -m

0

内存限制

--memory-swap

0

交换限制等于内存加交换:'-1'以启用无限交换

--network

默认

在构建期间为RUN指令设置联网模式

--no-cache

false

构建图像时不要使用缓存

--pull

false

始终尝试拉取图像的较新版本

--quiet,-q

false

取消构建输出并在成功时打印图像ID

- R M

真正

成功构建后移除中间容器

--security-OPT


安全选项

--shm-size

0

/ dev / shm的大小

--squash

false

将新建的图层压缩到单个新图层中

--tag, -t


以'名称:标记'格式命名和可选的标记

--target


设置要构建的目标构建阶段。

--ulimit


Ulimit选项

描述

将本地标准输入,输出和错误流附加到正在运行的容器

使用

docker attach [OPTIONS] CONTAINER

备选方案

名称,缩写

默认

描述

--detach-keys


重写用于分离容器的密钥序列

--no-stdin

false

不附加 STDIN

--sig-proxy

true

代理所有接收到的信号到过程中

父命令

命令

描述

docker

泊坞窗 CLI 的基本命令。

扩展描述

用于docker attach使用容器的ID或名称将终端的标准输入,输出和错误(或三者的任意组合)附加到正在运行的容器。这允许您查看其正在进行的输出或以交互方式控制它,就好像命令直接在您的终端中运行一样。

注:attach命令将显示ENTRYPOINT/CMD过程。这可能看起来像是挂起附加命令,而实际上,进程可能根本没有与终端进行交互。

您可以同时从Docker主机上的不同会话多次附加到同一包含的进程。

要停止容器,请使用CTRL-c。该密钥序列发送SIGKILL到容器。如果--sig-proxy为真(默认),则CTRL-c发送一个SIGINT到容器。您可以从容器中分离并使用CTRL-p CTRL-q键序列保持运行。

注:在容器中作为PID 1运行的进程被Linux专门处理:它忽略任何具有默认操作的信号。因此,进程不会在SIGINTSIGTERM除非它被编码来这么做。

禁止在附加到启用tty的容器(即:启动时-t)时重定向docker attach命令的标准输入。

当客户端连接到容器的Stdio时,请使用docker attach,Docker使用~1MB内存缓冲区来最大化应用程序的吞吐量。如果填充了此缓冲区,API连接的速度将开始影响进程输出写入速度。这与其他应用程序类似,如SSH。因此,不建议运行性能关键的应用程序,这些应用程序在前台通过缓慢的客户端连接生成大量输出。相反,用户应该使用docker logs命令来访问日志。

重写分离序列

如果需要,可以为DECHACH配置一个覆盖Docker密钥序列。如果Docker默认序列与用于其他应用程序的密钥序列发生冲突,则此操作非常有用。有两种方法可以定义您自己的分离密钥序列,作为每个容器覆盖或作为整个配置的配置属性。

若要重写单个容器的序列,请使用--detach-keys="<sequence>"docker attach命令。的格式<sequence>不是一封信阿-Z,或ctrl-与下列任何一项相结合:

  • a-z (一个小写字母字符)

  • @ (在标志处)

  • [ (左括号)

  • \\ (两个反向斜线)

  • _ (下划线)

  • ^ (脱字号;补注号)

这些actrl-aX,或ctrl-\\的值是有效的密钥序列的所有实施例。要为所有容器配置不同的配置默认密钥序列,请参阅配置文件部分。

示例

附加到正在运行的容器并从中分离

$ docker run -d --name topdemo ubuntu /usr/bin/top -b

$ docker attach topdemo

top - 02:05:52 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombieCpu(s):  0.1%us,  0.2%sy,  0.0%ni, 99.7%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:    373572k total,   355560k used,    18012k free,    27872k buffers
Swap:   786428k total,        0k used,   786428k free,   221740k cached

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND 1 root      20   0 17200 1116  912 R    0  0.3   0:00.03 top

 top - 02:05:55 up  3:05,  0 users,  load average: 0.01, 0.02, 0.05
 Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie Cpu(s):  0.0%us,  0.2%sy,  0.0%ni, 99.8%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
 Mem:    373572k total,   355244k used,    18328k free,    27872k buffers
 Swap:   786428k total,        0k used,   786428k free,   221776k cached

   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND       1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top


 top - 02:05:58 up  3:06,  0 users,  load average: 0.01, 0.02, 0.05
 Tasks:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie Cpu(s):  0.2%us,  0.3%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
 Mem:    373572k total,   355780k used,    17792k free,    27880k buffers
 Swap:   786428k total,        0k used,   786428k free,   221776k cached

 PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND      1 root      20   0 17208 1144  932 R    0  0.3   0:00.03 top^C$

$ echo $?0$ docker ps -a | grep topdemo

7998ac8581f9        ubuntu:14.04        "/usr/bin/top -b"   38 seconds ago      Exited (0) 21 seconds ago                          topdemo

获取容器命令的退出代码

在第二个示例中,您可以看到bash进程返回的退出代码也被docker attach命令返回给其调用者:

    $ docker run --name test -d -it debian

    275c44472aebd77c926d4527885bb09f2f6db21d878c75f0a1c212c03d3bcfab

    $ docker attach test

    root@f38c87f2a42d:/# exit 13

    exit

    $ echo $?    13

    $ docker ps -a | grep test

    275c44472aeb        debian:7            "/bin/bash"         26 seconds ago      Exited (13) 17 seconds ago                         test

用URL构建

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

这将克隆GitHub存储库,并将克隆的存储库用作上下文。存储库根部的Dockerfile用作Dockerfile。可以使用git://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

这会将URL http://server/ctx.tar.gz发送到Docker守护进程,Docker守护进程会下载并提取引用的tarball。 -f ctx / Dockerfile参数在ctx.tar.gz中指定用于构建映像的Dockerfile中的路径。 该Dockerfile中引用本地路径的任何ADD命令都必须与ctx.tar.gz内的根目录相关。 在上面的示例中,tarball包含一个目录ctx /,因此ADD ctx / container.cfg /操作按预期工作。

用 - 进行建立

$ docker build - < Dockerfile

这将从STDIN没有上下文的地方读取Dockerfile 。由于缺少上下文,任何本地目录的内容都不会发送到Docker守护进程。由于没有上下文,因此Dockerfile ADD仅在引用远程URL时才有效。

$ docker build - < context.tar.gz

这将为从STDIN支持的格式有:bzip 2、gzip和xz。

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

此示例显示使用该.dockerignore文件.git从上下文中排除目录。其效果可以在上传的上下文的改变大小中看到。构建器参考包含有关创建.dockerignore文件的详细信息

标记图像(-t)

$ docker build -t vieux/apache:2.0 .

这将像前面的示例一样构建,但它会标记生成的图像。存储库名称将是vieux/apache,标签将会是2.0。详细了解有效标签。

可以将多个标记应用于图像。例如,可以应用latest标记到新构建的映像中,并添加引用特定版本的另一个标记。例如,将图像标记为whenry/fedora-jboss:latestwhenry/fedora-jboss:v2.1,使用以下方法:

$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .

指定一个Dockerfile(-f)

$ docker build -f Dockerfile.debug .

这将使用一个叫做Dockerfile.debug构建指令的文件来代替Dockerfile

$ curl example.com/remote/Dockerfile | docker build -f - .

上面的命令将使用当前目录作为构建上下文,并从stdin读取一个Dockerfile。

$ docker build -f dockerfiles/Dockerfile.debug -t myapp_debug .$ docker build -f dockerfiles/Dockerfile.prod  -t myapp_prod .

以上命令将.使用调试版本的a Dockerfile和使用生产版本一次两次构建当前构建上下文(由the指定)。

$ cd /home/me/myapp/some/dir/really/deep
$ docker build -f /home/me/myapp/dockerfiles/debug /home/me/myapp
$ docker build -f ../../../../dockerfiles/debug /home/me/myapp

这两个docker build命令也会这样做。它们都使用debug文件,而不是查找Dockerfile并将使用/home/me/myapp作为构建上下文的根。请注意debug在构建上下文的目录结构中,而不管如何在命令行中引用它。

注意: 如果文件或目录不存在于上传的上下文中,docker build将返回no such file or directory错误。如果没有上下文,或者您指定的文件位于主机系统的其他位置,则可能会发生这种情况。由于安全原因,上下文仅限于当前目录(及其子目录),并确保远程Docker主机上的可重复构建。这也是ADD ../file不能工作的原因。

使用自定义父级cgroup(-cgroup-parent)

docker build使用该--cgroup-parent选项运行时,构建中使用的容器将与相应的docker run标志一起运行。

在容器中设置ulimits(-ulimit)

使用该--ulimit选项docker build将使每个构建步骤的容器都使用这些--ulimit标志值启动。

设置构建时间变量(-build-arg)

您可以使用ENVDockerfile中的指令来定义变量值。这些值坚持在建成的形象。但是,往往坚持的内容不是你想要的。用户想要根据他们在哪个主机上构建图像来指定不同的变量。

一个很好的例子是http_proxy或提取中间文件的源版本。ARG指令允许Dockerfile作者定义用户可以在构建时使用--build-arg标志

$ docker build --build-arg HTTP_PROXY=http://10.20.30.2:1234 .

此标志允许您传递像常规环境变量一样访问的构建时变量。RUNDockerfile的指令。而且,这些值不会在中间图像或最终映像中持久化,例如ENV价值是可以的。

使用此标志不会改变当ARG在构建过程中,来自Dockerfile的行将被回显。

有关使用ARGENV指令的详细信息,请参阅Dockerfile参考。

可选的安全选项(-security-opt)

该标志仅在Windows上运行的守护程序上受支持,并且只支持credentialspec选项。在credentialspec必须在格式file://spec.txtregistry://keyname

指定容器的隔离技术(隔离)

在Windows上运行Docker容器的情况下,此选项很有用。--isolation=<value>选项设置容器的隔离技术。在Linux上,唯一支持的是default使用Linux命名空间的选项。在Microsoft Windows上,您可以指定这些值:

描述

默认

使用Docker守护进程的--exec-opt指定的值。如果守护进程未指定隔离技术,则Microsoft Windows将使用进程作为其默认值。

处理

仅命名空间隔离。

hyperv

基于Hyper-V管理程序分区的隔离。

指定--isolation没有值的标志与设置--isolation="default"相同。

将条目添加到容器主机文件(-add-host)

您可以/etc/hosts使用一个或多个--add-host标志将其他主机添加到容器的文件中。此示例为名为以下的主机添加一个静态地址docker

$ docker build --add-host=docker:10.180.0.1 .

指定目标构建阶段(-target)

当构建具有多个构建阶段的Dockerfile时,--target可以根据名称指定中间构建阶段,作为结果映像的最后阶段。将跳过目标阶段之后的命令。

FROM debian AS build-env...FROM alpine AS production-env...
$ docker build -t mybuildimage --target build-env .

压缩图像的图层(-squash)用于实验

概述

一旦图像被构建,将新的图层压缩成一个新的图层。压缩不会破坏任何现有的图像,而是创建一个新的图像与内容的挤压层。这实际上使它看起来像所有的Dockerfile命令是用一个单层创建的。此方法将保留生成缓存。

使用此选项意味着新图像将无法利用与其他图像的层共享,并可能使用更多的空间。

使用此选项,您可能会看到由于存储两个映像副本,一个用于具有所有缓存层的构建缓存,另一个用于压缩版本。

先决条件

此页面上的示例是在Docker 1.13中使用试验模式。

可以通过使用--experimental在启动Docker守护进程或设置experimental: truedaemon.json配置文件

默认情况下,实验模式被禁用。要查看当前配置,请使用docker version命令。

Server:
 Version:      1.13.1
 API version:  1.26 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 06:35:24 2017
 OS/Arch:      linux/amd64
 Experimental: false [...]

要启用实验模式,用户需要重启启用实验标志的docker守护进程。

启用码头试验

从版本1.13.0开始,标准Docker二进制文件现在包含实验性功能。为了启用实验性功能,您需要启动带有--experimental标志的Docker守护进程。您也可以通过/etc/docker/daemon.json启用守护进程标志。例如

{    "experimental": true}

然后确保启用了实验标志:

$ docker version -f '{{.Server.Experimental}}'true

--squash参数构建图像

以下是使用--squash参数构建docker的示例

FROM busybox
RUN echo hello > /hello
RUN echo world >> /hello
RUN touch remove_me /remove_me
ENV HELLO world
RUN rm /remove_me

一个名为的图像test是用--squash参数构建的。

$ docker build --squash -t test .[...]

如果一切都是正确的,那么历史将会是这样的:

$ docker history test 

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
4e10cb5b4cac        3 seconds ago                                                       12 B                merge sha256:88a7b0112a41826885df0e7072698006ee8f621c6ab99fca7fe9151d7b599702 to sha256:47bcc53f74dc94b1920f0b34f6036096526296767650f223433fe65c35f149eb<missing>           5 minutes ago       /bin/sh -c rm /remove_me                        0 B<missing>           5 minutes ago       /bin/sh -c #(nop) ENV HELLO=world               0 B<missing>           5 minutes ago       /bin/sh -c touch remove_me /remove_me           0 B<missing>           5 minutes ago       /bin/sh -c echo world >> /hello                 0 B<missing>           6 minutes ago       /bin/sh -c echo hello > /hello                  0 B<missing>           7 weeks ago         /bin/sh -c #(nop) CMD ["sh"]                    0 B<missing>           7 weeks ago         /bin/sh -c #(nop) ADD file:47ca6e777c36a4cfff   1.113 MB

我们可以发现所有图层的名称都是<missing>,并且COMMENT有一个新图层merge

测试图像,检查是否/remove_me已经消失,确保hello\nworld已进入/hello,确保HELLOenvvar的值为world

上一篇:下一篇: