极客时间高级运维训练营第一周作业

一、Linux各个namespace的作用

         概述而言,namespace是Linux系统的底层概念,在内核层实现,即有一些不同类型的命名空间被部署在核内,各个docker容器运行在同一个docker主进程并且共用同一个宿主机系统内核,各docker容器运行在宿主机的用户空间,每个容器都要有类似于虚拟机一样的相互隔离的运行空间,但是容器技术是在一个进程内实现运行指定服务的运行环境,并且还可以保护宿主机内核不受其他进程的干扰和影响,如文件系统空间、网络空间、进程空间等。

目前namespace主要有以下8种分类:

隔离类型功能系统调用参数
MNT Namespace(mount)
提供磁盘挂载点和文件系统的隔离能力        
CLONE_NEWNS
IPC Namespace(Inter-Process Communication)
提供进程间通信的隔离能力
CLONE_NEWIPC
UTS Namespace(UNIX Timesharing System)
提供主机名隔离能力
CLONE_NEWUTS
PID Namespace(Process Identification)
提供进程隔离能力CLONE_NEWPID
Net Namespace(network)
提供网络隔离能力CLONE_NEWUSER
User Namespace(user)
提供用户隔离能力
CLONE_NEWUSER
Time Namespace
提供时间隔离能力CLONE_NEWTIME
Syslog Namespace
提供syslog隔离能力
Control group (cgroup) Namespace
提供进程所属控制组的隔离能力
MNT Namespace:
提供磁盘挂载点和文件系统的隔离:每个容器都要有独立的根文件系统有独立的用户空间,以实
现在容器里面启动服务并且使用容器的运行环境,即一个宿 主机是ubuntu的服务器,可以在里面启动一个centos运行环境的容器并且在容器里面启动一个Nginx服务,此Nginx运行时使用的运行环境就是centos系统目录的运行环境,即在容 器里面是不能直接访问宿主机的文件系统。
宿主机是使用了chroot技术把容器锁定到一个指定的运行目 录里面并作为容器的根运行环境。
IPC Namespace:
IPC namespce隔离进程间通信资源(同一个IPC namespace的进程可实现内存等资源共享,但是不同的IPC namespace则严格隔离)
UTS Namespace:
UTS namespace(UNIX Timesharing System包含了运行 内核的名称、版本、底层体系结构类型等信息)用于系统标识,其中包含了hostname和域名domainname ,它使得一个容器拥有属于自己hostname标识,这个主机名标识独立于宿主机系统和其上的其他容器。
PID Namespace(Process Identification)
Linux系统中,有一个PID为1的进程(init/systemd)是其他所有进程的父进程,那么在每个容器内也
要有一个父进程来管理其下属的子进程,那么多个容器的进程通PID namespace进程隔离(比如 PID编号重复、器内的主进程生成与回收子进程等)。
Net Namespace(network)
每一个容器都类似于虚拟机一样有自己的网卡、监听端口、TCP/IP协议栈等,docker使用network namespace启动一个vethX接口,这样你的容器将拥有它自己的桥接ip地址,通常是docker0,而docker0 实质就是Linux的虚拟网桥,网桥是在OSI七层模型的数据链路层的网络设备,通过mac地
址对网络进行划分,并且在不同网络直接传递数据。
User Namespace(user)
各个容器内可能会出现重名的用户和用户组名称,或重复的用户UID或者GID,那么怎么隔离各个容器内的用户空间呢?User Namespace允许在各个宿 主机的各个容器空间内创建相同的用户名以及相同的用户UID和GID,只是会把用户的作用范围限制在每个容器内,即A容器和B容器可以有相同的用户名称和ID的账户,但是此用户的有效范围仅是当前容器内,不能访问另外一个容器内的文件系统,即相互隔离、互不影响
Docker的实现至少需要实现MNT Namespace(mount)至User Namespace(user)的隔离。

二、使用 apt/yum/ 二进制安装指定版本的 Docker 

本人使用的小米笔记本配置为8核16线程,每台虚拟机设置为4个核心,每个核心4个线程。此处省略使用vmware安装ubuntu虚拟机过程,我使用的是版本。注意安装成功以后,需要使用sudo passwd root命令设置root口令,同时输入"vi /etc/ssh/sshd_config", 将PermitRootLogin 设置为 yes,允许xshell工具使用root用户远程访问虚拟机。

本次安装docker一共尝试了两种安装方式:

(1)使用apt方式在ubuntu上安装docker

#尝试卸载可能存在的旧版本(一般最小化安装ubuntu时没有旧版本)

sudo apt-get remove docker docker-engine docker-ce docker.io

#更新软件包信息

apt  update

#安装必要的前置组件,以使apt可以通过https访问存储库

apt -y install -y apt-transport-https ca-certificates curl software-properties-common

#添加docker官方GPC密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

#或者添加阿里云官方GPC密钥

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

#设置稳定版本docker-ce仓库

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

#或者使用阿里云官方速度快docker-ce仓库

add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

#再次更新apt软件包仓库信息

apt -y update

#查看可用版本

apt-cache madison docker-ce

#显示内容如下:

docker-ce | 5:20.10.18~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.17~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.16~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.15~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.14~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
 docker-ce | 5:20.10.13~3-0~ubuntu-jammy | https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy/stable amd64 Packages
"#安装指定版本apt -y install docker-ce=5:20.10.18~3-0~ubuntu-jammy docker-ce-cli=5:20.10.18~3-0~ubuntu-jammy containerd.io

#输入docker --version显示正常

“Docker version 20.10.18, build b40c2f6”
#输入docker info验证显示正常

“Client......Live Restore Enabled:false”

#重新启动docker服务,设置docker为开机自动启动

systemctl  enable containerd.service

systemctl  restart containerd.service
systemctl  enable docker.service

systemctl  restart docker.service
systemctl  enable docker.socket

systemctl  restart docker.socket

(2)使用张老师的shell脚本安装,本质上是使用shell脚本安装二进制docker安装包。

#输入docker info验证

WARNING:No swap limit support

#按照辅导老师的方法,使用sed工具修改/etc/default.grub

sed -i s/^GRUB_CMDLINE_LINUX=""$/GRUB_CMDLINE_LINUX="cgroup_enable=memory
swapaccount=1"/ /etc/default/grub
#更新grub
update-grub
#重启
reboot
#再次输入docker info显示正常

三、熟练使用docker数据卷

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值