Docker入门

目录Docker入门Docker基本指令查看Docker基本信息运行容器使用容器容器命名重新启动已经停止的容器附着到容器上创建守护式容器容器内部都在干什么查看容器内的进程容器内部运行进程停止守护式进程自动重启容器深入容器删除容器总结Docker入门上一节中,我们了解到了Docker的一些基本知识点,它的一些核心概念,Docker的使用安装等。此篇文章我们对Docker进行入门讲解Docker基本指...

Docker入门

目录

  • Docker入门
    • Docker 基本指令
      • 查看Docker 基本信息
      • 运行容器
      • 使用容器
      • 容器命名
      • 重新启动已经停止的容器
      • 附着到容器上
      • 创建守护式容器
      • 容器内部都在干什么
      • 查看容器内的进程
      • 容器内部运行进程
      • 停止守护式进程
      • 自动重启容器
      • 深入容器
      • 删除容器
    • 总结

Docker入门

上一节中,我们了解到了Docker 的一些基本知识点,它的一些核心概念,Docker的使用安装等。此篇文章我们对 Docker 进行入门讲解

Docker 基本指令

查看Docker 基本信息

首先,我们会查看Docker 是否能够正常运行

使用 docker info 查看 Docker 程序是否存在,功能是否正常

上面我们使用了 docker info 指令,该命令会返回所有容器和镜像的数量、Docker 使用的执行驱动和存储驱动,以及Docker 的基本配置

Docker 是基于客户端-服务器架构的。它有一个 Docker 程序,既能作为客户端,又能作为服务端。作为客户端时,docker 程序向 Docker 守护进程发送请求,然后再对返回的请求结果进行处理。

运行容器

现在,我们尝试启动第一个容器,我们可以使用docker run方法创建容器,docker run 提供了容器的创建到启动的过程。docker run 的执行流程如下图所示:

现在我们开始运行一条指令docker run -i -t ubuntu /bin/bash,-i 标志保证容器中的 STDIN 时开启的,尽管我们并没有附着到容器中。持久的标准输入时交互式shell 的“半边天“,-t 标志则是另外“半边天“,它告诉 Docker 为要创建的容器分配一个 tty 终端。这样,docker 才能提供一个交互式的 shell 。示例中的 ubuntu 是一个常备镜像,也被称为基础镜像,它由Docker 公司提供并保存在 Docker Hub Registry 上。

随后,Docker 在文件系统内部利用这个镜像创建了一个新的容器。该容器拥有自己的网络、IP地址,以及一个用来和宿主机通信的桥接网络接口。最后,我们告诉 Docker 在新容器内要运行什么命令,我们在容器中运用 /bin/bash 创建了一个 Bash Shell。

使用容器

现在,我们已经切换到了新的容器中

容器ID 是@18178c34cd5a,这是一个完整的 ubuntu 系统,下面我们就来研究一下这个系统,你可以使用

hostname获取主机名

你会发现主机名和 root 后面的字符串一致,也就是说root 后面其实跟的是主机ID。

我们再来看看 /etc/hosts 文件,如下所示

还可以查看容器中运行的进程,ps -aux用于查询容器中的进行进程

接下来我们要干什么?安装一个软件包?安装一下 vim 软件吧,使用apt-get update && apt-get install vim 进行安装。通过上述命令,我们可以在Ubuntu宿主机上使用 vim 口令和语法了。

当你想退出时,直接使用 exit 就退回宿主机的命令行了。

那么这个容器怎么样了?容器现在已经停止运行,只有在制定的/bin/bash 处于运行状态时,容器才会处于运行状态。一旦退出,容器也就停止了运行。

但是容器还是存在的,你可以使用 docker ps -a查看系统中的容器列表

默认情况下,使用 docker ps 能够列出所有正在运行的容器列表,使用 docker ps -a 列出系统出所有的容器列表包括正在运行的和已经停止的。

容器命名

Docker 会为我们创建的每个容器自动生成一个随机的名称。例如我们上面创建的 /bin/bash 的名称,如果想要指定名称,通过 --name 标志实现,例如sudo docker --name cxuan_container -i -t ubuntu /bin/bash

上述命令会为你创建一个 cxuan_container 的ubuntu 镜像,你可以使用 docker ps -a 来查看最近的一个镜像。

容器的名称必须是唯一的,而且有效的名称能够帮助我们理清楚上下级关系,所以明明很重要!!!

重新启动已经停止的容器

例如,我使用docker ps命令没有发现容器正在启动

但是你可以使用 docker start cxuan_container 启动指定的container。

重新使用 docker ps 查看活跃的docker 容器

也可以直接根据container id进行启动,我先用 docker ps -a 查看一下所有的container

比如我想启动containerId 为 18178c34cd5a 这个容器,就直接使用 docker start 18178c34cd5a,启动完成后会直接输出 containerId。

重新查询现在正在运行的 docker container ,发现两个都在运行了

附着到容器上

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

image-20190812221942603

也可以通过 docker attach containerId 的方式附着到会话上,如下所示

如果退出 shell 进程,容器也会随之停止运行

创建守护式容器

除了这些交互式运行的容器,我们也可以创建长期运行的容器。守护式容器没有交互式会话,非常适合运行应用程序和服务。大多数情况下我们需要以守护式来运行我们的容器。下面我们创建一个守护式容器

上面的示例中使用了 -d ,因此 Docker 会将容器放在后台进行。

我们还在容器要运行的命令行里使用了一个 while 循环,该循环会一致打印 hello world 直到容器或者进程停止运行。

容器内部都在干什么

上面的示例我们创建了一个 docker 的守护式进程,进程里面一直在使用 while 进行循环输出 hello world,为了探究容器内部都在做什么,我们使用docker logs 命令来获取容器的日志,如下

可以看到,其内部一直在做while 循环并输出 hello world,Docker 会输出最后几条日志并返回,我们可以使用 -f 参数来监控Docker 的日志,这与 tail -f 命令非常像

我们在日志的循环输出中加了几个空行,能让你直观的感受到我们正在监控 docker 日志的运行过程,你可以使用 controlc 来退出监控。

我们也可以跟踪日志的某一片段,例如,可以使用 docker logs --tail 10 daemon_dave获取日志的最后10行内容。另外,也可以使用 docker logs --tail 0 -f daemon_dave 命令来追踪某个容器的最新日志而不必读取整个日志文件

追踪最新日志:

其实可以看到,日志一直在循环输出,没有显示之前的日志信息。

为了让调试更加简单,我们可以使用 -t 来为每条日志加上时间戳,如下

查看容器内的进程

除了容器的日志,我们也可以查看容器内部运行的进程,为了做到这一点,我们使用docker top命令

执行命令后,我们看到容器内的所有进程,运行进程的用户,时间,执行指令

容器内部运行进程

在 Docker 1.3 之后,我们可以通过 docker exec 命令在容器内部额外启动新进程。可以在容器内部运行的进程有两种类型: 后台任务和交互式任务。后台任务在容器内部运行并且没有交互需求,而交互式任务保持在前台运行。对于需要在容器内部打开的 shell 任务,交互式任务还是很实用的,下面是一个后台任务的例子

这里的标志 -d 表示是一个后台进程。-d 标志之后,跟的是要在内部创建进程的名字以及要执行的命令,上面的例子会在daemon_dave 之后创建了一个新文件,文件名为/etc/new_configP_file ,通过 docker exec 后台命令,我们可以在正在运行的容器中进行维护、监控以及任务管理。

我们也可以在容器内部打开一个交互式任务,如下

因此你也可以很直观的看出交互式任务后台任务之间的区别:交互式任务可以进行运行环境的切换,而后台任务一旦运行无法切换,只能进行停止或者开始

上面的-t-i 标志为我们的执行创建了 TTY 并捕捉 STDIN。接着我们指定了要在容器内部运行的名称以及要执行的命令,在上面的例子中,这条命令会在 daemon_dave 容器中创建一个新的 bash 会话,有了这个会话,我们就可以在该容器中运行其他命令了。

tty(终端设备的统称):
在UNIX系统中,计算机显示器通常被称为控制台终端(Console)。它仿真了类型为Linux的一种终端(TERM=Linux),并且有一些设备特殊文件与之相关联:tty0、tty1、tty2等。这些文件赋予了linux同时处理多任务,多窗口切换的能力。

STDIN是标准输入,一般指键盘输入到缓冲区里的东西。

其他还有

stdout(Standardoutput)标准输出

stderr(Standarderror)标准错误

停止守护式进程

要停止守护式进程,需要执行 docker stop命令,例如
https://www.guoxiongfei.cn/cntech/24321.html

0