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日

相关文章

  • centos7使用docker安装sentry

    环境:centos7、docker19 基础环境需求 * Docker 17.05.0+ * Compose 1.23.0+ 流程:docker安装–>docker-compose安装–>clone项目–>安装sentry–>启动sentry–>访问验证(可以直接查看安装文档  more onpremise/READM…

    Docker 2023年4月11日
    00
  • 在Windows系统下安装docker窗口的配置过程

    安装Docker在Windows系统下需要经过以下几个步骤: 步骤1:下载Docker Desktop 首先去Docker官网下载Docker Desktop for Windows。根据自己的操作系统版本选择下载相应的安装文件。下载完毕后,双击打开安装程序。 步骤2:安装Docker Desktop 安装过程中,会出现一些提示框。根据提示依次操作即可,安装…

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

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

    Docker 2023年5月15日
    00
  • 编写最佳的Dockerfile的方法

    编写最佳的 Dockerfile 是保证 Docker 镜像质量的关键步骤之一,能够有效地提高应用程序容器化部署的可靠性和安全性。下面将介绍编写最佳的 Dockerfile 的一些方法。 步骤一:选择基础镜像 选择一个优秀的基础镜像对于 Dockerfile 的可靠性至关重要。在选择 Docker 基础镜像时,应该注意以下几点: 镜像版本:选择一个最新的稳定…

    Docker 2023年5月16日
    00
  • 使用docker-compose部署springboot项目

    1、打包一个jar 2、创建springboot的镜像,将jar包和Dockerfile放在一个目录 Dockerfile FROM java:8 MAINTAINER eangulee 11500667@qq.com VOLUME /tmp ADD dockertest-0.0.1-SNAPSHOT.jar app.jar RUN bash -c ‘tou…

    Docker 2023年4月11日
    00
  • Docker删除大量停止的container

    1. 怎么做 官方建议的批量删除停止容器使用docker rm $(sudo docker ps -a -q) 千万不要用 docker rm -f $(sudo docker ps -a -q),会删除全部容器的 2. 为什么这么做 1. docker ps -a -q docker ps 命令的解释: docker ps -a -q 列出所有容器的数字I…

    Docker 2023年4月13日
    00
  • docker安装并持久化postgresql数据库

    安装docker步骤略过 1、拉取postgresql镜像 docker pull postgresql 2、创建本地卷,数据卷可以在容器之间共享和重用, 默认会一直存在,即使容器被删除(docker volume inspect pgdata可查看数据卷的本地位置) docker volume create pgdata 3、启动容器 docker run…

    Docker 2023年4月13日
    00
  • 从linux上的docker持久化mysql数据恢复到本地mysql数据库

    网上查询 先说说这几种文件是干什么的:*.frm是描述了表的结构,*.myd保存了表的数据记录,*.myi则是表的索引。其实一个.frm文件就是对应的数据库中的一个表,表示数据表的表结构。.MYD文件 这应该是INNODB引擎外的数据文件。.MYI文件:.myi是MyISAM表的索引的扩展名 .对数据库的操作有大量的select,就用MyISAM表对数据库的…

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