返回顶部
首页 > 资讯 > 服务器 >Docker如何安全地进入到容器内部
  • 178
分享到

Docker如何安全地进入到容器内部

2024-04-02 19:04:59 178人浏览 安东尼
摘要

目录? 前言1. 容器运行? 自动重启的容器? 自定义名称的容器? 开启端口的容器? 与宿主机共享目录的容器2. 进入容器2.1 容器的三种状态2.2 Docker attach与d

? 前言

镜像是构建容器的蓝图,Docker 以镜像为模板,构建出容器。

容器在镜像的基础上被构建,也在镜像的基础上运行,容器依赖于镜像。

本文将对 容器的运行 及相关内容进行详细讲解。

在这里插入图片描述

1. 容器运行

Docker 官方网站可以查询与 Docker 相关的资料以及帮助手册,但是内容都是英文的,可能会对一些小白造成困扰。(而且,访问 Docker 官方网站特别缓慢 ),所以这里向大家推荐 Docker 中文社区。

这是一个中文的 Docker 资料库,其中有很多整理好的技术文档,Docker 中文社区的官方介绍是:系统整理 Docker 官方的教程和手册、报道 Docker 相关动态和进展、整合网络上其他社区相关资源。

当然用户也可以将自己在学习过程中整理的技术文档上传与大家分享。

使用 docker run 命令可以运行容器,该命令底层其实是 docker createdocker start 两条命令的结合体,运行容器需要先基于镜像创建一个容器,然后启动容器,完成一个容器的运行,如图所示?

在这里插入图片描述

例如,基于镜像启动一个新容器,并打印当月的日历,示例代码如下:

在这里插入图片描述

从以上示例中可以看到日历已经被打印出来,但无法看到容器是否运行。

ps 命令在 Linux 系统中被用来查看进程,在 Docker 中被用来查看容器,因为运行中的容器也是一个进程,示例代码如下:

在这里插入图片描述

从以上示例中可以看到,一个 Docker 容器以 CentOS 镜像为基础运行,并传了一个 cal(打印当前月份日历)命令,容器正常启动并执行了 cal 命令。

除此之外,还可以通过指定参数,启动一个bash交互终端,代码如下:

上述代码创建了一个交互式的容器,并分配了一个伪终端,使用户可以通过命令行与容器进行交互。终端对宿主机进行直接操作,宿主机通过一个虚拟终端将对 Docker 的指令传输给容器,这个虚拟终端就是伪终端,对容器进行直接操作。

执行 docker run 命令启动容器时,Docker 会进行如下操作。

(1)检测本地是否存在指定的镜像,不存在则从默认的 Docker Hub 公有仓库下载。

(2)使用镜像创建(docker create)并启动(docker run)容器。

(3)分配一个文件系统,并在只读层外面挂载一个可读可写层。

(4)从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去。

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

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

(7)执行之后容器被终止(docker stop)。

另外,在 docker run 命令中可以添加相应参数,实现不同的功能。

下面运行一个容器,并使用终端对其进行操作,示例代码如下:

以上命令执行成功的前提是本地含有 CentOS 镜像。其中,-i 表示捕获标准输入输出,-t 表示分配一个终端或控制台。

下面运行一个容器,并为其设置环境变量,示例代码如下:

其中,-e 参数是在创建容器时为容器配置环境变量。

此时已经成功创建了一个容器,接着查看它的环境变量,示例代码如下:

从以上示例中可以看到,key=1000 的环境变量已经设置成功。

? 自动重启的容器

下面运行一个正常的容器,示例代码如下:


在新创建的容器中,使用 exit 命令即可退出容器,但容器也将停止运行。

查看容器状态,示例代码如下:

可以看到,容器此时的状态为 “Exited”,说明容器处于终止状态。

下面运行一个添加参数的容器,示例代码如下:

不出意外的话,此时容器应该是终止状态。

接着,验证容器的状态,示例代码如下:

从示例中可以看到,容器此时不是终止状态,而是运行状态。这是由于添加了 –restart 参数的容器被终止后自动重启。

? 自定义名称的容器

下面运行一个自定义名称的容器,示例代码如下:

从示例中可以看到,创建容器时添加了 -name 参数来定义容器名称。创建之后容器的名字就是指定的 “test”

? 开启端口的容器

下面创建一个开启 80 端口的容器,示例代码如下:

参数冒号之前是宿主机端口号,冒号之后是容器的端口号,表示宿主机的 80 端口映射到容器的 80 端口上。

从示例中可以看到,容器正在运行,并且可以看到开启了 80 端口。

为了验证,使用 curl 工具访问容器端口,示例代码如下:

访问容器 80 端口的返回值为 200,说明容器端口能够被用户正常访问。

接下来,将容器停止,并再次访问容器端口,示例代码如下:

再次访问容器端口时,连接被拒绝,说明先前的服务由是 Docker 容器来提供的,只是通过宿主机的端口向外网开放。

? 与宿主机共享目录的容器

首先在宿主机上创建需要共享的目录与文件,示例代码如下:

已经在 /root/test/ 目录下别创建了 a.txtb.txt 两个文件,接着创建一个可以共享这两个文件的容器,示例代码如下:

-v 参数用来指定文件路径,–privileged 参数用来给用户添加操作权限。

从示例中可以看到,目录与文件共享成功。

2. 进入容器

容器在宿主机中共有三种状态,分别为运行(Up)状态、暂停(Paused)状态与终止(Exited)状态。

下面通过示例来观察容器的三种状态。

2.1 容器的三种状态

? 运行状态

运行一个名为 test-nginxNginx 容器,并将容器 80 端口映射到宿主机 80 端口,示例代码如下:

这时,容器已经创建完成,通过 ps 命令查看容器是否为运行状态,示例代码如下:

从以上示例中可以看出,此时容器状态为运行状态。

? 暂停状态

下面通过命令使容器进入暂停状态,示例代码如下:

docker pause 是暂停容器的命令,上述示例中,暂停了名为 test-nginx 的容器。

接着通过命令查看容器是否成功暂停,示例代码如下:

从以上示例中可以看到,容器仍是运行状态,但同时也是暂停状态。

接着通过 curl 工具对该容器进行访问测试,示例代码如下:

通过访问测试发现,此时无法访问到容器网页,但是服务器没有拒绝连接,说明暂停容器的本质是暂停容器中的服务。

下面使用 docker unpause 命令使暂停状态的容器终止暂停状态,示例代码如下:

此时,命令执行完毕,接着查看容器状态,示例代码如下:

从以上代码中可以看到,暂停状态已经被终止,容器只处于运行状态。

接着用 curl 工具对容器进行访问测试,示例代码如下:

从以上示例中可以看到,此时网站已经可以正常访问,说明容器中的服务正常运行。

? 终止状态

当不再需要某一个业务继续运行时,就要通过命令使该业务的容器终止,示例代码如下:

以上示例使用 docker stop 命令终止了容器 test-nginx,接着验证容器状态,示例代码如下:

从以上示例中可以看出,此时容器为终止状态,接着对容器进行访问测试,示例代码如下:

从测试结果中可以看出,客户端请求被拒绝,服务已关闭。与暂停状态的容器不同是,终止状态的容器会给客户端发送拒绝的回应。

下面使用 docker start 命令将终止状态的容器唤醒,示例代码如下:

示例中使用 docker start 命令对处于终止状态的容器进行了唤醒,接着查看容器此刻状态,示例代码如下:

从以上示例中可以看出,此时容器状态为运行状态。接着对该容器进行访问测试,示例代码如下:

通过访问测试结果可以看出,此时容器中的服务已经可以正常访问。

2.2 docker attach与docker exec

在企业中,运维工程师与开发工程师都可能会有进入容器内部的需求。

但是不建议使用SSHSecure Shell)登录容器,因为这违背了一个容器里只有一个进程的原则,同时增加了被攻击的风险。

建议使用以下两种 Docker 原生方式进入容器。

? docker attach

通过 docker attach 命令可以进入到一个已经在运行容器的虚拟输入设备,然后执行其他命令。

下面演示 docker attach 命令的使用方式。

创建任意一个容器,这里以 CentOS 为例,示例代码如下:

此时 CentOS 容器已经创建成功,接着使用 docker attach 命令与容器 ID 号进入容器中,示例代码如下:

在以上示例中,不仅进入了容器,还对容器执行了 ls 命令,说明此时已经可以在命令行直接对容器进行操作。

在退出容器时需要注意的是,直接从容器中使用 exit 命令或者 Ctrl+d 组合键退出容器,会导致容器终止。如果想要退出当前容器,并且不终止容器,可以使用 Ctrl+P+Q 组合键退出终端。下面进行示例演示,示例代码如下:

从以上示例中可以看到,容器已经被终止。接着将容器启动并进入容器,再使用 Ctrl+P+Q 组合键退出,示例代码如下:

上述示例启动了容器并使用 Ctrl+P+Q 组合键退出了容器,接着查看当前容器状态,示例代码如下:

上述示例中可以看到,容器处于运行状态,并没有被终止。

docker attach 还有有共享屏幕的功能,两个终端同时使用 docker attach 进入同一个容器时可以看到同步操作。如图所示:

? docker exec

下面对 exec 的参数进行介绍,如表所示。

docker exec 可以在宿主机上向运行的容器传输命令,示例代码如下:

以上示例通过 docker exec 命令向容器发送 ls 命令,并将结果回显至终端。

下面创建一个新容器,并为容器启动一个虚拟终端,使用命令行对容器进行操作,示例代码如下:

上述示例通过虚拟终端对容器进行一系列的操作。接着使用 exit 命令退出容器,并查看容器状态,示例代码如下:

以上示例使用 exit 命令退出了容器,但容器仍在运行状态。

这说明 docker execdocker attach 不同,在使用 exec 进入的容器中执行 exit 命令不会终止容器,只会退出当前 bash 终端。

所以在工作中,建议大家使用 docker exec 命令进入容器,这样不容易出现操作失误。

到此这篇关于Docker如何安全地进入到容器内部的文章就介绍到这了,更多相关Docker 进入容器内部内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Docker如何安全地进入到容器内部

本文链接: https://lsjlt.com/news/151332.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Docker如何安全地进入到容器内部
    目录 前言1. 容器运行 自动重启的容器 自定义名称的容器 开启端口的容器 与宿主机共享目录的容器2. 进入容器2.1 容器的三种状态2.2 docker attach与docker...
    99+
    2024-04-02
  • docker如何进入mysql容器
    要进入MySQL容器,可以使用以下命令: docker exec -it <container_id> bash 其中...
    99+
    2024-05-07
    mysql docker
  • Docker如何安全地停止和删除容器
    目录 前言1. 停止和删除容器 停止容器 删除容器 删除容器方法一 删除容器方法二 删除容器方法三 删除容器方法四2. 容器资源限制 限制容器内存资源 限制容器CPU资源 ...
    99+
    2024-04-02
  • 如何清理全部停止的docker容器
    小编给大家分享一下如何清理全部停止的docker容器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!清理全部停止的docker容器...
    99+
    2024-04-02
  • docker如何进入容器修改文件
    要进入Docker容器并修改文件,可以使用以下命令:1. 首先,使用 `docker ps` 命令查看正在运行的容器列表,并找到要进...
    99+
    2023-09-04
    docker
  • Docker如何创建并进入mysql容器
    这篇文章主要介绍“Docker如何创建并进入mysql容器”,在日常操作中,相信很多人在Docker如何创建并进入mysql容器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Docker如何创建并进入mysq...
    99+
    2023-07-05
  • Docker容器如何部署consul
    小编给大家分享一下Docker容器如何部署consul,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Consul简介Consul 是一个支持多数据中心分布式高可用...
    99+
    2023-06-29
  • docker容器内安装Supervisor进程管理工具
    Supervisor进程管理工具 安装Supervisor # dLucky-php 是容器名称(也可以选择容器编号)docker exec dLucky-php apt-get install -y supervisor 创建配置文件 d...
    99+
    2023-09-01
    docker php 运维
  • docker容器直接退出如何进入容器调试模式
    目录先上结论(适用所有镜像)Docker RUN 覆盖容器主进程命令CMDdocker-compose中的覆盖主进程命令Entrypoint命令分析结论补充容器启动直接退出,想进入容...
    99+
    2024-04-02
  • Docker如何部署多容器通信
    这篇文章主要介绍了Docker如何部署多容器通信的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Docker如何部署多容器通信文章都会有所收获,下面我们一起来看看吧。原因是这样的...
    99+
    2024-04-02
  • 企业的内外部、总部与分部、各部门之间如何高效安全地进行文件收发?
     随着业务的进一步扩展,越来越多的企业架构呈现分散的状态,越来越多的企业正走出国门,拥抱世界,他们在世界各地成立分公司和机构。企业在发展过程中逐步意识到数据高效安全收发的重要性。产品、软件包等各类文件需要传递到客户或者公司各分支机...
    99+
    2023-06-05
  • 如何进行更加优雅地Docker部署项目
    本篇文章给大家分享的是有关如何进行更加优雅地Docker部署项目,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如果你需要经常性需要多处部署同样的项目,如果你曾经也遇到过&quo...
    99+
    2023-06-19
  • docker如何拷贝文件到容器
    使用Docker命令可以将文件从主机拷贝到Docker容器中。下面是具体的步骤:1. 找到要拷贝的文件所在的目录。2. 运行以下命令...
    99+
    2023-10-19
    docker
  • 云原生Docker创建并进入mysql容器的全过程
    目录前言拉取镜像创建容器进入mysql容器登录mysql创建数据库创建表总结前言 本文主要讲解的是创建mysql的容器,大家都知道,在外面进入mysql都很容易,“mysql -u用户名 -p密码&rdquo...
    99+
    2023-02-21
    docker创建mysql数据库 docker 创建容器 docker创建mysql容器
  • php中如何删除全部文件内容
    这篇文章主要为大家展示了“php中如何删除全部文件内容”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中如何删除全部文件内容”这篇文章吧。php删除全部文件内容的方法:首先创建一个PHP示例...
    99+
    2023-06-15
  • Docker如何部署Mysql,.Net6,Sqlserver等容器
    这篇文章主要介绍了Docker如何部署Mysql,.Net6,Sqlserver等容器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Centos8安装Docker1.更新一下...
    99+
    2023-06-22
  • 如何在docker容器中部署应用
    本篇内容介绍了“如何在docker容器中部署应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一个简单的Hello World应用。1 Ma...
    99+
    2023-06-02
  • docker容器安装及部署的超详细入门教程
    目录1.安装docker2.docker 安装 redis3.docker 安装rabbitmq4.docker 安装postgresql5.docker 安装jdk 并配置环境变量...
    99+
    2022-11-13
    docker容器部署 docker部署方案 docker安装配置
  • win10如何进入安全模式
    在win10中进入安全模式的方法:1.进入windows设置界面;2.进入“更新和安全”选项;3.选择“恢复”,点击高级启动“立即重启”按钮;4.选择“疑难解答”,进入高级选项;5.点击“启动设置”选项;6.点击“重启”,选择启用安全模式;...
    99+
    2024-04-02
  • xp如何进入安全模式
    本篇内容介绍了“xp如何进入安全模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!xp怎么进入安全模式:重启电脑后,进入系统菜单选择XP系统...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作