除了交互式的容器(interactive container),我们也可以创建长期运行的容器。守护式容器(daemonized container)没有交互式会话,非常适合运行应用程序和服务。大多数时候我们都需要以守护式来运行我们的容器。
创建守护式容器
# docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" 64b5c862a23cb5b15e489fbd51dab5cfc958ca447db936732abb0f01ca2282b0
- -d 参数,docker会将容器放到后台运行,并返回容器ID
我们还在容器要运行的命令里使用了一个while循环,该循环会一直打印hello world,直到容器或其进程停止运行。通过组合使用上面的这些参数,可以发现docker run命令并没有像上一个容器一样将主机的控制台附着到新的shell会话上,而是仅仅返回了一个容器ID而已,我们还是在宿主机的命令行之中。通过docker ps 命令可以看到一个正在运行的容器。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 64b5c862a23c ubuntu "/bin/sh -c 'while t 19 minutes ago Up 19 minutes daemon_dave
同时我们也可以通过docker logs命令来获取容器的日志,探究该容器内部都在干什么。
# docker logs daemon_dave hello world hello world hello world ...
通过 -f 参数可以跟踪守护式容器的日志,功能类似与tail -f命令,通过Ctrl+c退出日志跟踪。
# docker logs -f daemon_dave hello world hello world hello world ...
通过--tail 10 可以获取日志最后10行的内容,另外也可以通过--tail 0 -f 命令来跟踪某个容器的最新日志而不必读取整个日志文件。
# docker logs --tail 10 daemon_dave hello world hello world hello world hello world hello world hello world hello world hello world hello world hello world # docker logs --tail 0 -f daemon_dave hello world hello world hello world hello world hello world