1.运行第一个docker容器
参数说明:
首先,docker run -it ubuntu 的意思是,为centos这个镜像创建一个容器, -i和-t这两个参数的作用是,为该docker创建一个伪终端,这样就可以进入到容器的交互模式?(也就是直接进入到容器里面)后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这样当你使用docker ps 查看启动的容器时,就会发现你刚刚创建的那个容器并不在已启动的容器队列中。这个/bin/bash就表示启动容器后启动bash
2.使用第一个容器
现在我们已经以root用户登录到了新容器中,容器的id是21af97ac0b0b
可以看到,容器的主机名就是该容器的id,我们再来看看/etc/hosts文件
docker已经再hosts文件中为该容器的ip地址添加了一条主机配置项。再看看容器的网络配置情况,由于容器中没有ifconfig 命令,首先通过以下命令安装
可以看到lo的环回接口,还有ip为172.17.0.2的标准eth0网络接口,和普通宿主机是完全医院的。还可以查看容器中运行的进程
如果需要编辑文件,需要安装vim软件
当所有工作都结束时,输入exit,就可以返回到Ubuntu宿主机的命令行提示符了。但是这个时候容器就停止运行了,只有在指定的/bin/bash命令处于运行状态的时候,我们的容器也才会相应地处于运行状态。一旦退出容器,/bin/bash命令也就结束了,这时容器也随之停止了运行。
但是容器仍然是存在的,我们可以使用以下命令来查看当前系统中容器的列表
默认情况下,当执行docker ps命令时,只能看到正在运行的容器,如果指定-a标志,那么会列出所有的容器,包括正在运行和已经停止的。
从该命令的输出结果中我们可以看到关于这个容器的很多有用信息:id、用于创建该容器的镜像、容器最后执行的命令、创建时间以及容器的退出状态(在上面的例子中,退出状态是0,因为容器是通过正常的exit命令退出的)
3.容器命名
docker会为我们创建的每一个容器自动生成一个随机的名称。例如,上面创建的容器就被命名为sleepy_sutherland,如果想为容器指定一个名称,则可以使用--name标志来实现(容器命名必须唯一)
4.重新启动已经停止的容器
名称为sleepy_sutherland的容器已经停止,可以使用以下命令启动(支持start、stop、restart)
除了容器名称,也可以使用容器id来指定容器
5.附着到容器
当容器启动后,我们可以使用以下命令,重新附着到该容器的会话上
或者
如果退出容器的shell,容器也会随之停止运行
6.创建守护式容器
除了这些交互式运行的容器(interactive container),我们可以创建长期运行的容器。守护式容器(daemonized container)
没有交互式会话,非常适合运行应用程序和服务。大多数时候我们都需要以守护式来运行我们的容器。
上面docker run 命令使用了-d参数,因此docker会将容器放到后台运行,容器里运行了一个while循环,该循环会一直打印hello world,直到容器或其进程停止运行
7.容器内部都再干些什么
现在我们已经有了一个在后台运行while循环的守护型容器,为了知道容器内部都在干什么,我们可以使用docker logs命令来获取容器的日志
这里,我们可以看到while循环正在向日志里打印hello world。docker会输出最后几条日志项并返回。我们也可以在命令后使用-f参数来监控docker的日志,这与tail -f命令非常相似
可以用以下命令获取日志的最后10行内容,命令如下
跟踪某个容器的最新日志而不必读取整个日志文件,命令如下
使用-t标志为每条日志项加上时间戳,命令如下
8.查看容器内的进程
9.在容器内部运行进程
上面例子中的命令会在daemon_dave容器内创建一个空文件。
也可以在daemon_dave容器中启动一个打开shell的交互式任务,命令如下
和运行交互容器时一样,这里的-t和-i标志为我们执行的进程创建了TTY并捕捉STDIN。上面这个意思中,这条命令会在daemon_dave容器内创建一个新的bash会话,有了这个会话,我们可以在该容器中运行其他命令了。
10.停止守护式容器
注意:docker stop命令会向docker容器进程发送SIGTERM信号,如果你想快速停止某个容器,也可以使用docker kill命令来向容器进程发送SIGKILL信号
要想查看已经停止
的容器的状态,则可以使用docker ps命令,还有一个很实用的命令,docker ps -n x ,该命令会显示最后x个容器,不论这些容器正在运行还是已经停止
11.自带重启容器
如果由于某种错误而导致容器停止运行,我们换可以通过--restart标志,让docker自动重新启动该容器,--restart标志会检查容器的退出代码,并据此来决定是否要重启容器。默认的行为是docker不会重启容器。
在本例中,--restart标志被设置为always。无论容器的退出代码是什么,docker都会自动重启该容器。除了always,可以将这个标志设为on-failure,这样,只有当容器的退出代码为非0值的时候才会自动重启。另外,on-failure还接受一个可选性的重启次数参数,如下
这样,当容器退出代码为非0时,docker会尝试自动重启该容器,最多重启5次
12.深入容器
docker inspect命令会对容器进行详细的检查,然后返回其配置信息,包括名称、命令、网络配置以及很多有用的数据
可以使用-f或者--format标志来选定查看结果,下面这条命令会返回容器的运行状态
还可以获取容器的ip信息
也可以同时指定多个容器,并显示每个容器的输出结果
注意:除了查看容器,你还可以通过浏览/var/lib/docker目录来深入了解docker的工作原理。该目录存放着docker镜像、容器以及容器的配置。所有的容器都保存在/var/lib/docker/containers
13.删除容器
如果容器已经不再使用,可以使用docker rm命令来删除它们(需要注意的是,运行中的docker容器是无法删除的!你必须先通过docker stop或docker kill命令停止容器,才能将其删除)
目前,还没有办法一次删除所有容器,不过可以通过代码清单来删除全部容器
上面docker ps命令会列出现有的全部容器,-a标志代表列出所有(all)容器,而-q标志则表示只需要返回容器id而不会返回容器的其他信息。这样我们就得到了容器id的列表,并传给了docker rm命令,从而达到删除所有容器的目。