除了交互式的容器(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
--tail命令

相关文章: