【Docker 那些事儿】如何安全地进入到容器内部

      最后更新:2022-06-13 04:31:12 手机定位技术交流文章

      在这里插入图片描述

      文章目录

      • ? 前言
      • 1. 容器运行
        • ? 自动重启的容器
        • ?有自定义名称的容器
        • ? 开启端口的容器
        • ?与主机共享容器目录
      • 2. 进入容器
        • 2.3货柜的条件
          • ? 运行状态
          • ? 暂停状态
          • ? 终止状态
        • 2.2.多克连接及多克输出
          • ? docker attach
          • ? docker exec

      在这里插入图片描述

      ? 前言

      镜子是构造容器的蓝图,多克使用镜子作为构造容器的模板。

      容器是以镜子为基础建造,并且也以镜子为基础运行,容器取决于镜子。

      本文将详细说明容器的操作及相关内容。
      在这里插入图片描述

      1. 容器运行

      在多克网站上,你可以查询有关多克的资料和帮助手册,但内容是英文,这可能会给小白页带来一些麻烦。而且访问多克的官方网站非常缓慢因此,这里为多克族华人提供了一个建议。

      这是一个中国多克数据库,它包含许多有组织的技术文档。中国多克社区的正式介绍是:系统地组织多克官方教程和手册,报告多克相关动态和进展,在网络上集成其他社区相关资源。

      当然,用户也可以上传他们在学习过程中组织的技术文件并与其他人分享它们。

      使用端子运行命令运行容器,命令的底部实际上是多克创建和多克启动的组合。运行容器需要首先创建一个基于镜子的容器,然后启动容器,完成容器的操作,如图所示?
      在这里插入图片描述
      例如,根据镜子启动一个新的容器并打印月历。例如代码如下:
      在这里插入图片描述
      从上面的例子中,你可以看到日历已经打印出来,但是你不能看到容器是否运行。

      ps命令用于在Linux系统中查看进程,而容器用于在Docker上查看容器,因为运行的容器也是进程。例如代码如下:在这里插入图片描述
      正如上面的例子所示,一个Docker容器基于 CentOS镜子运行,并发送 cal命令(打印当前的月历),容器正常启动并执行 cal命令。

      此外,您还可以通过指定参数、代码如下启动bash交互终端:在这里插入图片描述
      上面的代码创建了一个交互的容器,并指定了一个假端子,允许用户通过命令行与容器进行交互.终端直接运行在主机上,主机通过虚拟终端将多克的指令发送到容器中,这个虚拟终端是假的终端,直接操作容器.

      当执行多克运行命令启动容器时,多克执行下列操作。

      (1)确定指定的镜子是否存在于本地,如果不存在,则从默认的Docker Hub公共仓库下载它。

      (2)使用镜子创建并启动多克运行容器。

      (三)分配一个文件系统,并上传读写层 outside the read-only layer。

      (4)从主机配置的网络桥接口连接到容器的虚拟接口。

      (5)从地址池向容器分配一个IP地址。

      (6)执行用户定义的命令。

      (7)执行后容器终止(端口停止)。

      此外,可以添加相应的参数到多克运行命令来实现不同的功能。

      运行容器并使用终端操作它。例如代码如下:
      在这里插入图片描述
      成功执行上述命令的先决条件是本地命令包含一个 CentOS镜子,其中-i指捕捉标准输入输出,-t指分配一个终端或控制面板。

      下面运行一个容器并为它设置环境变量。实例代码如下:
      在这里插入图片描述
      -e参数用于在创建容器时配置容器的环境变量。

      此时,一个容器已经成功创建,然后你可以查看其环境变量。
      在这里插入图片描述
      如上面的例子所示,key=100环境变量已成功设置。

      ? 自动重启的容器

      下面运行一个正常容器。示例代码如下:
      在这里插入图片描述
      在新创建的容器中,退出命令将退出容器,但容器也将停止运行。

      若要查看容器状态,请使用以下示例代码:
      在这里插入图片描述
      您可以看到容器的状态现在是“退出”,表明容器处于终止状态。

      运行下面添加参数的容器。示例代码如下:
      在这里插入图片描述
      在没有事故的情况下, 应该终止容器.

      然后验证容器的状态,示例代码如下:
      在这里插入图片描述
      从这个例子中可以看出,这个容器在此时不终止,而是运行,因为添加的-restart参数的容器在终止后自动重新启动。

      ?有自定义名称的容器

      下面运行一个包含自定义名称的容器。示例代码如下:
      在这里插入图片描述
      从这个例子中可以看出,在创建一个容器时,添加了-name参数来定义容器名称。

      ? 开启端口的容器

      下面是如何创建一个打开80个端口的容器:
      在这里插入图片描述
      参数初始化先由主机端口编号,然后由容器的端口编号,表明主机的80个端口被映射到容器的80个端口。

      你可以从这个例子中看到,容器正在运行,并且80个端口已经打开。

      使用曲线工具来验证容器端口的访问, 实例代码如下:
      在这里插入图片描述
      访问80个容器端口的返回值为200,表明用户可以正常访问容器端口。

      接下来,停止容器并再次进入容器端口。示例代码如下:
      在这里插入图片描述
      当再次访问容器端口时,连接被拒绝,表明以前的服务是由多克容器提供,仅通过主机端口向外部网络开放。

      ?与主机共享容器目录

      首先创建您需要在主机共享的目录和文件。例如代码如下:
      在这里插入图片描述
      不要在 /root/test/ directory.txt 和 b.txt 下创建两个文件,然后创建一个可以共享两个文件的容器,示例代码如下:
      在这里插入图片描述
      -v参数用于指定文件路径,-privileged参数用于添加用户操作权限。

      从这个例子中可以看到,目录和文件共享成功。

      2. 进入容器

      容器在主机内有三个状态,运行(上)、停(停)和退出(退出)。

      下面的三个容器状态是通过实例观察到的.

      2.3货柜的条件

      ? 运行状态

      运行一个名为test-nginx的Nginx容器,并将80 port的容器映射到80 port的主机上。
      在这里插入图片描述
      此时,容器已经创建和完成,并使用ps命令查看容器是否在运行。例如代码如下:
      在这里插入图片描述
      如上面的例子所示,容器状态现在运行。

      ? 暂停状态

      下面是将容器置于悬挂状态的命令,示例代码如下:
      在这里插入图片描述
      Docker pause(英语:Docker pause)是终止一个容器的命令,在上面的例子中,它停止了一个名为test-nginx的容器。

      然后通过命令查看容器是否成功停顿,示例代码如下:
      在这里插入图片描述
      如上面的例子所示,容器仍然运行,但它也悬挂。

      然后使用曲线工具测试容器的访问。示例代码如下:
      在这里插入图片描述
      访问测试发现该容器页面目前无法访问,但服务器没有拒绝连接,表明该容器的暂停基本上是该容器中的服务的暂停。

      下面使用docker unpause命令终止容器的暂停状态,示例代码如下:
      在这里插入图片描述
      此时,命令执行完毕,接着若要查看容器状态,请使用以下示例代码:
      在这里插入图片描述
      从上面的代码可以看出,悬挂状态已经终止,容器只处于运行状态。

      然后使用曲线工具来测试容器的访问。示例代码如下:
      在这里插入图片描述
      如上面的例子所示,该站点现在可以正常访问,说明容器中的服务正常运行。

      ? 终止状态

      当业务不再需要继续运行时,业务的容器必须通过命令终止。例如代码如下:
      在这里插入图片描述
      上面的例子使用端口停止命令终止容器 test-nginx,然后验证容器状态。
      在这里插入图片描述
      从上面的例子中可以看出,容器在此时终止,然后容器进行访问测试。例如代码如下:
      在这里插入图片描述
      从测试结果中可以看出,客户请求被拒绝,服务被关闭。

      使用端口启动命令唤醒终止的容器,如下面的示例代码所示:
      在这里插入图片描述
      实例使用端子启动命令唤醒一个端子状态的容器,然后查看容器的当前状态。实例代码如下:
      在这里插入图片描述
      如上面的例子所示,容器状态现在运行。接着对该容器进行访问测试,示例代码如下:
      在这里插入图片描述
      从访问测试结果可以看出,容器中的服务现在通常可以访问。

      2.2.多克连接及多克输出

      在企业中,操作工程师和开发工程师可能需要进入容器内。

      然而,不建议使用SSH(Secure Shell)登录容器,因为这样做违反了容器中只有一个进程的原则,并增加了被攻击的风险。

      建议使用下列两个Docker原始方法进入容器。

      ? docker attach

      端口附加命令允许您输入一个已经在容器中运行的虚拟输入设备,然后执行其他命令。

      下面说明如何使用 Docker 附加命令.

      为了创建任意的容器,这里是 CentOS的例子,示例代码如下:
      在这里插入图片描述
      此时, CentOS容器已经成功创建,然后端口附加命令和容器ID输入容器。示例代码如下:
      在这里插入图片描述
      在上面的例子中,不仅输入容器,而且对容器执行ls命令,说明容器现在可以直接在命令行操作。

      应注意,在离开容器时,直接从容器中使用退出命令或 Ctrl+d组合键退出容器,会导致容器终止。如果你想退出当前的容器,并且不终止容器,你可以使用 Ctrl+P+Q组合键退出终端。下面进行示例演示,示例代码如下:
      在这里插入图片描述
      如上面的例子所示,容器已经终止。 然后启动容器并输入容器,然后用 Ctrl+P+Q组合键退出。
      在这里插入图片描述
      上面的示例启动容器并使用 Ctrl+P+Q组合键退出容器,然后查看容器的当前状态。示例代码如下:
      在这里插入图片描述
      如上面的例子所示,容器正在运行,并未终止。

      多克附件还具有共享屏幕,当两个终端使用多克附件进入同一容器时,可以看到同时操作。 图所示:
      在这里插入图片描述

      ? docker exec

      下面是表中所示的exec参数的介绍。
      在这里插入图片描述
      Docker exec可以将命令发送到主机运行的容器中,实例代码如下:
      在这里插入图片描述
      上面的例子通过dockerexec命令将ls命令发送到容器,并将结果返回端口。

      创建一个新的容器,并使用命令行运行容器的虚拟终端。例如代码如下:
      在这里插入图片描述
      上述示例通过虚拟终端对容器进行一系列的操作。接着使用exit命令退出容器,并若要查看容器状态,请使用以下示例代码:
      在这里插入图片描述
      上面的例子使用退出命令去退出容器,但容器仍然运行。

      这说明,与docker exec和docker attach不同,在使用exec的容器中执行退出命令并不终止容器,而是只退出当前的bash端口。

      因此在工作时,建议您使用dockerexec命令进入容器,这样就不会发生操作错误。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/27233.html

          热门文章

          文章分类