• Docker原理


    docker是什么:Docker 是完整的一套容器管理系统,所以想要搞懂 Docker 的概念,我们必须先从容器开始说起。

    什么是容器?

    - [x] 容器是用来装东西的,Linux 里面的容器是用来装应用的;

    - [x] 容器就是将软件打包成标准化单元,以用于开发、交付和部署;

    - [x] 容器技术已经成为应用程序封装和交付的核心技术;

    容器原理:容器技术的核心,由以下几个内核技术组成:

    - [x] Cgroups (Control Groups) — 资源管理

    - [x] SELinux — 安全 (是针对于文件系统,文件的管理措施)

    - [x] NameSpace — 命名空间

    命名空间:

    #是指可以对系统资源空间进行分割隔离的技术,例如:创建一个虚拟机,在虚拟机里的所有操作,都不会对真实机造成影响。

    #命名空间分为六大类,可以从各个方面来对系统资源空间进行隔离;

    Linux 的 NameSpace

    - [x] UTS、NETWORK、MOUNT、USER、PID、IPC

    UTS:

    #主机名命名空间,作用:分割主机名,即在容器内修改主机名,不会对宿主机的系统造成影响,实现主机名的隔离;

    没有隔离前,修改主机名为zhangsan,重新打开一个终端,主机名也被修改为zhangsan

    
    [root@localhost ~]# hostname zhangsan   #临时设置主机名
    
    [root@localhost ~]# bash         #立刻生效
    
    [root@zhangsan ~]#
    

    使用unshare命令模拟主机名的命名空间,修改主机名为namespace,重新打开一个终端,主机名没有发生变化,还是zhangsan

    
    [root@zhangsan ~]# unshare -u /bin/bash
    
    [root@zhangsan ~]# hostname namespace   #临时设置主机名
    
    [root@zhangsan ~]# bash           #立刻生效
    
    [root@namespace ~]#
    
    

    NETWORK:网络命名空间,作用:分割网络,即容器内的网络配置和宿主机相互之间不受干扰的;

    例如:

    ​ #在真实机器上的网卡名为eth0,IP地址为192.168.1.10/24;

    ​ #而在容器内的网卡名可以为ens33,ip地址为10.10.10.10/24;

    MOUNT:

    #挂载命名空间,作用:隔离文件系统,在容器内挂载的光盘或nfs共享目录,宿主机是无法看到里面的内容的;

    例如:

    ​ #在linux系统上,创建一个虚拟机,在真机的/var/lib/ftp中挂载了一个光盘文件,但是在虚拟机的/var/lib/ftp中是没有光盘内容的,这就是MOUNT隔离;

    USER:

    #用户命名空间,作用:隔离用户,即容器内创建的用户不能用于登录宿主机,真机机里创建的用户也不能作用于容器;

    PID:

    #进程命名空间,作用:为了防止容器和宿主机中的进程冲突;

    例如:

    ​ #在真实机中,有一个服务: nfs,PID为2250;

    ​ #在容器内,也有一个服务: chrony,PID为2250;

    ​ #真实机中用户,杀死(kill) PID号为2250的进程时,并不会对容器内的进程2250产生影响;

    ​ #而容器内的用户,杀死(kill) PID号为2250的进程时,也并不会对真实机内的进程2250产生影响;

    IPC:

    #信号向量命名空间,作用:通常和PID一起使用;

    #用户杀死一个进程时,实际上是向进程发送一个信号(IPC),进程接收到这个信号后会执行对应的操作;

    docker 的优缺点

    优点

    - [x] 相比于传统的虚拟化技术,容器更加简洁高效

    - [x] 传统虚拟机需要给每个 VM 安装操作系统

    - [x] 容器使用的共享公共库和程序

    缺点

    - [x] 容器的隔离性没有虚拟机强

    - [x] 共用Linux内核,安全性有先天缺陷

    docker 与传统虚拟化的对比

    虚拟化:

    #例如:虚拟机的使用,每一个虚拟机都要安装独立的操作系统;

    容器:

    #不需要安装独立的操作系统,只有一个Docker进程,和宿主机共享操作系统;

    #容器没有操作系统,启动容器就跟开启一个进程一样,简单高效;

    容器的高效性:

    #启动虚拟机中的应用程序,需要先启动虚拟机的操作系统,然后再启动应用程序;

    #启动容器内的应用程序,直接启动应用程序即可;

    卸载防火墙和selinux(以kube-node1为例,kube-node2类似操作)

    [root@localhost ~]# yum  -y remove  firewalld-*
    
    [root@localhost ~]# vim /etc/selinux/config
    
    SELINUX=disabled
    

    配置IP地址和主机名(以kube-node1为例,kube-node2类似操作)

    [root@localhost ~]# echo kube-node1 > /etc/hostname 
    

    使用nmcli命令配置IP地址,网关,dns(以kube-node1为例,kube-node2类似操作)

    [root@kube-node1 ~]# nmcli connection modify ens33 ipv4.method manual ipv4.addresses 192.168.11.148/24 ipv4.gateway 192.168.11.254 ipv4.dns 114.114.114.114 connection.autoconnect yes
    
    [root@kube-node1 ~]# nmcli connection up eth0
    
    [root@kube-node1 ~]# reboot
    
  • 相关阅读:
    Linux学习之HTTP
    JUC并发编程学习(五)集合类不安全
    西安共享股东分红系统开发详细介绍
    后端返回图片流前端展示图片
    leetcode 460. LFU 缓存
    【在Vue脚手架项目中使用qs框架】
    Vue16 绑定css样式 style样式
    STM32 ---- 再次学习STM32F103C8T6/STM32F409IGT6
    docker day02
    同一个Tomcat部署多个项目
  • 原文地址:https://www.cnblogs.com/sre-chan/p/17245729.html