docker容器介绍

容器介绍

容器其实是一种沙盒技术。沙盒就是能够像一个集装箱一样,把你的应用"装"起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去。

​ 问题:容器的本质到底是什么?

容器的本质是进程。容器镜像就是这个系统里的".exe"安装包.

Docker介绍:

Docker是Docker.Inc公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议。通过分层镜像标准化和内核虚拟化技术,Docker使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情况下提供资源隔离的应用运行环境。

Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单。**容器就像是轻量级的虚拟机,并且可以以秒级的速度来启动或停止**。
官网:docker.com
docker.io  ---docker官方库也叫docker-hub                   

没有容器的时候:

1.rd开发产品(需要配置开发环境)lamp

2.测试(需要配置测试环境)

3.op上线(需要线上环境)

开发 测试 运维

有容器之后:

  1. rd开发产品(需要在docker容器里配置开发环境)

  2. 把容器打包成镜像交给运维,运维上线

    Docker跟原有的工具区别:

   传统的部署模式是:安装(包管理工具或者源码包编译)->配置->运行;
   Docker的部署模式是:复制->运行。

Docker对服务器端开发/部署带来的变化:

   方便快速部署
   对于部署来说可以极大的减少部署的时间成本和人力成本
   Docker支持将应用打包进一个可以移植的容器中,重新定义了应用开发,测试,部署上线的过程,核心理念
   是 Build once, Run anywhere
   1)标准化应用发布,docker容器包含了运行环境和可执行程序,可以跨平台和主机使用;
   2)节约时间,快速部署和启动,VM启动一般是分钟级,docker容器启动是秒级;
   3)方便构建基于微服务架构的系统,通过服务编排,更好的松耦合;
   4)节约成本,以前一个虚拟机至少需要几个G的磁盘空间,docker容器可以减少到MB级;

Docker 优势:

1、交付物标准化
Docker的标准化交付物称为"镜像",它包含了应用程序及其所依赖的运行环境,大大简化了应用交付的模式。

2、应用隔离
Docker可以隔离不同应用程序之间的相互影响,但是比虚拟机开销更小。总之,容器技术部署速度快,开发、测试更敏捷;提高系统利用率,降低资源成本. 

3、一次构建,多次交付
类似于集装箱的"一次装箱,多次运输",Docker镜像可以做到"一次构建,多次交付"。

Docker的度量:

Docker是利用容器来实现的一种轻量级的虚拟技术,从而在保证隔离性的同时达到节省资源的目的。Docker的

可移植性可以让它一次建立,到处运行。Docker的度量可以从以下四个方面进行:

1)隔离性

 通过内核的命名空间来实现的,将容器的进程、网络、消息、文件系统和主机名进行隔离。

2)可度量性

 Docker主要通过cgroups控制组来控制资源的度量和分配。

3)移植性

 Docker利用AUFS来实现对容器的快速更新。

 AUFS是一种支持将不同目录挂载到同一个虚拟文件系统下的文件系统,支持对每个目录的读写权限管理。AUFS具有层

 的概念,每一次修改都是在已有的只写层进行增量修改,修改的内容将形成新的文件层,不影响原有的层。

4)安全性

 安全性可以分为容器内部之间的安全性;容器与托管主机之间的安全性。

 容器内部之间的安全性主要是通过命名空间和cgroups来保证的。

 容器与托管主机之间的安全性主要是通过内核能力机制的控制,可以防止Docker非法入侵托管主机。

 

Docker容器使用AUFS作为文件系统,有如下优势:

1)节省存储空间

 多个容器可以共享同一个基础镜像存储。

2)快速部署

3)升级方便

 升级一个基础镜像即可影响到所有基于它的容器。需要注意已经在运行的docker不受影响

容器和 VM 的主要区别:

表面区别:
容器占用体积小,虚拟机占用体积大
隔离性:容器提供了基于进程的隔离,而虚拟机提供了资源的完全隔离。
启动速度:虚拟机可能需要一分钟来启动,而容器只需要一秒钟或更短。
容器使用宿主操作系统的内核,而虚拟机使用独立的内核。Docker 的局限性之一是,它只能用在 64 位的操作系统上。
本质区别:
容器是被隔离的进程

docker安装

CentOS 7 中 Docker 的安装:

Docker 软件包已经包括在默认的 CentOS-Extras 软件源(联网使用centos7u2自带网络Yum源)里。因此想要安装 docker,只需要运行下面的 yum 命令:

# yum install -y epel*
# yum install docker
启动 Docker 服务:
# service docker start
# chkconfig docker on
CentOS 7    
# systemctl start docker.service
# systemctl enable docker.service 

确定docker服务在运行:

结果会显示服务端和客户端的版本,如果只显示客户端版本说明服务没有启动

# docker version

Client:
Version:         1.10.3
API version:     1.22
...

docker版本与官方安装方式

moby、docker-ce与docker-ee

最早时docker是一个开源项目,主要由docker公司维护。

2017年3月1日起,docker公司将原先的docker项目改名为moby,并创建了docker-ce和docker-ee。

三者关系:

moby是继承了原先的docker的项目,是社区维护的的开源项目,谁都可以在moby的基础打造自己的容器产品

docker-ce是docker公司维护的开源项目,是一个基于moby项目的免费的容器产品

docker-ee是docker公司维护的闭源产品,是docker公司的商业产品

​ moby project由社区维护,docker-ce project是docker公司维护,docker-ee是闭源的docker公司维护。

CentOS–官方安装

如果是centos,上面的安装命令会在系统上添加yum源:/etc/yum.repos.d/docker-ce.repo 
# wget https://download.docker.com/linux/centos/docker-ce.repo
# mv docker-ce.repo /etc/yum.repos.d
# yum install -y docker-ce

​ 或者直接下载rpm安装:

# wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm

# yum localinstall docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm

国内源安装新版docker

使用aliyun docker yum源安装新版docker

删除已安装的Docker

[root@yixuan ~]# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

配置阿里云Docker Yum源

# yum install -y yum-utils device-mapper-persistent-data lvm2 git
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装指定版本

 查看Docker版本:
# yum list docker-ce --showduplicates

​ 安装较旧版本(比如Docker 17.03.2) :

​ 需要指定完整的rpm包的包名,并且加上–setopt=obsoletes=0 参数:

# yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

安装Docker新版本(比如Docker 18.03.0):加上rpm包名的版本号部分或不加都可以:

# yum install docker-ce-18.03.0.ce  -y
或者
[root@yixuan ~]# yum install -y docker-ce

启动Docker服务:

#systemctl enable docker
#systemctl start docker

查看docker版本状态:

[root@yixuan ~]# docker -v
Docker version 19.03.2, build 6a30dfc
[root@yixuan ~]# docker version
Client: Docker Engine - Community
Version:           19.03.2
API version:       1.40
Go version:        go1.12.8
Git commit:        6a30dfc
Built:             Thu Aug 29 05:28:55 2019
OS/Arch:           linux/amd64
Experimental:      false

Server: Docker Engine - Community
Engine:
 Version:          19.03.2
 API version:      1.40 (minimum version 1.12)
 Go version:       go1.12.8
 Git commit:       6a30dfc
 Built:            Thu Aug 29 05:27:34 2019
 OS/Arch:          linux/amd64
 Experimental:     false
containerd:
 Version:          1.2.6
 GitCommit:        894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
 Version:          1.0.0-rc8
 GitCommit:        425e105d5a03fabd737a126ad93d62a9eeede87f
docker-init:
 Version:          0.18.0
 GitCommit:        fec3683      

查看docker运行状态:

# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
...

=======================================================

报错1:

docker info的时候报如下错误

bridge-nf-call-iptables is disabled

 

解决1:

追加如下配置,然后重启系统

# vim /etc/sysctl.conf   

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-arptables = 1

 

问题2:

虚拟机ping百度也能ping通,但是需要等好几秒才出结果,关键是下载镜像一直报错如下

 # docker pull daocloud.io/library/nginx

 Using default tag: latest

 Error response from daemon: Get https://daocloud.io/v2/: dial tcp: lookup daocloud.io on 192.168.1.2:53: read udp   192.168.1.189:41335->192.168.1.2:53: i/o timeout

 

解决2:

我的虚拟机用的网关和dns都是虚拟机自己的.1或者.2,把DNS改成8.8.8.8问题就解决了,ping百度也秒出结果

 # vim /etc/resolv.conf

 nameserver 8.8.8.8

简单测试

运行一个容器
[root@192 ~]# docker run -it daocloud.io/library/ubuntu /bin/bash #运行容器
Unable to find image 'daocloud.io/library/ubuntu:latest' locally
latest: Pulling from library/ubuntu
5c939e3a4d10: Pull complete 
c63719cdbe7a: Pull complete 
19a861ea6baf: Pull complete 
651c9d2d6c4f: Pull complete 
Digest: sha256:bc025862c3e8ec4a8754ea4756e33da6c41cba38330d7e324abd25c8e0b93300
Status: Downloaded newer image for daocloud.io/library/ubuntu:latest

如果自动进入下面的容器环境,说明ubuntu镜像运行成功,Docker的安装也没有问题:可以操作容器了
root@db8e84e2ea96:/# 

国内镜像源

去查看如何使用aliyun的docker镜像库
去查看如何使用网易蜂巢的docker镜像库
daocloud.io

**Docker 加速器 **

使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验。因此 DaoCloud 推出了加速器工具解决这个难题,通过智能路由和缓存机制,极大提升了国内网络访问 Docker Hub 的速度。

Docker 加速器对 Docker 的版本有要求吗?    
需要 Docker 1.8 或更高版本才能使用。

Docker 加速器支持什么系统?    
Linux, MacOS 以及 Windows 平台。

Docker 加速器是否收费?    
提供永久免费的加速器服务,请放心使用。

国内比较好的镜像源:网易蜂巢、aliyun和daocloud

daocloud.io–官网

=以下为亲测======

使用国内镜像:

进入网站:https://daocloud.io/

注册帐号:soso666

进入镜像市场

在这里插入图片描述
随便选择一个,选择mysql

在这里插入图片描述

在这里插入图片描述
上面有详细的使用命令。但是每个镜像的命令不一样,在选择一个:

在这里插入图片描述

在这里插入图片描述

[root@yixuan ~]# docker pull daocloud.io/library/nginx   #下载镜像
Using default tag: latest
latest: Pulling from library/nginx
0a4690c5d889: Pull complete 
9719afee3eb7: Pull complete 
44446b456159: Pull complete 
Digest: sha256:f83b2ffd963ac911f9e638184c8d580cc1f3139d5c8c33c87c3fb90aebdebf76
Status: Downloaded newer image for daocloud.io/library/nginx:latest
daocloud.io/library/nginx:latest

现在我们使用web界面:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
等一会,不要手动终止:

[root@yixuan ~]# curl -sSL https://get.daocloud.io/daomonit/install.sh | sh -s 8e6d8ce76e4ec4668f31859dae6297439ac49243 
 * Installing Daomonit...
 * Downloading Daomonit from https://get.daocloud.io/daomonit/daomonit.x86_64.rpm
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   279  100   279    0     0   1091      0 --:--:-- --:--:-- --:--:--  1094
100   337  100   337    0     0    950      0 --:--:-- --:--:-- --:--:--   950
100 3349k  100 3349k    0     0  2060k      0  0:00:01  0:00:01 --:--:-- 2207k
准备中...                          ################################# [100%]
正在升级/安装...
   1:daomonit-0.1.70-1                ################################# [100%]
Created symlink from /etc/systemd/system/multi-user.target.wants/daomonit.service to /usr/lib/systemd/system/daomonit.service.
 * Configuring Daomonit...
[10/04/19 23:05:51] [DEBG] Writing configuration file /etc/daocloud/daomonit.yml
[10/04/19 23:05:51] [INFO] You have successfully saved your config file.
 * Start Daomonit...
Starting daomonit (via systemctl):                         [  OK  ]

You can view daomonit log at /var/log/daomonit.log
And You can Start or Stop daomonit with: service daomonit start/stop/restart/status

*********************************************************************
*********************************************************************
***
***  Installed and Started Daomonit 0.1.70
***
***  NOTICE: 
***  You can pull image very Fast by dao, For Example: 
***     dao pull ubuntu
***
*********************************************************************
*********************************************************************
[root@yixuan ~]# 

完成之后:

在这里插入图片描述
点击查看主机

在这里插入图片描述
启动我们的容器

[root@yixuan ~]# docker images   #查看镜像
REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
daocloud.io/library/nginx               latest              98ebf73aba75        2 months ago        109MB
daocloud.io/daocloud/daocloud-toolset   latest              bbdc71e950ea        2 years ago         147MB

[root@yixuan ~]# docker run -it daocloud.io/library/nginx /bin/bash   #运行容器
root@37b8b8cdd75f:/#

将容器启动之后刷新一下刚才的界面点击容器就会显示出来

在这里插入图片描述
点击查看详情…

配置阿里云的仓库

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

使用阿里的的仓库下载镜像:
[root@192 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/xynginx/nginx
Using default tag: latest
latest: Pulling from xynginx/nginx
7dc0dca2b151: Pull complete 
c4757245bbef: Pull complete 
0a46433073b6: Pull complete 
Digest: sha256:c0eaf80075734ba7b095162a1a9b2991a48987174f2f3424882714ba7b3c4033
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/xynginx/nginx:latest
registry.cn-hangzhou.aliyuncs.com/xynginx/nginx:latest

[root@192 ~]# docker images
REPOSITORY                                        TAG                 IMAGE ID            CREATED             SIZE
registry.cn-hangzhou.aliyuncs.com/xynginx/nginx   latest              3966d32f8bd8
                   347MB

在这里插入图片描述

在这里插入图片描述

配置阿里加速器:
如果这个目录/etc/docker/不存在就创建
[root@192 ~]# vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://br003st4.mirror.aliyuncs.com"]
}
[root@192 ~]# systemctl daemon-reload
[root@192 ~]# systemctl restart docker

docker基本概念

Docker系统

Docker系统有两个程序:docker服务端和docker客户端

docker服务端:是一个服务进程,管理着所有的容器。也叫docker engine

docker客户端:扮演着docker服务端的远程控制器,可以用来控制docker的服务端进程。

大部分情况下,docker服务端和客户端运行在一台机器上 

Docker三大核心组件:

Docker 镜像 - Docker  images 

Docker 仓库 - Docker  registeries

Docker 容器 - Docker  containers

容器的三大组成要素:

名称空间 namespace

资源限制 cgroups

文件系统 overlay2(UnionFS) 

docker 仓库:

**用来保存镜像,可以理解为代码控制中的代码仓库。**同样的,Docker 仓库也有公有和私有的概念。

公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。


仓库(registry) -->Repository-->镜像(按版本区分)

docker.io/centos:7
registry/repository:tag

repository:存储库


docker 国内仓库
ali
网易蜂巢
daocloud
=========================
docker公有仓库
docker.io -------docker官方库也叫docker-hub
类似于github一样,面向全球的一个docker镜像的公共仓库。如果在国内使用速度太慢。
===============================
docker私有仓库
个人或者公司部署的非公开库

Docker 镜像

​ Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。

在 Docker 的术语里,一个只读层被称为镜像,一个镜像是永久不会变的。由于 Docker 使用一个统一文件系统,由于镜像不可写,所以镜像是无状态的。

镜像由三部分组成:
镜像名称:仓库名称+镜像分类+tag名称(镜像版本)

1.存储对象:images
2.格式:库名/分类:tag
3.tag:表示镜像版本

镜像的大体分类方式:这不是规定

 1.以操作系统名字    
centos的docker镜像:
centos5
centos6
centos7
-----------------
2.以应用的名字
nginx的docker镜像
tomcat的docker镜像
mysql的docker镜像

镜像名字:

完整镜像名称示例:        
docker.io/library/nginx:v1
docker.io/library/nginx:latest
daocloud.io/library/nginx

镜像ID:

所有镜像都是通过一个 64 位十六进制字符串来标识的。 为简化使用,前 12 个字符可以组成一个短ID,可以在命令行中使用。短ID还是有一定的碰撞机率,所以服务器总是返回长ID。

镜像ID:64位的id号,一般我们看到的是12位的我们称之为短ID,只要我们每个ID号不冲突就可以了

在这里插入图片描述

镜像本身:是由一层一层的镜像合在一起的,最底层的镜像我们称为基础镜像,在这个基础镜像的基础上还可以在做镜像,在做的镜像称为子镜像,对于子镜像来讲在谁的基础之上做的就是父镜像。

基础镜像:一个没有任何父镜像的镜像,谓之基础镜像。
centos7   镜像
centos7+nginx 镜像

Docker 容器

​ Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。

docker镜像命名解析

Docker镜像命名解析

镜像是Docker最核心的技术之一,也是应用发布的标准格式。无论你是用docker pull image,或者是在

Dockerfile里面写FROM image,从Docker官方Registry下载镜像应该是Docker操作里面最频繁的动作之一

了。那么docker镜像是如何命名的,这也是Docker里面比较容易令人混淆的一块概念:Registry,Repository, Tag and Image。

那么Registry又是什么呢?Registry存储镜像数据,并且提供拉取和上传镜像的功能。Registry中镜像是通过

Repository来组织的,而每个Repository又包含了若干个Image。

下面是在本地机器运行docker images的输出结果:

在这里插入图片描述
常说的"ubuntu"镜像其实不是一个镜像名称,而是代表了一个名为ubuntu的Repository,同时在这个Repository下面有一系列打了tag的Image,Image的标记是一个GUID,为了方便也可以通过Repository:tag来引用。

Image[:tag]

当一个镜像的名称不足以分辨这个镜像所代表的含义时,你可以通过tag将版本信息添加到run命令中,以执行特

定版本的镜像。

例如:docker run ubuntu:14.04 

docker镜像和容器的区别

一、Docker镜像

要理解Docker镜像和docker容器之间的区别,确实不容易。。

一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第1层的镜像层我们称之为基础镜像(Base Image),其他层的镜像(除了最顶层)我们称之为父层镜像(Parent Image)。这些镜像继承了他们的父层镜像的所有属性和设置。

Docker镜像通过镜像ID进行识别。镜像ID是一个64字符的十六进制的字符串。但是当我们运行镜像时,通常我们不会使用镜像ID来引用镜像,而是使用镜像名来引用。

要列出本地所有有效的镜像,可以使用命令

# docker images

镜像可以发布为不同的版本,这种机制我们称之为标签(Tag)。

可以使用pull命令加上指定的标签:

# docker pull ubuntu:14.04

# docker pull ubuntu:12.04

二、Docker容器

Docker容器可以使用命令创建:

# docker run  -it  imagename  /bin/bash

它会在所有的镜像层之上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态

(Running)和退出态 (Exited)。这就是Docker容器。当我们使用docker run启动容器,Docker容器就进

入运行态,当我们停止Docker容器时,它就进入退出态。

当我们有一个正在运行的Docker容器时,从运行态到停止态,我们对它所做的一切变更都会永久地写到容器的文

件系统中。要切记,对容器的变更是写入到容器的文件系统的,而不是写入到Docker镜像中的。

我们可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此还是相互隔离的。我们对其中一

个容器所做的变更只会局限于那个容器本身。如果对容器的底层镜像进行修改,那么当前正在运行的容器是不受影响的,不会发生自动更新现象。

名字空间–namespace

namespace  空间隔离
cgroup   资源限制

名字空间是 Linux 内核一个强大的特性。每个容器都有自己单独的名字空间,运行在其中的应用都像是在独立的操作系统中运行一样。名字空间保证了容器之间彼此互不影响。

  1. pid 名字空间

不同用户的进程就是通过 pid 名字空间隔离开的,且不同名字空间中可以有相同 pid。所有的 LXC 进程在 Docker中的父进程为Docker进程,每个 LXC 进程具有不同的名字空间。同时由于允许嵌套,因此可以很方便的实现嵌套的 Docker 容器。

  1. net 名字空间

    有 了 pid 名字空间, 每个名字空间中的 pid 能够相互隔离,但是网络端口还是共享 host 的端口。网络隔离是通过 net 名字空间实现的, 每个 net 名字空间有独立的 网络设备, IP 地址, 路由表, /proc/net 目录。这样每个容器的网络就能隔离开来。

  2. ipc 名字空间

容器中进程交互还是采用了 Linux 常见的进程间交互方法(interprocess communication - IPC), 包括信号量、消息队列和共享内存、socket、管道等。

面试题:linux系统里面ipc通信有几种方式

socket:网络进程间的通信
管道:本地进程间的通信:echo  hello  | grep e
信号:  kill -9 PID   这种我们叫信号量级,也是本地进程间的通信
共享内存:每个操作系统里面共享内存多大,是物理内存的一半
  1. mnt名字空间

mnt 名字空间允许不同名字空间的进程看到的文件结构不同,这样每个名字空间 中的进程所看到的文件目录就被隔离开了。

  1. uts 名字空间

UTS(“UNIX Time-sharing System”) 名字空间允许每个容器拥有独立的 hostname 和 domain name, 使其在网络上可以被视作一个独立的节点而非主机上的一个进程。

  1. user 名字空间

每个容器可以有不同的用户和组 id, 也就是说可以在容器内用容器内部的用户执行程序而非主机上的用户。
程在 Docker中的父进程为Docker进程,每个 LXC 进程具有不同的名字空间。同时由于允许嵌套,因此可以很方便的实现嵌套的 Docker 容器。

  1. net 名字空间

    有 了 pid 名字空间, 每个名字空间中的 pid 能够相互隔离,但是网络端口还是共享 host 的端口。网络隔离是通过 net 名字空间实现的, 每个 net 名字空间有独立的 网络设备, IP 地址, 路由表, /proc/net 目录。这样每个容器的网络就能隔离开来。

  2. ipc 名字空间

容器中进程交互还是采用了 Linux 常见的进程间交互方法(interprocess communication - IPC), 包括信号量、消息队列和共享内存、socket、管道等。

面试题:linux系统里面ipc通信有几种方式

socket:网络进程间的通信
管道:本地进程间的通信:echo  hello  | grep e
信号:  kill -9 PID   这种我们叫信号量级,也是本地进程间的通信
共享内存:每个操作系统里面共享内存多大,是物理内存的一半
  1. mnt名字空间

mnt 名字空间允许不同名字空间的进程看到的文件结构不同,这样每个名字空间 中的进程所看到的文件目录就被隔离开了。

  1. uts 名字空间

UTS(“UNIX Time-sharing System”) 名字空间允许每个容器拥有独立的 hostname 和 domain name, 使其在网络上可以被视作一个独立的节点而非主机上的一个进程。

  1. user 名字空间

每个容器可以有不同的用户和组 id, 也就是说可以在容器内用容器内部的用户执行程序而非主机上的用户。

  • 21
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值