这一节我们创建并使用我们的第一个容器,使用过程中随时可以借助 $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
$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 默认选项