查看 Docker 信息
查看 Docker 程序是否存在,功能是否正常,可使用sudo docker info
命令。
该命令会返回所有容器和镜像数量以及情况,Docker 使用的执行驱动和存储驱动,以及 Docker 的基本配置。
第一个 Docker 程序
docker run
命令提供 Docker 容器的创建到启动功能,使用该命令创建 ubuntu 容器:
sudo docker run -i -t ubuntu /bin/bash
通过该命令可以直接拉取最新的 ubuntu 镜像,并启动该容器。其中-i
保证容器中 STDIN 是开启的,-t
则为要创建的容器分配一个伪 tty 终端。这样新创建的容器才能提供交互式 shell。
执行该命令后,首先 Docker 会检查本地是否存在 ubuntu 镜像,如果没有就在 Docker 官方维护仓库(Docker Hub Registry)中查看是否有该镜像。一旦找到该镜像则下载保存到宿主机中。然后使用该镜像创建一个新容器,该容器拥有自己的网络、IP地址以及和宿主机通信的桥接网络接口。最后在容器中运行/bin/bash
命令启动 Bash shell。
上述命令如果执行成功后,就进入到了 ubuntu 容器中,此时可以做任何在 ubuntu 系统中可做的事情。通过hostname
获取主机名; 通过cat /etc/hosts
可以查看 hosts 文件; 通过ps -aux
检查容器进程; 并且可以通过apt-get install
安装软件。
当执行exit
命令后,容器停止运行,并返回宿主机命令行中。因为只有在指定的/bin/bash
命令处于运行状态时,容器才会相应的处于运行状态; 一旦退出/bin/bash
,容器也停止运行。此时可通过docker ps -a
查看系统中容器列表,包括已停止,如果没有-a
标志则查看运行中容器。
ps:
docker ps
命令中指定-l
标志表示列出最后一个运行的容器,无论正在运行还是已停止。
容器命名
Docker 会为创建的每个容器自动生成一个随机的名字,如果想指定名称,可以用--name
标志实现。合法容器名包含字符: a-z
、A-Z
、0-9
、_
、.
、-
。
sudo docker run --name bob_container -i -t ubuntu /bin/bash
容器命名必须是唯一的,如果创建重名容器,该命令将会失败。
启动停止容器
# 通过容器名启动
sudo docker start bob_container
# 通过容器ID启动
sudo docker start <container_id>
# 停止容器
sudo docker stop bob_container
# 重启容器
sudo docker restart bob_container
附着容器
重新启动容器时,需要使用docker attach
命令附着到原本容器会话中。
# 通过容器名
sudo docker attach bob_container
# 通过容器ID
sudo docker attach <container_id>
创建守护式进程
使用-d
参数将容器放到后台运行。
sudo docker run --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
获取容器日志
通过 docker logs
命令获取容器日志。
# 打印最后几条日志
sudo docker logs <contain_names>
# 实时监控日志
sudo docker logs -f <contain_names>
# 加入时间戳
sudo docker logs -ft <contain_names>
# 跟踪容器日志某一片段
## 获取日志最后10行内容
sudo docker logs --tail 10 <contain_names>
## 跟踪容器最新日志
sudo docker logs --tail 0 -f <contain_names>
通过--log-driver
设置Docker守护进程和容器所用的日志驱动,默认为json-file
。其他可用选项还有syslog
,该选项禁用docker logs
命令,并将所有日志输出重定向到 Syslog,在centos宿主机中可在/var/log/messages
中查看。容器级别启动 Syslog 命令如下:
sudo docker run --log-driver="syslog" --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
--log-driver
还有一个可用选项为none
,该选项禁用所有容器中日志,导致docker logs
命令也会被禁用。
查看容器内进程
通过docker top
命令可查看容器中运行的进程。
sudo docker top daemon_dave
Docker 统计信息
docker 1.5.0中引入docker stats
命令,该命令可查看一个或多个容器的统计信息,包括CPU、内存、网络I/O及存储I/O的性能和指标。
sudo docker stats daemon_dave
容器内运行进程
docker exec
命令可以在容器内额外启动新进程,可以在容器内运行的进程有两种类型:后台任务和交互式任务。后台任务在容器内运行且没有交互需求,而交互式任务则保持在前台运行。
在容器中运行后台任务命令如下,-d
标志表明运行一个后台程序,后面指定所在容器以及命令。该命令为创建一个/etc/new_config_file
空文件。
sudo docker exec -d daemon_dave touch /etc/new_config_file
在容器内运行交互式命令如下,-t
和-i
标志为执行进程创建 TTY 终端并捕捉 STDIN。
sudo docker exec -t -i daemon_dave /bin/bash
自动重启容器
由于某种错误导致容器停止运行,可以通过--restart
标志自动重启容器。--restart
会检查容器的退出代码,并据此来决定是否要重启容器,如果无该标志默认不重启。可以将该标志设置为always
标志无论退出代码是什么,都会重启该容器;也可以设置为on-failure
只有当退出代码为非零时,才会自动重启,on-failure
还可以设置可选重启次数,例如重启5次失败后放弃重启--restart=on-failure:5
。
sudo docker run --restart=always --name daemon_dave -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
获取容器信息
除了通过docker ps
获取容器信息,还可以使用docker inspect
获取更多容器信息。docker inspect
命令会对容器进行详细检查,并返回其配置信息,包括名称、命令、网络以及其他有用数据。可以用-f
或--format
标志来选定查看结果。命令如下
sudo docker inspect daemon_dave
# 返回容器运行状态
sudo docker inspect --format='{{ .State.Running }}' daemon_dave
删除容器
# 删除容器
sudo docker rm <container_id>
# 删除所有容器
sudo docker rm `sudo docker ps -a -q`
其中-q
标志代表只需要返回容器ID不需要返回容器其他信息。