Docker学习笔记(3)

创建守护式容器

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

启动守护式容器:

[root@yaoyantest1 ~]# docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done"
503ed13de6554c6c6fca64d49d9f542b1dc817b7a609e529bc128bfa929c3015
  • -d 参数,容器将放在后台运行
  • while循环,死循环,一直打印 hello world,直到容器或其进程停止
  • docker run 仅返回一个容器id,并不会附着到容器内的shell会话上
[root@yaoyantest1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
503ed13de655        ubuntu              "/bin/sh -c 'while..."   15 seconds ago      Up 15 seconds                           daemon_dave

容器内部都在干些什么

docker logs 命令获取容器的日志

[root@yaoyantest1 ~]# docker logs daemon_dave
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
Hello world
.......
  • -f 参数来追踪监视日志,类似 tail -f
docker logs -f daemon_dave

与tail -f 类似,使用ctrl+C 退出日志追踪监视

  • –tail 跟踪容器日志片段
docker logs --tail 10 daemon_dave   # 日志最后10行
docker logs --tail 0 -f daemon_dave    # 追踪新产生的日志,不读之前的日志
  • -t 参数,为每条日志加上时间戳
docker logs -ft daemon_dave

与–tail 结合使用

[root@yaoyantest1 ~]# docker logs --tail 0 -ft daemon_dave
2017-06-08T13:56:28.576865223Z Hello world
2017-06-08T13:56:29.578051296Z Hello world
2017-06-08T13:56:30.579236051Z Hello world
2017-06-08T13:56:31.580359850Z Hello world
2017-06-08T13:56:32.581514038Z Hello world
2017-06-08T13:56:33.582705786Z Hello world
2017-06-08T13:56:34.583883830Z Hello world
2017-06-08T13:56:35.585212117Z Hello world
2017-06-08T13:56:36.586420836Z Hello world
2017-06-08T13:56:37.587780398Z Hello world
2017-06-08T13:56:38.589040335Z Hello world
2017-06-08T13:56:39.590235300Z Hello world
2017-06-08T13:56:40.591573942Z Hello world
^C
[root@yaoyantest1 ~]#

日志驱动

Docker 1.6开始,可以控制Docker守护进程和容器所用的日志驱动: 使用 --log-driver 选项实现

选项有好几个:

  • 默认选项 json-file,之前的docker logs 命令默认就是使用json-file驱动
  • syslog:该选项将禁用docker logs命令,并且将所有容器的日志输出重定向到Syslog,可以在启动Docker守护进程时指定,也可以通过docker run对个别容器指定。
  • none: 这个选项将禁用所有容器日志,docker logs 命令也被禁用

新日志驱动随着版本升级会不断增加,1.8中增加了新的日志驱动

[root@yaoyantest1 ~]# docker run --log-driver="syslog" --name daemon_dwayne -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
110c383147cc05240a8986015923e1543ee16a3450404c5344419f04537fcd18

以上使用了syslog日志驱动,日志写入了主机的/var/log/messages中

[root@yaoyantest1 ~]# tail -f /var/log/messages | grep hello
Jun  8 22:17:50 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:17:51 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:17:52 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:17:53 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:17:54 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:17:55 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:17:56 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:17:57 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:17:58 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:17:59 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:18:00 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:18:01 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:18:02 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:18:03 yaoyantest1 110c383147cc[14782]: hello world
Jun  8 22:18:04 yaoyantest1 110c383147cc[14782]: hello world
^C
[root@yaoyantest1 ~]#

<学习用书《第一本Docker书》James Turnbull>