Docker探索namespace详解

yizhihongxing

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日

相关文章

  • Docker: Harbor一些小知识

    镜像文件上传到私有仓库harbor后,镜像的物理存储位置在哪里? 这些信息记录在docker-compose.yml里,通过观察发现 镜像存储在了宿主机的 volumes: – /data/registry:/storage:z 这个位置, 所以删除 harbor不会删除数据。因为数据被持久化到了宿主机的制定目录下了 [root@192 harbor]# c…

    Docker 2023年4月11日
    00
  • 十、Docker容器:磁盘&内存&CPU资源限制实战

    inode1 192.168.31.101 —– docker version:Docker version 1.13.1, build cccb291/1.13.1 inode2 192.168.31.102 —– docker version:Docker version 19.03.8, build afacb8b(docker-ce) 二…

    Docker 2023年4月11日
    00
  • 使用Docker部署Consul集群并由Ocelot调用

    关于consul的介绍就不写了百度就行,我们直接开干。 一、部署consul集群 拉取consul的镜像 docker pull consul 然后部署consul容器 docker run –name consul1 -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600 c…

    2023年4月10日
    00
  • docker进阶教程之dockerfile优化镜像大小

    让我详细讲解一下“docker进阶教程之dockerfile优化镜像大小”的完整攻略。 什么是Dockerfile? Dockerfile是用于构建Docker镜像的文本文件。在Dockerfile中,用户可以规定Docker镜像中的各种构建指令、命令和参数。构建Docker镜像的时候,使用Dockerfile文件执行构建指令来生成Docker镜像。 为什么…

    Docker 2023年5月16日
    00
  • centos7安装docker容器的超详细步骤记录

    首先讲解“centos7安装docker容器的超详细步骤记录”的完整攻略,具体步骤如下: 安装docker 更新yum仓库 shell$ sudo yum update 安装需要的软件包,yum-util提供yum-config-manager等功能,另外两个是devicemapper驱动依赖的 shell$ sudo yum install -y yum-…

    Docker 2023年5月16日
    00
  • Docker配置WebSSH的实现

    首先,我们需要了解一下Docker和WebSSH的相关知识: Docker是一种容器化技术,可以将应用程序及其依赖项打包成容器,实现应用程序在不同环境间的快速移植和部署。 WebSSH是一种基于Web的SSH客户端,可以通过Web浏览器访问SSH服务器,并在网页上使用SSH终端。 实现Docker配置WebSSH的过程如下: 准备工作 首先,你需要确定使用的…

    Docker 2023年5月15日
    00
  • Centos7下安装Docker Engine

    下面是Centos7下安装Docker Engine的完整攻略: 确认系统版本 首先,请确认你的CentOS 7系统版本。您可以在终端中输入以下命令来查看它: cat /etc/redhat-release 卸载旧版本的Docker 如果您以前安装过旧版本的Docker,请先卸载它以免与新版本的Docker冲突。您可以使用以下命令来卸载旧的Docker: s…

    Docker 2023年5月15日
    00
  • Docker的理解和基本命令详解

    Docker的理解和基本命令详解 Docker的理解 Docker是一个开源的容器化平台,提供了一种方便快捷的方式去打包、发布、运行应用程序。它相当于一个轻量级的虚拟机,可以将应用程序和应用程序的所有依赖打包在一起,形成一个镜像,然后在任何地方运行这个镜像。 与传统的虚拟化方式相比,Docker的优势在于: 更加轻量级:相较于传统的虚拟机镜像而言,Docke…

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