在之前的文章中, 我们已经讲解了 Docker 的基本概念以及如何在各个平台下进行 Docker 的安装.
在接下来, 我们将继续讲解 Docker 容器的基本使用.
查看 Docker 服务是否正常
执行如下命令后, 我们可以看到 Docker 的一些基本信息, 包括容器, 镜像的数量, 执行与存储驱动以及 Docker 的基本配置等.
运行容器
接下来, 我们将会使用 docker run 命令来创建容器.
sudo docker run -i -t Ubuntu /bin/bash
让我们来分析一下这条简单的命令吧:
1. 首先, 我们给 Docker 执行的是 docker run 命令.
2. 此外, 我们指定了两个参数, 分别是 - i 和 - t.
-i 参数用设置容器中的 STDIN 是开启的.
-t 参数表示为创建的容器分配一个伪 tty 终端.
Ps: 通常 - i 和 - t 两个参数会联合使用, 也可以写作 - it.
3. 接下来, 我们可以看到命令行中输入了 Ubuntu.
它是在告诉 Docker 基于哪个镜像来创建容器.
在我们指定某个镜像后, Docker 首先会检查本地是否存在该镜像, 如果没有找到该镜像, 那么首先会连接到官方维护的 Docker Hub Registry 进行查找并下载.
4. 最后的 / bin/bash 则指定了该容器需要运行的命令.
命令完成后, 我们将会看到我们进行了该容器内的 shell:
root@41225bc38698:/#
总结一下, 该命令最基本的运行格式如下:
sudo docker run -i -t 镜像名称 命令代码
使用容器
在执行完刚才的命令后, 我们已经以 root 用户进入到了新容器中. 该容器可以认为是一个完整的 Ubuntu 系统, 可以正常使用. 例如, 我们可以试下如下命令:
root@41225bc38698:/# hostname# 41225bc38698root@41225bc38698:/# cat /etc/hosts# 172.17.0.8 41225bc38698# 127.0.0.1 localhost# ::1 localhost ip6-localhost ip6-loopback# fe00::0 ip6-localnet# ff00::0 ip6-mcastprefix# ff02::1 ip6-allnodes# ff02::2 ip6-allrouters
此外, 我们还可以安装一个软件包, 以 VIM 为例:
apt-get update && apt-get install VIM
执行如下命令后, 我们可以成功的安装完成 VIM. 当我们使用完成该容器后, 可以使用 exit 来退出容器.
此时, 容器会停止命令, 同时我们回到了宿主机的命令行提示符. Ps: 此时, 容器仅仅是停止运行, 但是并没有被销毁. 我们可以使用如下命令查看当前系统中存在的容器:
docker ps -a
其中, 默认 docker ps 命令会查询到所有正在运行的容器, 添加参数 - a 后, 则无论是否在运行中, 都会被查找到.
从上表可以看出, 我们可以通过 docker ps 命令可以查询到容器的很多有用信息, 包括: ID, 镜像, 命令, 创建时间, 退出状态, 端口以及容器名称等
容器命名
我们已经提到了每个容器都有其对应的一个名称. 默认情况下, 如果没有指定容器名称, 系统将会自动随机生成一个唯一的名称. 当然, 我们也可以直接来指定容器的名称, 此时, 使用 --name 容器名来实现.
例如:
sudo docker run --name nianshi_test -i -t Ubuntu /bin/bash
此时, 我们将会创建一个容器名称为 nianshi_test 的容器. 一个合法的容器名称是只能由字母, 数字, 下划线, 圆点和横线组成的. Ps:
容器名称必须是唯一的, 如果我们试图创建两个同名的容器时将会失败. 容器名称是一个可以替代容器 id 的有利工具, 合理利用容器名称可以大幅提高工作效率.
启动已停止的容器
当一个容器已经停止后, 我们可以使用 docker start 命令来重新启动该容器.
# 根据容器名称启动 sudo docker start nianshi_test# 根据容器 id 启动 sudo docker start 41225bc38698
进行容器内部命令行
在我们重新启动容器后, 将会继续沿用之前 docker run 运行时的参数来运行.
但是, 此时我们并没有直接进入到交互式 shell 的环境. 需要再次执行如下命令才能进行到交互式 shell 的环境:
sudo docker attach nianshi_test
ps: 有时在执行完该命令后, 需要再次敲击一个回车才能看到交互式 shell.
创建守护式容器
在之前的内容中, 我们主要讲解了如何创建一个交互式的环境. 还有更多的时候, 我们可以期望是创建一个长期运行的容器. 对于此类容器, 我们称之为守护式容器, 它们没有交互式会话, 非常适合应用程序和服务运行. 以下面的代码为例:
sudo docker run --name nianshi_test1 -d Ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"# 066762ca46506b0ed27aaeb266da6b662e38111604150a3448dc2adae7449b31
其中, 我们可以看到在 docker run 命令中, 我们使用了 - d 参数, 表示将程序放在后台执行.
而执行脚本的本身含义则表示每隔 1s 打印一个 hello world, 直到容器停止.
查看容器日志
那么我们如何看这些守护式容器的日志呢? Docker 本身提供了 docker logs 用于日志查询.
sudo docker logs nianshi_test1
该命令会输出最后几条日志并返回. 更为推荐的一种方式是添加 - f 参数, 用于监控容器的日志, 功能类似于 tail -f.
sudo docker logs -f nianshi_test1
此外, 我们还可以使用 - t - 参数来添加时间戳.
sudo docker logs -f -t nianshi_test1# 2018-01-23T03:56:40.821800852Z hello world# 2018-01-23T03:56:41.822581880Z hello world
查看容器内进程
除了查看容器的日志外, 我们还可以查看容器的进程信息. docker top 是用于查询容器内进行相关的信息.
docker top nianshi_test1
在容器内运行进程
在 Docker1.3 版本以后, 我们可以通过 docker exec 命令在容器内额外启动新进程.
假设我们现在已经启动了一个容器, 名称为 nianshi_test1, 现在我们可以同时在利用该容器在启动别的进程:
sudo docker exec -it nianshi_test1 /bin/bash
停止守护式容器
如果想要停止一个守护式容器, 那么我们可以使用 docker stop 命令来完成.
示例如下:
sudo docker stop nianshi_test1
自动重启容器
有时, 我们期望由于某些意外错误而造成容器停止运行时, 可以自动重启服务. 那么我们就需要借助 --restart 参数来实现了.
Ps: 默认情况下, Docker 不会自动重启容器. 示例程序:
# 任务情况下都自动重启 sudo docker run --restart=always --name nianshi_test2 -d Ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"# 退出代码不为 0 时, 自动重启; 且最多重启 5 次 sudo docker run --restart=on-failure:5 --name nianshi_test3 -d Ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
查看容器详细信息
有时, 我们希望查看容器的一些详细信息时, 可以使用 docker inspect 来获取.
示例:
sudo docker inspect nianshi_test1# [{# "Id": "41225bc38698733b6c1e0b2d3e98ce4b46a41406f4904917348080425bd96716",# "Created": "2018-01-23T02:49:43.318333661Z",# "Path": "/bin/bash",# "Args": [],# "State": {# "Running" : true,# "Paused": false,# "Restarting": false,# "OOMKilled": true,# "Dead": false,# "Pid": 23357,# "ExitCode": 0,# "Error": "",#"StartedAt":"2018-01-23T03:31:07.463860469Z",#"FinishedAt":"2018-01-23T03:02:13.679114188Z"# },#"Image":"03ae2aa34a62c4ba72924b53d82cad6d5f84e106aa375ac2cabb8ba1047a3460",# ...
删除容器
当一个容器已经使用完成且后续不会继续使用时, 我们可以使用 docker rm 命令来删除它们.
示例:
sudo docker rm nianshi_test
Ps: 运行中的容器是无法直接删除的, 需要先停止容器运行后才能将其删除.
来源: http://www.bubuko.com/infodetail-3003594.html