2017-07-05 22:10

(三)Docker 快速入门 - 第一个容器

这一节我们创建并使用我们的第一个容器,使用过程中随时可以借助 $docker help 或 $man docker-run 的帮助。

创建容器

$sudo docker run -i -t ubuntu /bin/bash

  • --name 为容器指定一个名称,默认Docker会随机生成一个。命名规则[a-zA-Zoo0-9_.-];

  • -i 开启STDIN;

  • -t 分配一个伪tty终端;

  • ubuntu 即是创建容器的基础镜像,保存在Docker Hub Registry上;

  • /bin/bash 设置新创建的容器需要运行的命令。

这样我们就创建好了一个容器,创建并启动成功之后,实际上我们已经在容器中了,我们通过一些简单的命令了解一下容器的基本情况:

$hostname 查看容器的主机名,即该容器的ID、UUID。    $cat /etc/hosts 中可以看到容器的网络配置。
$ip a 查看容器接口。
$ps -aux 查看容器的进程。
$apt-get update && apt-get install vim 在容器中安装软件。
$exit 退出容器,退出之后bash命令也就结束了,容器也随之停止运行!
长期运行的容器

在上面的容器中,当我们 exit 退出时,容器也随之消亡。我们可以通过 -d 将容器放到后台,同时运行一个命令循环打印hello world,来创建一个长期运行的容器:

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

自动重启容器

$sudo docker run --restart=always --name leon_d3 ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

    =always 无论容器退出代码是什么,都会重启;

    =on-failure 容器退出代码为非0时,才会重启;

    =on-failure:5 最多重启5次;

端口绑定

使用已经构建了nginx的镜像创建容器,并开启容器的80端口几几种方法,默认情况下,80会映射到宿主的32768~61000上,同样可以绑定到宿主的指定端口上:

$sudo docker run -d -p 80 --name leonweb xxx/web nginx -g "daemon off;"
$sudo docker run -d -p 8080:80 --name leonweb xxx/leon_web nginx -g "daemon off;"
$sudo docker run -d -p 127.0.0.1:8080:80 --name leonweb xxx/web nginx -g "daemon off;"
$sudo docker run -d -p 127.0.0.1::80 --name leonweb xxx/web nginx -g "daemon off;"
# 使用 -P 可以自动对外绑定公开 Dockerfile(见下一章节) 中EXPOSE指令公开的所有端口:
$sudo docker run -d -P --name leon_web xxx/leon_web nginx -g "daemon off;"

# 现在可以查看端口绑定情况:
$ docker inspect * docker port
查看容器

在指定容器的时候可以使用唯一标识,容器的唯一标识有:短UUID、长UUID和名称。

  • $docker ps -a  查看所有容器列表

  • $docker ps  查看正在运行的容器列表

  • $sudo docker top leon_daemon 查看进程

  • $sudo docker stats leon_daemon 查看统计信息

  • $sudo docker inspect leon_daemon 查看容器详细信息

  • $sudo docker inspect --format='{{ .State.Running }}' leon_daemon 筛选信息

  • $sudo docker inspect --format='{{ .NetworkSettings.IPAddress }}' leon_daemon 筛选信息

容器管理
  • $docker start/restart/stop/kill leon_container 启动关闭容器

  • $docker rm leon_container 删除容器

容器附着

容器重启的时候,会沿用 docker run 命令时指定的参数来运行,因此对于上面的容器会运行一个交互式会话shell。我们可以使用docker attach命令,重新附着到该容器会话上。

$sudo docker attach leon_container  #如果没有任何提示,按下回车即可进入bash

docker exec

$sudo docker exec 在容器内启动新进程(后台任务或交互式任务)

$sudo docker exec -d leon_daemon touch /etc/new-file 

    -d 后台进程

    -u 指定用户

    -t -i 交互式任务,创建TTY并捕捉STDIN,如下:

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

除了使用刚刚提到的 attach 附着,还可以通过 exec 创建一个交互shell(如果容器启动时没有指定 bash,我们是没办法 attach 进去的)。

查看容器日志

对于刚刚创建的容器,我们可以通过 logs 查看其内部情况。

  • $sudo docker logs leon_daemon 查看最后几条日志;

  • $sudo docker logs -f leon_daemon 实时监控Docker日志;

  • $docker logs --tail 10 leon_daemon 最后10条日志;

  • $docker logs --tail 0 -f leon_daemon 跟踪最新日志而非全部;

  • $docker logs -ft leon_daemon 显示时间戳;

控制日志驱动

可以在Docker启动的时候使用 syslog 将所有日志都输出到 Syslog,也可以通过 docker run 进行日志重定向。

$sudo docker run --log-driver="syslog" --name leon_d2 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

日志类型:

    syslog 输出到Syslog,则docker logs将不输出任何东西。

    none   禁用容器中的日志,同时docker logs也会被禁用。

    json-file 默认选项