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

Aomine

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

开启已经停止的容器

可以start + 容器名

$ sudo docker start aoct

start + 容器ID

$ sudo docker start 614122c0aabb

clipboard.png

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

$ sudo docker ps

clipboard.png

还可以用docker restart重启。

附到容器上

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

$ sudo docker attach aoct

clipboard.png

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

也可以用容器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"

clipboard.png

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

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

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

$ sudo docker ps

clipboard.png

容器内部在干些什么

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

$ sudo docker logs aofo

clipboard.png

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

$ sudo docker logs -f aofo

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

查看容器内的进程

$ sudo docker top aofo

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

clipboard.png

在容器内部运行进程

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

后台任务例子:

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

clipboard.png

代码解释:
-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

clipboard.png

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

$ sudo docker stop ddd958443007

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

$ sudo docker kill aofo

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

$ sudo docker ps -n 2

clipboard.png

深入容器

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

$ sudo docker inspect aofo

clipboard.png

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

查看容器运行状态:

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

clipboard.png

查看容器IP地址:

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

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

clipboard.png

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

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

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

clipboard.png

除了查看容器,还可以浏览/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 —— 从入门到实践》的学习记录,并结合其他各种资源的学习。】

阅读 18k

喜欢web开发,初学阶段,希望未来能成为厉害的工程师~

2.2k 声望
101 粉丝
0 条评论

喜欢web开发,初学阶段,希望未来能成为厉害的工程师~

2.2k 声望
101 粉丝
宣传栏