Docker探索namespace详解

Docker探索namespace详解

前言

Docker是目前最流行的容器化技术之一,它的核心技术之一就是使用namespace隔离不同的资源。在这篇文章中,我们将深入探索namespace的概念和与Docker的关联。

namespace是什么

在Linux中,namespace是一种机制,可以让系统中的不同进程看到不同的资源集合。一个进程的namespace下只能看到自己的资源,看不到其他进程的资源。这样就可以在一个系统中同时运行多个相互独立的进程,每个进程都有自己的一套资源。

Linux中有6种namespace,分别是:

  • uts,控制主机名和域名的命名空间
  • ipc,控制进程间通信的命名空间
  • pid,控制进程编号的命名空间
  • net,控制网络设备、网络栈、端口等的命名空间
  • mnt,控制挂载点(文件系统)的命名空间
  • user,控制用户和用户组的命名空间

使用命令行可以查看系统中的所有namespace:

ls -l /proc/$$/ns/

Docker中的namespace

Docker使用了Linux下的namespace机制来实现容器化,一共使用了5种namespace。我们使用以下命令查看一个Docker容器使用的namespace:

docker inspect --format '{{.State.Pid}}' <container-id>

ls -l /proc/$(docker inspect --format '{{.State.Pid}}' <container-id>)/ns/

在Docker中,不同的容器可以使用不同的网络、挂载的文件系统、进程编号等等,这就是使用不同namespace机制实现的。

示例1:在Docker容器中运行Nginx

我们使用以下命令创建一个新的Docker容器,运行Nginx:

docker run -d -p 8080:80 --name mynginx nginx

我们使用以下命令进入到该容器所在的Linux系统:

docker exec -it mynginx bash

接下来,我们在容器中运行以下命令:

ps aux

可以看到,容器中的进程数量与宿主机不同。

我们再使用以下命令,查看容器中的网络设备:

ip addr

可以看到,容器中的网络设备数量也与宿主机不同。

这是因为Docker在创建容器时,使用了不同的namespace隔离了容器内部的进程和网络设备。

示例2:在Docker容器中查看宿主机的进程

我们使用以下命令创建一个新的Docker容器,运行一个带有ps命令和宿主机共享命名空间的镜像:

docker run -it --pid host --name myps alpine sh

接下来,我们在容器中运行以下命令,查看宿主机的进程:

ps -ef

可以看到,容器中的ps命令也能查看到宿主机的进程。

这是因为使用--pid host参数,将容器的进程号命名空间设置成了主机的进程号命名空间,这样容器就能访问主机中的进程了。它是受到Docker隔离机制中每一个命名空间互相隔离的限制,不能随意地干涉其他命名空间的资源。

总结

本文详细讲解了namespace的概念和Docker中的namespace实现原理。并且通过两个示例说明,展示了namespace的具体运用。我们相信,通过这篇文章的学习,你对Docker的基础原理有了更深入的了解,也掌握了很有用的技能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Docker探索namespace详解 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • 在CentOS或Fedora上运行Docker容器的方法与步骤

    下面是在CentOS或Fedora上运行Docker容器的方法与步骤的完整攻略。 安装Docker 在CentOS或Fedora上安装Docker的步骤相似。首先,需要安装依赖库和一些必要的软件包: sudo dnf install -y dnf-plugins-core sudo dnf config-manager –add-repo https://…

    Docker 2023年5月16日
    00
  • 对docker中的overlay式网络详解

    首先,我们需要了解什么是Docker中的Overlay网络。 Overlay是Docker的一种网络模式,他可以将多个Docker宿主机创建的不同网络连接成一个虚拟的Overlay网络,使得不同节点上的容器能够互相访问,就像在同一台主机上运行一样。Overlay网络需要使用Docker Swarm或者Docker Engine的新版本。下面我们来详细介绍一下…

    Docker 2023年5月15日
    00
  • docker如何迁移数据目录

    本文主要介绍了docker迁移数据目录的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 查看磁盘使用 # du -hs /var/lib/docker/ 237G /var/lib/docker/ # docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Image…

    Docker 2023年4月16日
    00
  • Docker Desktop无法正常启动解决(failed to start…)

    现象描述 当我们尝试启动Docker Desktop时,可能会出现以下错误提示: Error: failed to start daemon: Error initializing network controller: list bridge addresses failed: PredefinedLocalScopeDefaultNetworks Lis…

    Docker 2023年5月16日
    00
  • Docker 容器和宿主机相互拷贝文件

    1、从容器里面拷文件到宿主机      答:在宿主机里面执行以下命令              docker cp 容器名:要拷贝的文件在容器里面的路径       要拷贝到宿主机的相应路径       示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js, …

    Docker 2023年4月13日
    00
  • Docker中镜像构建文件Dockerfile与相关命令的详细介绍

    让我来为您详细讲解“Docker中镜像构建文件Dockerfile与相关命令的详细介绍”攻略。 Dockerfile详解 Dockerfile是用来构建Docker镜像的配置文件,需要在Dockerfile中定义要构建的镜像的基础映像、要运行的指令、环境变量、工作目录、暴露端口等。Dockerfile的编写非常重要,可以大大提高镜像构建的效率和可复用性。 以…

    Docker 2023年5月16日
    00
  • Docker新手心得以及nginx在Docker中的部署

    说实话,我之前对于Docker的印象并不算太好,觉得这又是一个赶时髦的技术,过不了多久热度就会过去的。不过这学期选了一门企业级服务器导论的课中讲到了关于Docker的内容,而且现在Solo也大力推荐使用Docker进行部署,让我感觉不了解一点关于它的知识好像不太合适。于是就学习了一些相关的内容,并做了一些简单的实践。 首先,我一开始只知道Docker是把不同…

    Docker 2023年4月13日
    00
  • Activiti7官方博客翻译9——Activiti Cloud docker版本快速部署

    Docker 组成 遵循本指南,在Docker VM中设置Docker Compose以在本地计算机上运行Activiti Cloud。 硬件设置 您将需要为Docker VM机器分配至少4个CPU内核和8gb RAM。 软件设置 在开始之前,必须安装以下软件包: 为桌面安装Docker或为操作系统安装Docker工具箱   如果您在桌面使用Docker,请…

    Docker 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部