云计算基础之Docker

news2024/9/25 8:21:38

云计算是什么

云计算的本质是计算资源的虚拟化。

与磁盘逻辑卷的分配类似,云计算是在负载波动时动态调整服务器计算资源,避免资源浪费的做法,生产环境中,厂商一般将服务器组成一个池,实现逻辑管理计算资源,对不同的部署项目动态调整算力,
比如电商在618、双十一需要应对极大的数据量,而平时并不需要这么多的计算资源,所以只需要在个别情景下增加计算资源即可。

docker是什么

docker是云计算的实现形式之一,该程序2013年开源,基于go语言实现。

核心组成是:镜像、容器和仓库。
镜像和容器对应程序和进程,仓库则是镜像的集合。

核心技术是Namespace命名空间隔离、Control Group控制组资源限制、Union Filesystem联合文件系统。

docker核心技术

核心技术都在Linux内核层实现:

Namespace对全局系统资源的一种封装隔离,用于解决多个容器命名等可能产生冲突的问题,每个命名空间内的资源彼此独立互不干扰。

该技术本质是Linux中chroot的派生版,早先的chroot用于限制文件访问本身以外的内容。

Namespace的具体空间划分如下:

隔离类型功能系统调用参数说明
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_NEWNET不同容器网络独立,有自己的网卡docker0
User Namespace(user)提供用户隔离能力CLONE_NEWUSER允许不同容器用户名相同,实现用户隔离

Control Group资源控制是为了防止容器无限申请资源的情况发生,通过将进程按组管理的形式实现,作为使用者了解到这应该就行了,更多信息可以看看其他文章。

Union Filesystem联合文件系统用于将多个物理位置不同的文件挂载到同一个目录,从而达到从逻辑上看是一个整体文件系统的效果。
该技术可以使得制作镜像更为方便,新的镜像可以从基础镜像开始,构造新的功能作为新的层添加到文件联合系统中,大大提高了存储效率和开发效率,共享时也只需要传输新加的层,而无需更新整个镜像,同时将文件系统分层便于维护和回滚,不同的文件层相当于快照可以随时恢复。

云计算和虚拟机的区别

如果说逻辑管理计算资源,我们用虚拟机也能实现,docker云计算的实现手段高明在哪呢?

首先虚拟机的确可以实现计算资源的管理,并且还很方便,但因为其原理,虚拟机是真实操作系统之上又建立起的虚拟操作系统,指令从硬件到程序需要穿透两层操作系统,其中还有复杂的Hypervisor虚拟机监视器,性能损失很大,并且再小的程序也需要完整的操作系统,造成很大的存储资源浪费,docker正是弥补了这些不足才得以广泛应用。

但虚拟机也有docker不具备的有点,因为虚拟机允许独立的操作系统,所以其隔离性高于docker,安全性更高。

从应用来说都是二者都是虚拟化计算资源,但虚拟机是虚拟完整的运行环境,docker只虚拟容器所需的资源,二者的结构区别见下图:
虚拟机与docker结构
虚拟化实现的是物理资源的隔离,docker实现的是应用层面的隔离。

docker快速开始

安装docker

yum install wget				# 安装网络下载工具,通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理				
								# yum则是红帽系列Linux的系统安装方式
rm -rf /etc/yum.repos.d/*		# 清除原有源文件 
wget -O /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 将各种源切换为阿里云
yum install -y docker-ce		# 安装新版的docker-ce
systemctl start docker			# 启动docker服务

切换仓库

此时我们如果要直接拉取镜像会出现如下场景:
拉取等待
因为网络等原因,我们有时无法连接到dockers仓库,所以需要手动配置镜像,先前我们更改的源只是保证我们能正确获取到docker软件,切换仓库的方法如下:
vim /etc/docker/daemon.json创建或修改docker的配置文件,添加如下内容:

{
    "registry-mirrors" : ["https://docker.mirrors.ustc.edu.cn" ] # 中国科技大学
}

切换完成后重启容器服务systemctl daemon-reloadsystemctl restart docker,此时再通过docker pull nginx命令就可以拉取到nginx镜像,通过docker images可以查看已有镜像,如下图:
查看镜像
再使用docker run -d -p 80:80 nginx运行服务,出现下图说明运行成功
运行服务成功

RUN的一些参数

-d, --detach: 以守护进程方式运行容器
-p, --publish: 映射容器端口到宿主机端口
格式: -p [hostPort]:[containerPort]
-v, --volume: 挂载数据卷
格式: -v [hostPath]:[containerPath]
-e, --env: 设置环境变量
--name: 为容器指定名称
--network: 指定容器所属网络
--restart: 容器退出时的重启策略
可选值: no, on-failure, unless-stopped, always
-i, --interactive: 保持标准输入打开
-t, --tty: 分配一个伪终端
-u, --user: 指定运行容器的用户
--entrypoint: 覆盖容器的默认入口点
--rm: 容器退出后自动删除
--hostname: 设置容器主机名
--add-host: 添加自定义主机名到 IP 的映射
--link: 添加到另一个容器的链接
--expose: 暴露容器端口
--volume-driver: 指定数据卷驱动程序
--cpu-shares: 设置 CPU 权重
--memory: 设置容器内存限制

docker方法

镜像管理

直接展示管理方法:

目的方法
搜索docker search 名称
下载docker pull 名称:标签(默认为latest)
删除docker rmi ID或名称
查看docker images
修改标签docker tag 名称:原标签 新名称:新标签
显示详细信息docker inspect 名称
查看历史/各层docker history 名称
导出docker save 名称 -o或> 文件名称
导入load -i或< 名称

容器管理

容器是运行着的镜像,同样直接展示管理方法:

目的方法
创建容器docker create
启动容器docker start
创建并启动docker run
显示容器docker ps -a
端口映射-P随机映射 -p 指定端口:容器目的端口
查看映射端口docker port
暂停docker pause
停止docker stop
删除docker rm -f 查询结果
进入容器内部docker exec
后台启动docker run -d

容器要保证运行状态,必须依赖前台进程

镜像制作

手动方法为:
1,拉取基础操作系统环境
2,装载需要的应用
3,关闭后台运行
4,commit提交容器为镜像

但在企业生产环境中,一般使用专门的镜像制作工具Dockerfile,该工具本质上类似于一个解释器,将内容解释为Linux命令,工具生成的文件名必须为dockerfile,新建该文件后即可写入镜像的构建步骤,一些常用指令如下:

FROM		指定基础镜像,用于后续的指令构建。
MAINTAINER	指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
LABEL		添加镜像的元数据,使用键值对的形式。
RUN			在构建过程中在镜像中执行命令。
CMD			指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT	设置容器创建时的主要命令。(不可被覆盖)
EXPOSE		声明容器运行时监听的特定网络端口。
ENV			在容器内部设置环境变量。
ADD			将文件、目录或远程URL复制到镜像中。
COPY		将文件或目录复制到镜像中。
VOLUME		为容器创建挂载点或声明卷。
WORKDIR		设置后续指令的工作目录。
USER		指定后续指令的用户上下文。
ARG			定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。
ONBUILD		当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL	设置发送给容器以退出的系统调用信号。
HEALTHCHECK	定义周期性检查容器健康状态的命令。
SHELL		覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。

详细步骤可见该文章

数据管理

容器运行过程中数据独立,如果我们部署的容器发生损坏,数据也同样存储在容器内部,如何将容器内部的数据持久化到外部主机呢?这是生产环境中常面临的问题,解决方法之一是数据卷:

即用本机的文件代替容器文件,将宿主机的目录挂载到容器目录上,通过docker run -v 宿主机目录:容器目录将目录映射到容器内部,该方法可以实现文件的复用,也可以避免容器损坏而影响本地数据,容器程序损坏只需要重新拉取然后挂载即可。

另一个方法是使用数据卷容器,即单独用一个容器作为存储介质,供其他容器交换信息,容器本身的隔离机制并不允许这么做,所以我们需要通过--volume-from 数据卷容器来告知容器可以从数据卷容器中获取信息,就可以实现容器的通信和数据持久化操作。

网络管理

容器间要进行网络通信,可以通过宿主机同一个端口映射或docker0的网桥来实现,命令可以使用--link 名称或别名方法实现网络互通。

docker本质也是一个虚拟机,只是其更侧重于应用的虚拟机,所以其网络连接方式也有很多种,分别对应不同的网络策略,说明如下:

网络模式配置方法说明
host模式–net=host容器和宿主机共享Network namespace
container模式–net=container:NAME或ID容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network
none模式–net=none容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等
bridge模式–net=bridge默认为该模式,容器与虚拟网桥通信,虚拟网桥作为在网络中作为交换机

总结

其实学多了,我们大多数也只是拉现成的镜像下来使用,知道pullrun基本就算会docker了。

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

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

相关文章

实时图像编辑大革新!Adobe发布TurboEdit:可以通过文本来编辑图像,编辑时间<0.5秒!

今天给大家介绍Adobe研究院新的研究TurboEdit&#xff0c;可以通过文本来编辑图像&#xff0c;通过一句话就能改变图像中的头发颜色、衣服、帽子、围巾等等。而且编辑飞快&#xff0c;<0.5秒。简直是图像编辑的利器。 相关链接 项目&#xff1a;betterze.github.io/TurboE…

闪存刷新机制文献的解读

闪存刷新机制文献的解读 一、文献信息1、标题&#xff1a;Flash Correct-and-Refresh: Retention-Aware Error Management for Increased Flash Memory Lifetime2、作者来源&#xff1a;卡耐基梅隆大学 二、Motivation三、Technique ( Flash Correct-and-Refresh, FCR )1、Repr…

如何使用Svg矢量图封装引用到vue3项目中

前言 在现代前端开发中&#xff0c;SVG&#xff08;可缩放矢量图形&#xff09;因其高质量和灵活性成为了图标和图形设计的热门选择。对于 Vue 3 项目而言&#xff0c;将 SVG 图标封装和引用到项目中不仅能提升性能&#xff0c;还能带来更高的可维护性和一致性。SVG 图标本质上…

LED的使用寿命评估

一&#xff0e;前言 LED光源随着时间的推移&#xff0c;输出光功率会逐渐衰减。在某一时间点&#xff0c;当LED发出的光衰减到一定水平&#xff0c;就无法满足应用要求。因此&#xff0c;常遇见客户会索取产品中LED光源的使用寿命数据。那么怎样确认LED的使用寿命呢&#xff1…

视觉Mamba综述——Visual Mamba: A Survey and New Outlooks论文总结

Visual Mamba: A Survey and New Outlooks &#xff08;31页&#xff0c;视觉Mamba综述&#xff09; 香港科技大学计算机科学与工程系 https://github.com/Ruixxxx/Awesome-Vision-Mamba-Models. 任务背景 0.摘要 Mamba是最近提出的一种选择性结构化状态空间模型&#xff…

公共DNS大测评,哪个解析性能最好?

日前阿里云方面发布公告称&#xff0c;由于产品升级&#xff0c;将于2024年9月30日24时起对公共DNS中免费的解析请求采取智能流量管控措施。据其透露&#xff0c;“公共DNS仍会致力于为广大免费用户提供高质量的基础递归解析服务&#xff0c;但在高并发解析场景&#xff0c;将对…

建模杂谈系列249 增量数据的正态分布拟合

说明 从分布开始&#xff0c;分布又要从正态开始 假设有一批数据&#xff0c;只有通过在线的方式增量获得。 内容 1 生成 先通过numpy生成一堆随机数据&#xff0c;从3个正态分布生成&#xff0c;然后拼接起来。 import numpy as np import matplotlib.pyplot as plt from …

【智能算法改进】路径规划问题的多策略改进樽海鞘群算法研究

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】樽海鞘群算法&#xff08;SSA)原理及实现 2.改进点 无标度网络策略 复杂网络在图论中可以用边和节点表示&#xff0c; Barabasi 等于1999年通过分析大量的数据提出了无标度网络模型. 该网络…

框架 +【Mybatis】概述 以及 基础环境搭建

目录 什么是框架&#xff1f; java后端框架包括 Mybatis概述 1、背景介绍 2、mybatis介绍 Mybatis环境搭建 1.创建一个maven项目 2.导入mysql数据库驱动包 导入mybatis依赖的jar包 3.创建一个全局的mybatis配置文件 4.创建数据库,创建表,准备数据 5.创建一个访问接口…

单图生成 2D 和 3D 人物,高质量图像处理模型 CharacterGen来啦!

CharacterGen引入了一个简化的生成流程和一个图像条件的多视图扩散模型。该模型有效地将输入姿态校准到规范形式&#xff0c;同时保留输入图像的关键属性&#xff0c;从而解决了多样化姿态带来的挑战。 CharacterGen的另一个核心组成部分是基于Transformer的、可泛化的稀疏视图…

httpx:一个神奇的 Python HTTP客户端

文章目录 httpx&#xff1a;一个神奇的 Python HTTP客户端1. 背景&#xff1a;为什么选择 httpx&#xff1f;2. httpx 是什么&#xff1f;3. 如何安装 httpx&#xff1f;4. 简单的库函数使用方法5. 场景应用6. 常见问题及解决方案7. 总结 httpx&#xff1a;一个神奇的 Python H…

第 8 章 数据的家——MySQL的数据目录

8.1 数据库和文件系统的关系 数据库把表存储在文件系统上。当我们读取数据时&#xff0c;存储引擎会从文件系统中把数据读出来返回给我们&#xff1b;当我们写入数据时&#xff0c;存储引擎会把这些数据写回文件系统。 8.2 MySQL数据目录 8.2.1 数据目录和安装目录的区别 数…

C++从入门到起飞之——list模拟实现 全方位剖析!

​ ​ ​ &#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 ​ ​1、list的整体框架 2、list迭代器 >整体分析 >整体框架 >成员函数 >运…

操作系统:实验六文件操作实验

一、实验目的 1、了解文件系统功能及实现原理。 2、掌握LINUX下文件操作的有关系统调用。 3、熟悉main函数带参数运行的有关操作过程。 4、通过模拟程序实现简单的一级文件系统或二级文件系统。 二、实验内容 1、编程显示文件自身。&#xff08;1分&#xff09; #includ…

分享两个方法分析python打包exe

在Python开发中&#xff0c;常常需要将Python脚本打包成独立的可执行文件&#xff0c;以便在没有Python环境的电脑上运行。你是否曾为此感到困惑&#xff0c;不知道该选择哪种工具来实现这一目标&#xff1f;其实&#xff0c;打包Python脚本并不难&#xff0c;关键在于选择合适…

Mybatis框架——缓存(一级缓存,二级缓存)

本章将简单介绍Mybatis框架中的缓存&#xff0c;欢迎大家点赞➕收藏&#xff0c;蟹蟹&#xff01;&#xff01;&#xff01;&#x1f495; &#x1f308;个人主页&#xff1a;404_NOT_FOUND &#x1f308;MyBatis环境搭建步骤&#xff08;超全解析&#xff01;&#xff01;&am…

AI写论文真的可靠吗?免费推荐6款AI论文写作助手

在当今的学术研究和写作领域&#xff0c;AI论文写作助手已经成为不可或缺的工具。这些工具不仅能够提高写作效率&#xff0c;还能帮助研究者生成高质量的论文。以下是六款免费推荐的AI论文写作助手&#xff0c;包括千笔-aipasspaper&#xff0c;它们各自具有独特的功能和优势。…

【hot100篇-python刷题记录】【最小路径和】

R6-多维动态规划篇 好经典的dp题&#xff0c;纯粹的题。 多维动态规划无论是二维还是三维&#xff0c;无非是创建dp表&#xff0c;dp[][][][][][]即可 动态规划式子 dp[i][j]当前值min(dp[i][j-1],dp[i-1][j]) 边界问题处理&#xff1a;是否存在即可。哦对了好像不用这样&a…

探索异步之美:aiohttp库的魔力与奥秘

文章目录 探索异步之美&#xff1a;aiohttp库的魔力与奥秘背景&#xff1a;为何选择aiohttp&#xff1f;什么是aiohttp&#xff1f;如何安装aiohttp&#xff1f;简单函数使用方法场景应用常见Bug及解决方案总结 探索异步之美&#xff1a;aiohttp库的魔力与奥秘 背景&#xff1…

Linux教程七:文件目录类命令ls、cd(图文详解)

默认登录出现一个[用户localhost ~] 代表时登陆用户的家目录 1、 Linux ls命令 基本用法 ls&#xff1a;列出当前目录下的文件和目录&#xff08;不包括以.开头的隐藏文件&#xff09;。ls 目录名&#xff1a;列出指定目录下的文件和目录。 常用选项 -l&#xff1a;以长格式列出…