转载

Docker学习之路(四)守护式容器

windows 7, docker 1.3.2,当前使用的容器名为aoct,ID为614122c0aabb。

开启已经停止的容器

可以 start + 容器名

$ sudo docker start aoct 

start + 容器ID

$ sudo docker start 614122c0aabb 

Docker学习之路(四)守护式容器

查看现在正在运行的容器:

$ sudo docker ps 

Docker学习之路(四)守护式容器

还可以用 docker restart 重启。

附到容器上

Docker容器重新启动时,会沿用 docker run 命令指定的参数来运行,所以重新启动后会运行一个交互式会话shell。也可以用 docker attach 命令重新附到该容器的会话上:

$ sudo docker attach aoct 

Docker学习之路(四)守护式容器

现在就重新回到容器的巴士提示符。

也可以用容器ID:

$ sudo docker attach 614122c0aabb 

创建守护式容器

除了这些交互式运行的容器(interactive container),也可以创建长期运行的容器。守护式容器(daemonized container)没有交互式会话,适合运行应用程序和服务。大多数时候是需要以守护式来运行容器。

可以通过添加 -d 参数来实现,创建一个叫aofo的容器:

sudo docker run --name aofo -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" 

Docker学习之路(四)守护式容器

上面的命令会让容器在后台运行。使用了一个 while 循环,改循环会一直打印 hello world ,知道容器或其进程停止运行。

与之前创建的容器相比,没有返回shell会话,只是返回了一个容器ID。

查看现在正在运行的容器:

$ sudo docker ps 

Docker学习之路(四)守护式容器

容器内部在干些什么

上面创建了一个在后台运行 while 循环的守护型容器,可以用 docker logs 查看容器日志:

$ sudo docker logs aofo 

Docker学习之路(四)守护式容器

可以在命令后使用 -f 参数来健康Docker日志,这与 tail -f 非常相似:

$ sudo docker logs -f aofo 

然后就会看到一直输出hello world。可以通过 ctrl+c 来退出监控个。

查看容器内的进程

$ sudo docker top aofo 

可以看到容器内的所有进程(主要是while循环)、运行进程的用户、进程ID:

Docker学习之路(四)守护式容器

在容器内部运行进程

Docker 1.3 之后可以通过 docker exec 命令在容器内部额外启动新进程。可以在容器内运行两种进程:后台任务、交互式任务。后台任务在容器内运行且没有交互需求,交互式二年五则保持在前台运行。对于需要早容器内部贷款 shell 的任务,用交互式任务.

后台任务例子:

$ sudo docker exec -d daemon aofo touch /etc/new_config_file 

Docker学习之路(四)守护式容器

代码解释:

-d 标志标明要运行一个后台进程,后面指定要在内部执行这个命令的容器名,我用的是 aofo 。整句命令在aofo容器内创建了一个空文件夹 new_config_file

交互式任务例子:

$ sudo docker exec -t -i aofo /bin/bash 

代码解释:

和运行交互容器一一,这里 -t-i 标志位指明创建TTY并捕捉STDIN。后面指定要在内部执行这个命令的容器名,我用的是 aofo 。整句命令在aofo容器内创建新的bash对话,就可以在该容器运行其他命令了。

docker exec 命令是在 Docker 1.3 引入的,之前版本不支持。可用 nsenter 命令

停止守护式容器

docker stop 命令:

$ sudo docker stop aofo 

Docker学习之路(四)守护式容器

也可以用容器ID只带容器名称:

$ sudo docker stop ddd958443007 

如果想快速停止容器,还可以用 docker kill 命令:

$ sudo docker kill aofo 

可以用 docker ps 命令产科当前运行的容器。也可以用 docker ps -n x ,该命令会显示最后x个容器,不论这些容器是运行还是停止的。

$ sudo docker ps -n 2 

Docker学习之路(四)守护式容器

深入容器

docker inspect 获取更多的容器信息:

$ sudo docker inspect aofo 

Docker学习之路(四)守护式容器

可以用 -f 或者 --format 标志来选定查看结果。

查看容器运行状态:

$ sudo docker inspect --format='{{ .State.Running }}' aofo 

Docker学习之路(四)守护式容器

查看容器IP地址:

docker@boot2docker:~$ sudo docker inspect --format='{{ .NetworkSettings.IPAddress }}' aofo 

我没有设置,所以返回空:

Docker学习之路(四)守护式容器

-f--format 标志支持完整的GO语言模板。用它进程查询时,可以重复利用GO语言米板的优势。

可以同时制定多个容器,并显示每个容器的结果:

$ sudo docker inspect --format='{{ .State.Running }}' aofo aoct 

Docker学习之路(四)守护式容器

除了查看容器,还可以浏览 /var/lob/docker 目录了解Docker的工作原理,该目录存放着Docker镜像、容器、容器配置。所有容器都保存在 /var/lib/docker/containers 目录下。

删除容器

运行中的容器无法删除,必须先停止。使用 docker rm

$ sudo docker rm 容器ID 

一次性删除所有容器:

$ sudo docker rm `docker ps -a -q` 

这不是常规命令,只是小技巧。 docker ps 列出所有现有的容器, -a 标志列出所有(all)容器, -q 返回容器ID。这样就得到了容器ID列表,并传给 docker rm 命令,从而达到删除所有容器的目的。

【本人的学习笔记,主要是对《我的第一本Docker书》、《Docker —— 从入门到实践》的学习记录,并结合其他各种资源的学习。】

正文到此结束
Loading...