• 容器生命周期管理 — docker [run|start|stop|restart|kill|rm|pause|unpause]
  • 容器操作运维 — docker [ps|inspect|top|attach|events|logs|wait|export|port]
  • 容器rootfs命令 — docker [commit|cp|diff]
  • 镜像仓库 — docker [login|pull|push|search]
  • 本地镜像管理 — docker [images|rmi|tag|build|history|save|import]
  • 其他命令 — docker [info|version]

看一个变迁图

1. 列出机器上的镜像(images)

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-comment"># docker images </span>
<span class="hljs-title">REPOSITORY</span> TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu <span class="hljs-number">14</span>.<span class="hljs-number">10</span> 2185fd50e2ca <span class="hljs-number">13</span> days ago <span class="hljs-number">236</span>.<span class="hljs-number">9</span> MB

</span></code>

其中我们可以根据REPOSITORY来判断这个镜像是来自哪个服务器,如果没有 / 则表示官方镜像,类似于username/repos_name表示Github的个人公共库,类似于regsistory.example.com:5000/repos_name则表示的是私服。

IMAGE ID列其实是缩写,要显示完整则带上--no-trunc选项

2. 在docker index中搜索image(search)

Usage: docker search TERM

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-comment"># docker search seanlo</span>
<span class="hljs-title">NAME</span> DESCRIPTION STARS OFFICIAL AUTOMATED
seanloook/centos6 sean<span class="hljs-string">'s docker repos 0
</span></span></code>

搜索的范围是官方镜像和所有个人公共镜像。NAME列的 / 后面是仓库的名字。

3. 从docker registry server 中下拉image或repository(pull)

Usage: docker pull [OPTIONS] NAME[:TAG]

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-comment"># docker pull centos</span>
</span></code>

上面的命令需要注意,在docker v1.2版本以前,会下载官方镜像的centos仓库里的所有镜像,而从v.13开始官方文档里的说明变了:will pull the centos:latest image, its intermediate layers and any aliases of the same
id,也就是只会下载tag为latest的镜像(以及同一images id的其他tag)。

也可以明确指定具体的镜像:

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-comment"># docker pull centos:centos6</span>
</span></code>

当然也可以从某个人的公共仓库(包括自己是私人仓库)拉取,形如docker pull username/repository<:tag_name> :

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-comment"># docker pull seanlook/centos:centos6</span>
</span></code>

如果你没有网络,或者从其他私服获取镜像,形如docker pull registry.domain.com:5000/repos:<tag_name>

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-comment"># docker pull dl.dockerpool.com:5000/mongo:latest</span>
</span></code>

4. 推送一个image或repository到registry(push)

与上面的pull对应,可以推送到Docker Hub的Public、Private以及私服,但不能推送到Top Level Repository。

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-comment"># docker push seanlook/mongo</span>
<span class="hljs-comment"># docker push registry.tp-link.net:5000/mongo:2014-10-27</span>
</span></code>

registry.tp-link.net也可以写成IP,172.29.88.222。

在repository不存在的情况下,命令行下push上去的会为我们创建为私有库,然而通过浏览器创建的默认为公共库。

5. 从image启动一个container(run)

docker run命令首先会从特定的image创之上create一层可写的Container,然后通过start命令来启动它。停止的container可以重新启动并保留原来的修改。run命令启动参数有很多,以下是一些常规使用说明,更多部分请参考http://www.cnphp6.com/archives/24899

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

5.1 使用image创建container并执行相应命令,然后停止

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-comment"># docker run ubuntu echo "hello world"</span>
<span class="hljs-title">hello</span> word
</span></code>

这是最简单的方式,跟在本地直接执行echo 'hello world' 几乎感觉不出任何区别,而实际上它会从本地ubuntu:latest镜像启动到一个容器,并执行打印命令后退出(docker
ps -l
可查看)。需要注意的是,默认有一个--rm=true参数,即完成操作后停止容器并从文件系统移除。因为Docker的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。

容器启动后会自动随机生成一个CONTAINER ID,这个ID在后面commit命令后可以变为IMAGE ID

使用image创建container并进入交互模式, login shell是/bin/bash

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-comment"># docker run -i -t --name mytest centos:centos6 /bin/bash</span>
bash-<span class="hljs-number">4.1</span><span class="hljs-comment">#</span>
</span></code>

上面的--name参数可以指定启动后的容器名字,如果不指定则docker会帮我们取一个名字。镜像centos:centos6也可以用IMAGE
ID
 (68edf809afe7) 代替),并且会启动一个伪终端,但通过ps或top命令我们却只能看到一两个进程,因为容器的核心是所执行的应用程序,所需要的资源都是应用程序运行所必需的,除此之外,并没有其它的资源,可见Docker对资源的利用率极高。此时使用exit或Ctrl+D退出后,这个容器也就消失了(消失后的容器并没有完全删除?)

(那么多个TAG不同而IMAGE ID相同的的镜像究竟会运行以哪一个TAG启动呢

5.2 运行出一个container放到后台运行

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"># docker run -d ubuntu /bin/sh -c "while true; <span class="hljs-operator"><span class="hljs-keyword">do</span> echo hello world;</span> sleep 2; done"
ae60c4b642058fefcc61ada85a610914bed9f5df0e2aa147100eab85cea785dc
</span></code>

它将直接把启动的container挂起放在后台运行(这才叫saas),并且会输出一个CONTAINER ID,通过docker ps可以看到这个容器的信息,可在container外面查看它的输出docker
logs ae60c4b64205
,也可以通过docker attach ae60c4b64205连接到这个正在运行的终端,此时在Ctrl+C退出container就消失了,按ctrl-p ctrl-q可以退出到宿主机,而保持container仍然在运行

另外,如果-d启动但后面的命令执行完就结束了,如/bin/bashecho test,则container做完该做的时候依然会终止。而且-d不能与--rm同时使用

可以通过这种方式来运行memcached、apache等。

5.3 映射host到container的端口和目录

映射主机到容器的端口是很有用的,比如在container中运行memcached,端口为11211,运行容器的host可以连接container的 internel_ip:11211 访问,如果有从其他主机访问memcached需求那就可以通过-p选项,形如-p
<host_port:contain_port>
,存在以下几种写法:

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-tag">-p</span> 11211<span class="hljs-pseudo">:11211</span> 这个即是默认情况下,绑定主机所有网卡(0<span class="hljs-class">.0</span><span class="hljs-class">.0</span><span class="hljs-class">.0</span>)的11211端口到容器的11211端口上
<span class="hljs-tag">-p</span> 127<span class="hljs-class">.0</span><span class="hljs-class">.0</span><span class="hljs-class">.1</span><span class="hljs-pseudo">:11211</span><span class="hljs-pseudo">:11211</span> 只绑定<span class="hljs-tag">localhost</span>这个接口的11211端口
<span class="hljs-tag">-p</span> 127<span class="hljs-class">.0</span><span class="hljs-class">.0</span><span class="hljs-class">.1</span><span class="hljs-pseudo">::5000</span>
<span class="hljs-tag">-p</span> 127<span class="hljs-class">.0</span><span class="hljs-class">.0</span><span class="hljs-class">.1</span><span class="hljs-pseudo">:80</span><span class="hljs-pseudo">:8080</span>
</span></code>

目录映射其实是“绑定挂载”host的路径到container的目录,这对于内外传送文件比较方便,在搭建私服那一节,为了避免私服container停止以后保存的images不被删除,就要把提交的images保存到挂载的主机目录下。使用比较简单,-v
<host_path:container_path>
,绑定多个目录时再加-v

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-deletion">-v /tmp/docker:/tmp/docker</span>
</span></code>

另外在两个container之间建立联系可用--link,详见高级部分或官方文档

下面是一个例子:

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-header"># docker run --name nginx_test \</span>
<span class="hljs-blockquote">> -v /tmp/docker:/usr/share/nginx/html:ro \</span>
<span class="hljs-blockquote">> -p 80:80 -d \</span>
<span class="hljs-blockquote">> nginx:1.7.6</span>
</span></code>

在主机的/tmp/docker下建立index.html,就可以通过http://localhost:80/http://host-ip:80访问了。

6. 将一个container固化为一个新的image(commit)

当我们在制作自己的镜像的时候,会在container中安装一些工具、修改配置,如果不做commit保存起来,那么container停止以后再启动,这些更改就消失了。

docker commit <container> [repo:tag]

后面的repo:tag可选

只能提交正在运行的container,即通过docker ps可以看见的容器,

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);">查看刚运行过的容器
<span class="hljs-comment"># docker ps -l</span>
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c9fdf26326c9 nginx:<span class="hljs-number">1</span> nginx -g.. <span class="hljs-number">3</span> hours ago Exited (<span class="hljs-number">0</span>).. nginx_<span class="hljs-built_in">test</span> 启动一个已存在的容器(run是从image新建容器后再启动),以下也可以使用docker start nginx_<span class="hljs-built_in">test</span>代替
[root@hostname docker]<span class="hljs-comment"># docker start c9fdf26326c9</span>
c9fdf26326c9 docker run -i -t --sig-proxy=<span class="hljs-literal">false</span> <span class="hljs-number">21</span>ffe545748baf /bin/bash
nginx服务没有启动 <span class="hljs-comment"># docker commit -m "some tools installed" fcbd0a5348ca seanlook/ubuntu:14.10_tutorial</span>
fe022762070b09866eaab47bc943ccb796e53f3f416abf3f2327481b446a9503
</span></code>

-a "seanlook7@gmail.com"

请注意,当你反复去commit一个容器的时候,每次都会得到一个新的IMAGE ID,假如后面的repository:tag没有变,通过docker images可以看到,之前提交的那份镜像的repository:tag就会变成<none>:<none>,所以尽量避免反复提交。

另外,观察以下几点:

  • commit container只会pause住容器,这是为了保证容器文件系统的一致性,但不会stop。如果你要对这个容器继续做其他修改:

    • 你可以重新提交得到新image2,删除次新的image1
    • 也可以关闭容器用新image1启动,继续修改,提交image2后删除image1
    • 当然这样会很痛苦,所以一般是采用Dockerfilebuild得到最终image,参考[]
  • 虽然产生了一个新的image,并且你可以看到大小有100MB,但从commit过程很快就可以知道实际上它并没有独立占用100MB的硬盘空间,而只是在旧镜像的基础上修改,它们共享大部分公共的“片”。

7. 开启/停止/重启container(start/stop/restart)

容器可以通过run新建一个来运行,也可以重新start已经停止的container,但start不能够再指定容器启动时运行的指令,因为docker只能有一个前台进程。

容器stop(或Ctrl+D)时,会在保存当前容器的状态之后退出,下次start时保有上次关闭时更改。而且每次进入attach进去的界面是一样的,与第一次run启动或commit提交的时刻相同。

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-constant">CONTAINER_ID</span>=<span class="hljs-variable">$(</span>docker start <containner_id>)
docker stop <span class="hljs-variable">$CONTAINER_ID</span>
docker restart <span class="hljs-variable">$CONTAINER_ID</span>
</span></code>

关于这几个命令可以通过一个完整的实例使用:docker如何创建一个运行后台进程的容器并同时提供shell终端

8. 连接到正在运行中的container(attach)

attach上去的容器必须正在运行,可以同时连接上同一个container来共享屏幕(与screen命令的attach类似)。

官方文档中说attach后可以通过CTRL-C来detach,但实际上经过我的测试,如果container当前在运行bash,CTRL-C自然是当前行的输入,没有退出;如果container当前正在前台运行进程,如输出nginx的access.log日志,CTRL-C不仅会导致退出容器,而且还stop了。这不是我们想要的,detach的意思按理应该是脱离容器终端,但容器依然运行。好在attach是可以带上--sig-proxy=false来确保CTRL-DCTRL-C不会关闭容器。

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-comment"># docker attach --sig-proxy=false $CONTAINER_ID</span>
</span></code>

9. 查看image或container的底层信息(inspect)

inspect的对象可以是image、运行中的container和停止的container。

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);">查看容器的内部IP
<span class="hljs-comment"># docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID</span>
<span class="hljs-number">172.17</span><span class="hljs-number">.42</span><span class="hljs-number">.35</span>
</span></code>

10. 删除一个或多个container、image(rm、rmi)

你可能在使用过程中会buildcommit许多镜像,无用的镜像需要删除。但删除这些镜像是有一些条件的:

  • 同一个IMAGE ID可能会有多个TAG(可能还在不同的仓库),首先你要根据这些 image names
    来删除标签,当删除最后一个tag的时候就会自动删除镜像;
  • 承上,如果要删除的多个IMAGE NAME在同一个REPOSITORY,可以通过docker
    rmi <image_id>
    来同时删除剩下的TAG;若在不同Repo则还是需要手动逐个删除TAG
  • 还存在由这个镜像启动的container时(即便已经停止),也无法删除镜像;

TO-DO

如何查看镜像与容器的依存关系

删除容器

docker rm <container_id/contaner_name>

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);">删除所有停止的容器
docker rm $(docker ps -a -q)
</span></code>

删除镜像

docker rmi <image_id/image_name ...>

下面是一个完整的示例:

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"><span class="hljs-comment"># docker images            <==</span>
ubuntu <span class="hljs-number">13.10</span> <span class="hljs-number">195</span>eb90b5349 <span class="hljs-number">4</span> months ago <span class="hljs-number">184.6</span> MB
ubuntu saucy <span class="hljs-number">195</span>eb90b5349 <span class="hljs-number">4</span> months ago <span class="hljs-number">184.6</span> MB
seanlook/ubuntu rm_test <span class="hljs-number">195</span>eb90b5349 <span class="hljs-number">4</span> months ago <span class="hljs-number">184.6</span> MB 使用<span class="hljs-number">195</span>eb90b5349启动、停止一个容器后,删除这个镜像
<span class="hljs-comment"># docker rmi 195eb90b5349</span>
Error response from <span class="hljs-attribute">daemon</span>: Conflict, cannot <span class="hljs-keyword">delete</span> image <span class="hljs-number">195</span>eb90b5349 because it <span class="hljs-keyword">is</span>
tagged <span class="hljs-keyword">in</span> multiple repositories, use -f to force
<span class="hljs-number">2014</span>/<span class="hljs-number">11</span>/<span class="hljs-number">04</span> <span class="hljs-number">14</span>:<span class="hljs-number">19</span>:<span class="hljs-number">00</span> <span class="hljs-attribute">Error</span>: failed to remove one <span class="hljs-keyword">or</span> more images 删除seanlook仓库中的tag <==
<span class="hljs-comment"># docker rmi seanlook/ubuntu:rm_test</span>
<span class="hljs-attribute">Untagged</span>: seanlook/<span class="hljs-attribute">ubuntu</span>:rm_test 现在删除镜像,还会由于container的存在不能rmi
<span class="hljs-comment"># docker rmi 195eb90b5349</span>
Error response from <span class="hljs-attribute">daemon</span>: Conflict, cannot <span class="hljs-keyword">delete</span> <span class="hljs-number">195</span>eb90b5349 because the
container eef3648a6e77 <span class="hljs-keyword">is</span> using it, use -f to force
<span class="hljs-number">2014</span>/<span class="hljs-number">11</span>/<span class="hljs-number">04</span> <span class="hljs-number">14</span>:<span class="hljs-number">24</span>:<span class="hljs-number">15</span> <span class="hljs-attribute">Error</span>: failed to remove one <span class="hljs-keyword">or</span> more images 先删除由这个镜像启动的容器 <==
<span class="hljs-comment"># docker rm eef3648a6e77</span> 删除镜像 <==
<span class="hljs-comment"># docker rmi 195eb90b5349</span>
<span class="hljs-attribute">Deleted</span>: <span class="hljs-number">195</span>eb90b534950d334188c3627f860fbdf898e224d8a0a11ec54ff453175e081
<span class="hljs-attribute">Deleted</span>: <span class="hljs-number">209</span>ea56fda6dc2fb013e4d1e40cb678b2af91d1b54a71529f7df0bd867adc961
<span class="hljs-attribute">Deleted</span>: <span class="hljs-number">0</span>f4aac48388f5d65a725ccf8e7caada42f136026c566528a5ee9b02467dac90a
<span class="hljs-attribute">Deleted</span>: fae16849ebe23b48f2bedcc08aaabd45408c62b531ffd8d3088592043d5e7364
<span class="hljs-attribute">Deleted</span>: f127542f0b6191e99bb015b672f5cf48fa79d974784ac8090b11aeac184eaaff
</span></code>

注意,上面的删除过程我所举的例子比较特殊——镜像被tag在多个仓库,也有启动过的容器。按照<==指示的顺序进行即可。

11. docker build 使用此配置生成新的image

build命令可以从Dockerfile和上下文来创建镜像:

docker build [OPTIONS] PATH | URL | -

上面的PATHURL中的文件被称作上下文,build image的过程会先把这些文件传送到docker的服务端来进行的。

如果PATH直接就是一个单独的Dockerfile文件则可以不需要上下文;如果URL是一个Git仓库地址,那么创建image的过程中会自动git
clone
一份到本机的临时目录,它就成为了本次build的上下文。无论指定的PATH是什么,Dockerfile是至关重要的,请参考Dockerfile
Reference


请看下面的例子:

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);"># cat Dockerfile
FROM seanlook/nginx:bash_vim
EXPOSE 80
ENTRYPOINT /usr/sbin/nginx -c /etc/nginx/nginx.conf && /bin/bash # docker build -t seanlook/nginx:bash_vim_Df .
Sending build context to Docker daemon 73.45 MB
Sending build context to Docker daemon
Step 0 : FROM seanlook/nginx:bash_vim
<span class="hljs-comment">---> aa8516fa0bb7</span>
Step 1 : EXPOSE 80
<span class="hljs-comment">---> Using cache</span>
<span class="hljs-comment">---> fece07e2b515</span>
Step 2 : ENTRYPOINT /usr/sbin/nginx -c /etc/nginx/nginx.conf && /bin/bash
<span class="hljs-comment">---> Running in e08963fd5afb</span>
<span class="hljs-comment">---> d9bbd13f5066</span>
Removing intermediate container e08963fd5afb
Successfully built d9bbd13f5066
</span></code>

上面的PATH.,所以在当前目录下的所有文件(不包括.dockerignore中的)将会被tar打包并传送到docker
daemon
(一般在本机),从输出我们可以到Sending build context...,最后有个Removing intermediate container的过程,可以通过--rm=false来保留容器。

TO-DO

docker build github.com/creack/docker-firefox失败。

12. 给镜像打上标签(tag)

tag的作用主要有两点:一是为镜像起一个容易理解的名字,二是可以通过docker tag来重新指定镜像的仓库,这样在push时自动提交到仓库。

<code style="padding: 0px; white-space: inherit; background-image: none; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;"><span style="font-family:Courier New;font-size:18px;color:#ff0000;background-color: rgb(255, 255, 255);">将同一IMAGE_ID的所有tag,合并为一个新的
<span class="hljs-comment"># docker tag 195eb90b5349 seanlook/ubuntu:rm_test</span> 新建一个tag,保留旧的那条记录
<span class="hljs-comment"># docker tag Registry/Repos:Tag New_Registry/New_Repos:New_Tag</span>
</span></code>

13. 查看容器的信息container(ps)

docker ps命令可以查看容器的CONTAINER IDNAMEIMAGE
NAME
、端口开启及绑定、容器启动后执行的COMMNAD。经常通过ps来找到CONTAINER_ID

docker ps 默认显示当前正在运行中的container

docker ps -a 查看包括已经停止的所有容器

docker ps -l 显示最新启动的一个容器(包括已停止的)

14. 查看容器中正在运行的进程(top)

容器运行时不一定有/bin/bash终端来交互执行top命令,查看container中正在运行的进程,况且还不一定有top命令,这是docker
top <container_id/container_name>
就很有用了。实际上在host上使用ps -ef|grep docker也可以看到一组类似的进程信息,把container里的进程看成是host上启动docker的子进程就对了。

15. 其他命令

docker还有一些如logincplogsexportimportloadkill等不是很常用的命令,比较简单,请参考官网。

Docker学习总结(9)——Docker常用命令的更多相关文章

  1. docker学习笔记二:常用命令

    docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...

  2. docker系列四之docker镜像与容器的常用命令

    docker镜像与容器的常用命令 一.概述   docker的镜像于容器是docker中两个至关重要的概念,首先给各位读者解释一下笔者对于这两个概念的理解.镜像,我们从字面意思上看,镜子里成像,我们人 ...

  3. Docker学习笔记(1) — docker 常用命令

    1. docker version显示 Docker 版本信息.2. docker info显示 Docker 系统信息,包括镜像和容器数.3. docker searchdocker search ...

  4. Docker学习笔记(2)--Docker常用命令

    1. 查看docker信息(version.info) # 查看docker版本 $docker version # 显示docker系统的信息 $docker info 2. 对image的操作(s ...

  5. Docker小白到实战之常用命令演示,通俗易懂

    前言 上一篇大概认识了Docker,主要是从概念.架构.优点及流程方面进行阐述,并进行安装和体验: 接下来就开始进行实操学习,在演示过程中会针对关键的知识点进行归纳和总结,这里先从常用命令说起,来吧, ...

  6. Docker系列教程05 容器常用命令

    https://mp.weixin.qq.com/s?__biz=MzI4ODQ3NjE2OA==&mid=2247483890&idx=1&sn=2721f08624e6de ...

  7. Docker容器(四)——常用命令

    (1).基本使用方法 查看所有镜像.docker images [root@youxi1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE ...

  8. Java篇:Docker的介绍安装 和常用命令

    文章目录 为什么 出现docker Docker的简介 容器(Container) 镜像(Image) 仓库(Repository) Docker的安装 查看容器 删除镜像 删除容器 部署应用 以my ...

  9. Docker系列(7)- 常用命令(3) | 容器命令

    容器命令 说明: 有了镜像才可以创建容器:下载一个centos镜像进行练习,相当于在Linux里面再见一个Linux虚拟机 [root@localhost ~]# docker pull centos ...

  10. docker(三) 镜像和容器常用命令

    一.镜像操作 1.搜索镜像 可以直接在Docker Hub 直接搜索镜像,当然也可以使用命令来搜索. docker search 名称 docker search tomcat 2.拉取镜像 dock ...

随机推荐

  1. 基础——(4)SR Latch(SR锁存器)

    Digital logic gets really interesting when we connect the output of gates back to an input. The SR l ...

  2. [TJOI2015]线性规划

    题目:洛谷P3973.BZOJ3996. 题目大意:给你n,参数b[][]和c[](里面的数均>0),要你求一个数组A[](0/1,1表示选择),已知:1. 若同时选择X和Y,获得B[x][y] ...

  3. SparkSql初级编程实践

    1.Spark SQL 基本操作将下列 JSON 格式数据复制到 Linux 系统中,并保存命名为 employee.json.{ "id":1 , "name" ...

  4. vue 过滤器使用的传参说明

    在table中,需要对obj的数据类型进行文字转换,例如后台接口返回的姓别值:1,2.其中需要页面根据字典需要把1=>男,2=>女进行转换. 以前的习惯是每一个过滤方法都写一个方法进行转换 ...

  5. pytorch 8 CNN 卷积神经网络

    # library # standard library import os # third-party library import torch import torch.nn as nn impo ...

  6. [luogu] P3202 [HNOI2009]通往城堡之路(贪心)

    P3202 [HNOI2009]通往城堡之路 题目描述 听说公主被关押在城堡里,彭大侠下定决心:不管一路上有多少坎坷,不管城堡中的看守有多少厉害,不管救了公主之后公主会不会再被抓走,不管公主是否漂亮. ...

  7. UVALIVE 4256 Salesmen

    Salesmen Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Original ...

  8. POJ 3088

    已知n,求n中取k(k<=n)个数组成的m(m<=n)个的集合的排列数. 于是,可以枚举选出k个数及枚举m个集合.这个很明显是二类斯特林数.而集合有序,则乘上m! #include < ...

  9. Edison Chou

    .NET中那些所谓的新语法之中的一个:自己主动属性.隐式类型.命名參数与自己主动初始化器 开篇:在日常的.NET开发学习中,我们往往会接触到一些较新的语法.它们相对曾经的老语法相比.做了非常多的改进, ...

  10. [Tools] Using mobile device for debugging your mobile web site

    1. First you have enable "Developer mode" on your mobile device. (Different device might b ...