docker入门讲解

news2024/10/8 22:12:48

目录

第 1 章 Docker核心概念与安装

为什么使用容器?

Docker是什么

Docker设计目标

Docker基本组成

容器 vs 虚拟机

Docker应用场景

Linux 安装 Docker

第 2 章 Docker镜像管理

Docker 容器管理

Docker 容器数据持久化

Docker 容器网络

Dockerfile 定制容器镜像

Harbor企业级镜像仓库

Prometheus+Grafana监控Docker主机

基于Docker构建企业Jenkins CI平台



第 1 章 Docker核心概念与安装

  1. 为什么要用容器?
  2. Docker是什么
  3. Docker设计目标
  4. Docker基本组成
  5. 容器 vs 虚拟机
  6. Docker应用场景
  7. Linux 安装 Docker

为什么使用容器?

1. 上线流程繁琐
开发->测试->申请资源->审批->部署->测试等环节
2. 资源利用率低
普遍服务器利用率低,造成过多浪费
3. 扩容/缩容不及时
业务高峰期扩容流程繁琐,上线不及时
4. 服务器环境臃肿
服务器越来越臃肿,对维护、迁移带来困难
5. 环境不一致性

Docker是什么

  • 使用最广泛的开源容器引擎
  • 一种操作系统级的虚拟化技术
  • 依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制
  • 一个简单的应用程序打包工具

Docker设计目标

  • 提供简单的应用程序打包工具
  • 开发人员和运维人员职责逻辑分离
  • 多环境保持一致性

Docker基本组成

容器 vs 虚拟机

Docker应用场景

  • 应用程序打包和发布
  • 应用程序隔离
  • 持续集成
  • 部署微服务
  • 快速搭建测试环境
  • 提供PaaS产品(平台即服务)

Linux 安装 Docker

Docker版本:
  • 社区版(Community Edition,CE)
  • 企业版(Enterprise Edition,EE)
支持平台:
  • Linux(CentOS,Debian,Fedora,Oracle Linux,RHEL,SUSE和Ubuntu)
  • Mac
  • Windows
# 安装依赖包
yum install -y yum-utils 
# 添加Docker软件包源
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker CE
yum install -y docker-ce
# 启动Docker服务并设置开机启动
systemctl start docker
systemctl enable docker
https://docs.docker.com/engine/install/centos/
官方文档:https://docs.docker.com
阿里云源:http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

第 2 章 Docker镜像管理

  1. 什么是镜像
  2. 镜像从哪里来?
  3. 镜像与容器联系
  4. 镜像常用管理命令
  5. 镜像存储核心技术:联合文件系统(UnionFS)
  6. 镜像存储核心技术:写时复制(COW)

镜像是什么

镜像是什么?
一个分层存储的文件,不是一个单一的文件
一个软件的环境
一个镜像可以创建N个容器
一种标准化的交付
一个不包含Linux内核而又精简的Linux操作系统

镜像从哪里来?

Docker Hub是由Docker公司负责维护的公共镜像仓库,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
地址:https://hub.docker.com
配置镜像加速器:
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}

镜像与容器联系

镜像:类似于虚拟机镜像,一个只读模板
容器:通过镜像创建的运行实例

 

镜像常用管理命令

镜像存储核心技术:联合文件系统(UnionFS)

镜像怎么高效存储?
难道像虚拟机那样一个容器对应一个独立的镜像文件?这样对于密集
型容器,磁盘占用率太大!
答:引入联合文件系统,将镜像多层文件联合挂载到容器文件系统

镜像存储核心技术:写时复制(COW)

了解联合文件系统后,我们知道,镜像是只读的,类似共享形式让多
个容器使用,如果要在容器里修改文件,即镜像里的文件,那该怎么
办呢?
答:引入写时复制(copy-on-write),需要修改文件操作时,会先
从镜像里把要写的文件复制到自己的文件系统中进行修改。

 优化建议

  • 使用SSD固态硬盘
  • 使用卷作为频繁读写文件的工作目录,绕过存储驱动,减少抽象的开销

第 3 章 Docker容器管理

  1. 创建容器常用选项
  2. 容器资源限制
  3. 管理容器常用命令
  4. 容器实现核心技术:Namespace
  5. 容器实现核心技术:CGroups
  6. Docker核心组件之间关系

创建容器常用选项

容器资源限制

 示例:

内存限额:
允许容器最多使用500M内存和100M的Swap,并禁用 OOM Killer:
docker run -d --name nginx03 --memory="500m" --memory-swap=“600m" --oom-kill-disable nginx
CPU限额:
允许容器最多使用一个半的CPU:
docker run -d --name nginx04 --cpus="1.5" nginx
允许容器最多使用50%的CPU:
docker run -d --name nginx05 --cpus=".5" nginx

管理容器常用命令

 

容器实现核心技术:Namespace

在容器化中,一台物理计算机可以运行多个不同操作系统,那就需要解决 “隔离性” ,彼此感知不到对方存在,有问题互不影响。
Linux内核从2.4.19版本开始引入了namespace概念,其目的是将特定的全局系统资源通过抽象方法使得namespace中的进程看
起来拥有自己隔离的资源。Docker就是借助这个机制实现了容器资源隔离。
Linux的Namespace机制提供了6种不同命名空间:
  • IPC:隔离进程间通信
  • MOUNT:隔离文件系统挂载点
  • NET:隔离网络协议栈
  • PID:隔离进程号,进程命名空间是一个父子结构,子空间对父空间可见
  • USER:隔离用户
  • UTS:隔离主机名和域名

容器实现核心技术:CGroups

Docker利用namespace实现了容器之间资源隔离,但是namespace不能对容器资源限制,比如CPU、内存。
如果某一个容器属于CPU密集型任务,那么会影响其他容器使用CPU,导致多个容器相互影响并且抢占资源。
如何对多个容器的资源使用进行限制就成了容器化的主要问题。
答:引入Control Groups(简称CGroups),限制容器资源
CGroups: 所有的任务就是运行在系统中的一个进程,而 CGroups 以某种标准将一组进程为目标进行资源分配和控制。
例如CPU、内存、带宽等,并且可以动态配置。
CGroups主要功能:
  • 限制进程组使用的资源数量( Resource limitation ):可以为进程组设定资源使用上限,例如内存
  • 进程组优先级控制( Prioritization ):可以为进程组分配特定CPU、磁盘IO吞吐量
  • 记录进程组使用的资源数量( Accounting ):例如使用记录某个进程组使用的CPU时间
  • 进程组控制( Control ):可以将进程组挂起和恢复
ls /sys/fs/cgroup/ -l 查看cgroups可控制的资源:
  • blkio :对快设备的IO进行限制。
  • cpu:限制CPU时间片的分配,与cpuacct挂载同一目录。
  • cpuacct :生成cgroup中的任务占用CPU资源的报告,与cpu挂载同一目录。
  • cpuset :给cgroup中的任务分配独立的CPU(多核处理器)和内存节点。
  • devices :允许或者拒绝 cgroup 中的任务访问设备。
  • freezer :暂停/恢复 cgroup 中的任务。
  • hugetlb :限制使用的内存页数量。
  • memory :对cgroup 中任务的可用内存进行限制,并自动生成资源占用报告。
  • net_cls :使用等级识别符(classid)标记网络数据包,这让 Linux 流量控制程序(tc)可以识别来自特定从cgroup 任务的数据包,并进行网络限制。
  • net_prio:允许基于cgroup设置网络流量的优先级。
  • perf_event:允许使用perf工具来监控cgroup。
  • pids:限制任务的数量。
容器实际资源限制位置:
/sys/fs/cgroup/<资源名>/docker/<容器ID>

Docker核心组件之间关系

Docker 容器数据持久化

Docker 容器网络

Dockerfile 定制容器镜像

Harbor企业级镜像仓库

Prometheus+Grafana监控Docker主机

基于Docker构建企业Jenkins CI平台

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/791076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA的数据类型与变量

目录 1. 字面常量 2. 数据类型 3. 变量 3.2 长整型变量 3.3 短整型变量 3.4 字节型变量 3.5双精度浮点型 3.6 单精度浮点型 3.7字符型变量 3.8布尔型变量 4.类型转换 4.1自动类型转换(隐式) 4.2强制类型转换(显式) 5.字符串类型 1. 字面常量 字面常量的分类&am…

深度学习之梯度下降算法

0.1 学习视频源于&#xff1a;b站&#xff1a;刘二大人《PyTorch深度学习实践》 0.2 本章内容为自主学习总结内容&#xff0c;若有错误欢迎指正&#xff01; 1 线性模型 1.1 通过简单的线性模型来举例&#xff1a; 1.2 如图&#xff0c;简单的一个权重的线性模型&#xff0c…

透明屏的应用范围广吗?

透明屏是一种新型的显示技术&#xff0c;它可以使屏幕显示的内容透明&#xff0c;让用户可以同时看到屏幕上的图像和背后的物体。 透明屏的应用领域非常广泛&#xff0c;可以用于商业广告、展览展示、智能家居等多个领域。 透明屏的原理是利用透明材料和光学技术&#xff0c;…

通过el-tab切换Echarts图表显示不全问题

一、背景 在让日常开发中很多时候会通过el-tab选项卡方式去分类统计数据&#xff0c;本文我们主要是针对统计中用到了echarts图表&#xff0c;在刚接触时可能会遇到默认选项卡可以正常显示图表数据&#xff0c;但是切换选项卡以后会出现图表大小出现问题&#xff0c;当然原因就…

第2集丨webpack 江湖 —— 创建一个简单的webpack工程demo

目录 一、创建webpack工程1.1 新建 webpack工程目录1.2 项目初始化1.3 新建src目录和文件1.4 安装jQuery1.5 安装webpack1.6 配置webpack1.6.1 创建配置文件&#xff1a;webpack.config.js1.6.2 配置dev脚本1.7 运行dev脚本 1.8 查看效果1.9 附件1.9.1 package.json1.9.2 webpa…

MyBatisPlus之DML编程控制

MyBatisPlus之DML编程控制 1. id生成策略控制&#xff08;Insert&#xff09;1.1 id生成策略控制&#xff08;TableId注解&#xff09;1.2 全局策略配置id生成策略全局配置表名前缀全局配置 2. 多记录操作&#xff08;批量Delete/Select&#xff09;2.1 按照主键删除多条记录2.…

【java实习评审】对小说更新时间点的并发压力的短链接接口实现比较到位

大家好&#xff0c;本篇文章分享一下【校招VIP】免费商业项目“推推”第一期书籍详情模块java同学的代码周最佳作品。该同学来自西安邮电大学通信工程专业。本项目亮点难点&#xff1a;1 热门书籍在更新点的访问压力&#xff0c;2 书籍更新通知的及时性和有效性&#xff0c;3 书…

GlobalProtect-点击连接按钮无响应

GlobalProtect-点击连接按钮无响应 解决方案 重启PanGPS服务 点击连接

C++输入字符串函数cin.getline()

1.函数作用 接受一个字符串&#xff0c;可以接收空格并输出。 2.函数的完整形式 cin.getline(字符数组名,字符个数,结束标志) 第三个参数可以省略&#xff0c;当第三个参数省略之后&#xff0c;系统默认为’\0’。 若指定参数“字符个数”为n&#xff0c;则利用cout函数输出…

LiveGBS流媒体平台GB/T28181常见问题-TOKEN有效期是多久如何设置token有效期StreamToken和URLToken

LiveGBS中TOKEN有效期是多久如何设置token有效期StreamToken和URLToken 1、获取TOKEN2、TOKEN有效期3、默认token有效期3、自定义token加密key3.1、token_key3.2、stream_token_key 4、如何配置一直有效的token4.1、URLToken4.2、StreamToken 5、动态有效期6、流地址鉴权开启后…

《微SaaS创富周刊》第9期:如何把创业者访谈,变成年收入100万+美元的生意

导读 大家好&#xff01;第9期《微SaaS创富周刊》面世啦&#xff08;点击这里阅读第1期&#xff09;&#xff0c;感谢大家的关注和阅读&#xff01;本周刊面向独立开发者、早期创业团队&#xff0c;报道他们主要的产品形态——微SaaS如何变现的最新资讯和经验分享等。所谓微Sa…

Pytorch学习笔记1:张量+训练参数传入与处理+制作训练集

文章目录 Pytorch中张量的一些常见函数最基础也最常见的方法关于Indexing, Slicing, Joining, Mutating Ops&#xff08;索引、切片、聚合、旋转&#xff09;随机种子torch.bernoulli(input)torch.normaltorch.rand(size)torch.randn(size)torch.randperm(n) Python--argparse-…

vue3自定义指令 vue中常用自定义指令

文章目录 vue3自定义指令1.什么是自定义指令&#xff1f;2.注册自定义指令2.1 全局注册2.2 局部注册<script setup>中注册&#xff1a;<script>中使用&#xff1a; 3.钩子函数参数详解4.指令传值5.总结 常用自定义指令案例v-longpressv-debounce vue3自定义指令 除…

智能财务分析-亿发财务报表管理系统,赋能中小企业财务数字化转型

对于许多中小企业来说&#xff0c;企业重要部门往往是财务和业务部门。业务负责创收&#xff0c;财务负责控制成本&#xff0c;降低税收风险。但因管理机制和公司运行制度的原因&#xff0c;中小企业往往面临着业务与财务割裂的问题&#xff0c;财务数据不清晰&#xff0c;无法…

2023年下半年广州/深圳软考信息系统项目管理师报名

信息系统项目管理师是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目之一&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资…

Vue3 axios数据请求封装

Vue3 axios数据请求封装 环境&#xff1a;vue3tsvite 首先在项目目录下安装axios 运行 npm install axios 成功后在package.json文件会显示。 目录&#xff1a; request.ts文件代码&#xff1a; import axios from axiosconst request axios.create({baseURL:https://api.…

装配木牛前雷达的2023款创维汽车EV6被评为“最强主动安全车型”

近日&#xff0c;全新升级的2023款创维EV6改款车型接受了中国汽车技术研究中心&#xff08;以下简称“中汽中心”&#xff09;的安全碰撞实验。据称&#xff0c;该款车型在主动安全测试中得分率高达98.97%&#xff0c;这近满分的成绩再次刷新了国内主动安全汽车排行榜&#xff…

Android 之 Paint API —— Typeface (字型)

本节带来Paint API系列的最后一个API&#xff0c;Typeface(字型)&#xff0c;由字义&#xff0c;我们大概可以猜到&#xff0c;这个 API是用来设置字体以及字体风格的&#xff0c;使用起来也非常的简单&#xff01;下面我们来学习下Typeface的一些相关 的用法&#xff01; 官方…

右击不显示TortoiseGit图标处理方法

第一种 右键--》TortoiseGIt--》setting--》Icon Overlays--》Status cache&#xff0c;按照下图设置&#xff0c;然后重启电脑。 第二种 进入注册信息&#xff0c;按照步骤找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIden…