容器命名
docker 会为我们创建的每一个容器自动生成一个随机的名称。但是,这些名称是不含任何规律的,我们记起来非常难。因此为了解决这个问题,我们可以在容器创建时为容器进行命名操作。具体命名的方法我们只需要在docker run 命令的后面加上--name 参数即可。具体命令如下:
$ sudo docker run --name 为容器指定的名称 -i -t 镜像名称 /bin/bash
上面的命令将会创建一个以你指定的名字的容器。例如:创建一个名称为:gao79135的容器
$ sudo docker run --name gao79135 -i -t centos /bin/bash
学会给创建的容器命名后,我们将讨论一下容器命名的规则:一个合法的容器名称只能包含以下字符: 小写字母a-z 、大写字母A-Z、数字0-9、下划线、圆点、横线(如果要用正则表达式表示这些符号的话,就是[a-zA-Z0-9_.-]
在很多的Docker命令中,都可以用容器的名称来替代容器ID,所以之后再使用docker对容器进行操作时,尽量要使用容器的名称来对其进行操作!注意:容器的命名必须是唯一的。如果我们想试图创建两个名称相同的容器,则命令将会失败。所以,如果要使用的容器名称已经存在,我们可以先将已有的同名容器进行删除(docker rm)后再来创建新的容器。(docker rm 命令后面会详细说到)
重新启动已经停止的容器
当我们使用exit命令来退出容器时,容器就会变成停止状态。那么,如果我们想要再次使用已经停止的容器的话,那么我们应该如何进行操作呢?docker start/restart/create 命令会帮助我们解决这个问题。
首先说一下docker start 命令以及命令格式如下:
$ sudo docker start 容器名称/ID
docker start 命令代表可以启动已经停止的容器。当这条命令执行完之后,原先处于停止状态的容器将会再次启动。
下面说一下 docker restart 命令以及命令格式如下:(常用)
$ sudo docker restart 容器名称/ID
docker restart 命令代表可以重新启动已经停止的容器。当这条命令执行完之后,无论是否处于停止状态的容器都将会重新启动。
最后,我们介绍一下docker create 命令以及命令格式如下: (不常用)
$ sudo docker create --name 容器名称 镜像名称
docker create 命令代表可以创建一个容器,但是这个容器并不处于启动状态。(当然,使用docker create 命令创建完容器之后,我们可以使用docker start/restart 命令来后续对创建的容器进行启动操作)。
附着到容器
Docker 容器重新启动的时候,会沿用docker run 命令时指定的参数来运行。我们来举个例子:假设我通过docker run 命令创建了一个名为gao79135的容器,具体命令如下:
$ sudo docker run --name gao79135 -i -t centos /bin/bash
那么,当我将gao79135容器退出再重新启动时,gao79135容器会沿用先前创建它的docker run命令指定的参数(见上述命令的参数)来运行。因此,当我将gao79135容器再次启动时,gao79135容器重新启动并依旧运行一个交互式会话shell。
那么,容器是重新启动了,但是我们还是在目前的docker宿主机上,那么我们应该如何重新获取已经重新启动的容器会话上?这个时候,我们就可以使用 docker attach 命令来重新附着到该容器的会话上。代码如下:
$ sudo docker attach 容器名称/ID
当我们执行了上述命令之后,我们就可以重新获取到已经运行的容器Bash提示符,接着我们就可以继续对已经运行的容器进行操作了。(当然,如果重新附着到已经运行的容器后,再次输入了exit命令,那么该容器会再次停止运行)
创建守护式容器(重要!)
我们之前通过docker run -i -t 参数来创建了一个交互式容器,但是在生产环境当中,并不是所有的情况都适用与交互式容器。大多数情况下,我们都需要创建一个守护式容器,在后台默默为用户提供服务。所以,学会创建守护式容器是重中之重!注意:守护式容器是没有交互式会话的!这个是它与交互式容器的区别所在!
下面,我们就可以通过如下的命令格式来创建一个守护式容器。
$ sudo docker run --name 容器名称 -d 镜像名称 /bin/sh -c "while true; do echo hello world; sleep 1; done"
接下来,我们依次解释一下上述命令的用途:我们在docker run 命令中加上了 -d 参数,代表Docker会将创建的容器放到后台去运行。 并且,在docker run 命令中加上-c参数,代表容器在后台需要执行的命令。这里我们在容器要执行的命令处一直打印了 hello world 。这个情况直到容器或其进程停止运行时才会结束。
通过执行上述的命令,你会发现docker run 命令并没有像创建交互式容器那样,将docker宿主机的控制台附着到新的会话上,而是仅仅返回了创建该容器的ID而已,创建之后,我们就可以使用docker ps -a 命令来查看刚刚创建好的守护式容器了。
获取容器的日志信息
在上述创建守护式容器的命令中,我们创建了一直在后台执行while循环的守护式容器。为了探究该守护式容器在后台都干了些什么(输出了什么内容),我们可以用 docker logs 来获取容器的日志。
一般来说,容器输出的结果和操作、状态等都会记录到容器自身的日志中。接下来,我们来获取一下上述创建的守护式容器的日志信息。(看看输出了什么内容)
$ sudo docker logs 容器名称
执行完上述命令之后,我们就可以在日志中看到了上述创建的守护式容器输出的内容。内容如下:
hello world
hello world
hello world
hello world
...
这里,我们可以看到while循环正在向该守护式容器的日志中打印hello world。默认的docker logs 命令会输出最后几条日志项就返回。我们也可以在docker logs 命令后使用-f参数来监控docker的日志信息。(实时跟踪(更新)docker的日志信息)(与tail -f 命令非常的相似。)
$ sudo docker logs -f 容器的名称/ID
并且,我们也可以使用如下命令来获取某个容器的最后10行内容
$ sudo docker logs --tail 10 容器名称/ID
还可以使用如下命令来获取容器的最新日志信息。(之前日志信息将被忽略)
$ sudo docker logs --tail 0 -f 容器名称/ID
还可以在docker logs 命令的基础上加上-t参数来给每条日志项加上时间戳
$ sudo docker logs -ft 容器名称/ID
加上-t参数后,执行命令后的结果如下:
[May 10 13:06:07.934] hello world --中括号的内容代表时间戳信息。(实际进行实验时,由于实验时间的不同,时间戳会有差异!)
...
最后,我们可以使用ctrl + c 来退出日志的跟踪(docker logs -f)