关键词:
文章目录
一、虚拟化分类
1. 主机虚拟化和容器虚拟化的优缺点
- 主机虚拟化
- 应用程序运行环境强隔离
- 虚拟机操作系统与底层操作系统无关化
- 虚拟机内部操作不会影响到物理机
- 拥有操作系统会占用部署资源以及存储
- 网络传输效率低
- 当应用程序需要调用硬件响应用户访问时间延迟较大
- 容器虚拟化
- 可以实现应用程序的隔离
- 直接使用物理机的操作系统可以快速响应用户请求
- 不占用部署时间
- 占用少量磁盘空间
- 网络控制与主机虚拟化有所区别、服务治理
2. 容器所涉及内核技术
NameSpce
NameSpce :Namespace 可以为容器提供系统资源隔离能力,把不同的资源放到不同的命名空间里,这些资源是相互隔离的。
什么是命令空间?
应用程序运行环境隔离的空间,就是一个命名空间,每个空间都将拥有UTS、IPC、Mount、Net、User、PID,6大命名空间,也可以叫做6大子命名空间。每个容器就是一个命名空间
- UTS:每一个NameSpace都拥有独立的主机或域名,可以把每个NameSpace认为一个独立主机
- IPC:每个容器依旧使用linux内核中进程交互的方法,实现进程间通信
- Mount:每个容器的文件系统是独立的
- Net:每个容器的网络是隔离
- User:每个容器的用户和组ID是隔离,每个容器都拥有root用户
- PID:每个容器都拥有独立的进程树,由容器是物理机中的一个进程,所以容器中的进程是物理机的线程
CGroups
Control Group(控制组),是LInux内核的一个特性,主要用俩对共享资源进行隔离、限制、审计等、只有能控制分配到容器的资源,才能避免多个容器同时运行时对宿主机系统的资源竞争,控制组可以提供对容器的内存、CPU、磁盘IO等资源进行限制和计费管理,控制组的设计目标是为不同的应用情况提供统一的接口,从控制单一进程到系统机虚拟化。
具体来看控制组提供
- 资源限制:可以将组设置不为超过设定的内存限制,比如内存子系统可以为进程组设定一个内存使用上限,一旦进程组的内存到到上限再申请内存,就会发出 Out of Memory警告
- 优先级:通过优先级让一些组优先得到CPU的资源调度
- 资源审计:用来统计系统实际上把多少资源用到合适的目的上,可以使用cpuacct子系统记录某个进村组使用的CPU时间
- 隔离:为组隔离命令空间,这样一个组不会看到其它组的进程、网络连接和文件系统
- 控制:挂起、恢复和重启等操作
9大子系统
- 把资源定义为子系统,可以通过子系统对资源进行限制
- CPU 可以让进程使用CPU的比例
- memory 限制内存使用,例如50Mi,150Mi
- blkio 限制块设备的IO
- cpuacct 生成Cgroup使用CPU的资源报告
- cpuset 用于多CPU执行Cgroup时,对进程进行CPU分组
- devices 允许或拒绝设备的访问
- freezer 暂停或恢复Cgroup运行
- net_cls 标记每个网络包
- ns 名称空间子系统
Cgroup应用案例
安装
# yum install libcgroup* -y
# systemctl start cgconfig
# systemctl enable cgconfig
-
Cgroup限制对CPU使用的步骤
使用cpu子系统创建2个cgroup # vim /etc/cgconfig.conf group lesscpu cpu cpu.shares=200; group morecpu cpu cpu.shares=800; # systemctl restart cgconfig
# cgexec -g cpu:lesscpu md5sum /dev/zero #终端1 # cgexec -g cpu:morecpu sha1sum /dev/zero #终端2 # top #终端3
-
Cgroup内存限制
# vim /etc/cgconfig.conf group lessmem memory memory.limit_in_bytes=26214400; memory.memsw.limit_in_bytes=26214400; # systemctl restart cgconfig # mkdir /mnt/mem_test # df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 908M 0 908M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 9.0M 911M 1% /run tmpfs 920M 0 920M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 1.5G 16G 9% / /dev/sda1 1014M 150M 865M 15% /boot tmpfs 184M 0 184M 0% /run/user/0 # mount -t tmpfs /dev/shm /mnt/mem_test # df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 908M 0 908M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 9.0M 911M 1% /run tmpfs 920M 0 920M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 1.5G 16G 9% / /dev/sda1 1014M 150M 865M 15% /boot tmpfs 184M 0 184M 0% /run/user/0 /dev/shm 920M 0 920M 0% /mnt/mem_test # cgexec -g memory:lessmem dd if=/dev/zero of=/mnt/mem_test/file1 bs=1M count=200 200+0 records in 200+0 records out 209715200 bytes (210 MB) copied, 0.297781 s, 704 MB/s [root@docker ~]# rm -rf /mnt/mem_test/file1 [root@docker ~]# cgexec -g memory:lessmem dd if=/dev/zero of=/mnt/mem_test/file1 bs=1M count=500 Killed
二、Docker安装和基本使用
1. 获取yum源
1.安装一些必要的系统工具
# yum install -y yum-utils device-mapper-persistent-data lvm2
2.通过yum-config-manager获取docker-ce.repo
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-fasttrack.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-Media.repo CentOS-x86_64-kernel.repo
CentOS-Debuginfo.repo CentOS-Sources.repo docker-ce.repo
2.安装docker-ce
# yum repolist
docker-ce-stable | 3.5 kB 00:00:00
(1/2): docker-ce-stable/7/x86_64/updateinfo | 55 B 00:00:01
(2/2): docker-ce-stable/7/x86_64/primary_db | 82 kB 00:00:01
repo id repo name status
base/7/x86_64 CentOS-7 - Base 10,072
docker-ce-stable/7/x86_64 Docker CE Stable - x86_64 169
extras/7/x86_64 CentOS-7 - Extras 516
updates/7/x86_64 CentOS-7 - Updates 4,244
repolist: 15,001
# yum -y install docker-ce
3. 启动docker
# 启动docker
[root@docker ~]# systemctl stop docker
[root@docker ~]# systemctl enable docker
[root@docker ~]# docker version
Client: Docker Engine - Community
Version: 20.10.18
API version: 1.41
Go version: go1.18.6
Git commit: b40c2f6
Built: Thu Sep 8 23:14:08 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.18
API version: 1.41 (minimum version 1.12)
Go version: go1.18.6
Git commit: e42327a
Built: Thu Sep 8 23:12:21 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.8
GitCommit: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
如果出现Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
# 重启docker
# systemctl restart docker
下一篇docker管理容器
docker学习笔记(1-5)安装docker启动和停止docker
Docker学习笔记(1-5)安装docker、启动和停止docker Docker只支持64位,ubuntu、centos、redhat、macos、windows Linux内核版本>3.10,检查版本:#uname-ix86_64#uname-r 3.13.0.40-generic ubuntu系统上用apt-get安装软件 #更新仓库 查看详情
docker学习笔记-安装(代码片段)
Docker学习笔记基础概念/名词解释准备工作安装启动Docker服务Docker常用命令卸载参考资料基础概念/名词解释名词说明image镜像docker封装好的一个模板,里面是一个可运行的服务,以及运行此服务所需要的依赖环境。container... 查看详情
docker学习笔记-安装(代码片段)
Docker学习笔记基础概念/名词解释准备工作安装启动Docker服务Docker常用命令卸载参考资料基础概念/名词解释名词说明image镜像docker封装好的一个模板,里面是一个可运行的服务,以及运行此服务所需要的依赖环境。container... 查看详情
elasticsearch学习笔记,常用操作,docker安装(代码片段)
docker安装dockerpullelasticsearch安装某个版本需要在dockerhub查看查看版本:https://hub.docker.com/_/elasticsearch?tab=tagsdockerpullelasticsearch:7.6.2dockerimages查看镜像启动容器:dockerrun--namees2-eES_JAVA_O 查看详情
docker学习笔记总结(代码片段)
文章目录1.docker简介2.docker的三个组成3.docker的工作原理4.centos系统上安装docker5.阿里云镜像加速器6.dockerrun命令执行流程7.docker命令7.1帮助启动类命令7.2镜像命令7.3容器命令7.3.1dockerrun命令详解7.3.2dockerps命令详解7.3.3容器服务的一... 查看详情
docker学习笔记1(代码片段)
面试题传统虚拟机和Docker的区别?虚拟机虚拟机其实就是文件,不需要就删掉,操作系统和硬件之间逻辑不变虚拟机技术基于安装在主操作系统上的虚拟机管理软件,创建虚拟机还能虚拟出各种硬件,从操作系统资源占用多(内核,硬件,... 查看详情
docker基础学习笔记一:docker概述和安装(代码片段)
Docker基础学习笔记一:Docker概述和安装容器的起源什么是容器Docker是什么Docker容器为什么这么火Docker能做什么?Docker的安装(centos8中)卸载容器的起源假设你们公司正在秘密研发下一个“今日头条”APP,我们... 查看详情
docker学习笔记——docker管理容器(代码片段)
文章目录Docker管理容器1.容器&镜像&仓库&daemon&client之间的关系2.启动容器3.dockerdaemon管理4.docker命令行5.docker命令行实现容器管理搜索镜像(dockerhub)获取镜像(pull)打包传输镜像启动容器解决docker中的CtenOS8镜像无法使用yum... 查看详情
docker学习笔记——docker管理容器(代码片段)
文章目录Docker管理容器1.容器&镜像&仓库&daemon&client之间的关系2.启动容器3.dockerdaemon管理4.docker命令行5.docker命令行实现容器管理搜索镜像(dockerhub)获取镜像(pull)打包传输镜像启动容器解决docker中的CtenOS8镜像无法使用yum... 查看详情
docker学习笔记(代码片段)
Docker学习笔记一、Docker是什么?Docker是一个开源的应用容器引擎,基于Go语言开发。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是... 查看详情
docker学习笔记总结(代码片段)
文章目录1.卸载docker服务步骤(实用!!)2.docker私有库3.容器数据卷的使用4.容器卷和主机互通互联5.容器卷ro和rw读写规则6.卷的继承和共享7.docker安装tomcat8.docker安装mysql8.1运行mysql容器8.2dockermysql容器卷配置(非常重要)8.3docke... 查看详情
docker学习笔记什么是docker
Docker学习笔记(一)什么是Docker Docker:容器技术是虚拟化技术的一种,是操作系统的虚拟化。 传统硬件虚拟化:虚拟硬件,事先分配资源,在虚拟的硬件上安装操作系统,虚拟机启动起来以后资源就会被完全占用。操作... 查看详情
docker学习笔记(代码片段)
Docker1.安装Docker#1.yum包更新到最新yumupdate-y#2.安装需要的软件包,yum-util提供yun-config-manager功能,另外两个是devicemapper驱动依赖的yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2#3.设置yum源yum-config-manager- 查看详情
docker学习笔记(代码片段)
Docker概述类似集装箱隔离,jar—容器(mysql,redis)----发布到仓库-----从仓库下载Docker历史2010年dotcloud公司成立2013Docker开源2014年4月9日,Docker1.0发布在此之前都是用的虚拟机基于go语言开发Docker安装#卸载旧版本yumremo... 查看详情
docker学习笔记(代码片段)
Docker1.安装Docker#1.yum包更新到最新yumupdate-y#2.安装需要的软件包,yum-util提供yun-config-manager功能,另外两个是devicemapper驱动依赖的yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2#3.设置yum源yum-config-manager--add-repohttps://download.docker.c... 查看详情
企业运维实战--最全docker学习笔记1.docker简介安装部署镜像构建dockerfile详解镜像构建镜像优化本地私有仓库搭建(代码片段)
企业运维实战--Docker学习笔记1.Docker简介、安装部署、镜像构建、Dockerfile详解、镜像构建、镜像优化、本地私有仓库搭建前言--Docker简介一、Docker安装部署二、镜像的构建三、Dockerfile详解四、镜像构建--nginx五、镜像优化六、本地... 查看详情
docker学习笔记(代码片段)
Docker概述开发、上线两套环境,应用环境、应用配置集群隔离,docker核心思想,打包装箱,每个箱子是相互隔离的轻巧基于Go语言开发,开源虚拟机技术:虚拟出一套硬件,运行一个完整的操作系统ÿ... 查看详情
docker学习笔记1--安装和配置
技术资料docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔记:http://www.open-open.com/lib/view/open1423703640748.html 深入浅出docker:http://www.infoq 查看详情