Docker——初识

目录

一、技术架构的演进之路

1、单机架构

2、应用数据分离架构

3、应用服务集群架构

4、读写分离/主从分离架构

5、引用缓存------冷热分离架构

6、垂直分库架构

7、微服务架构

8、容器编排架构

二、docker简介

1、物理机

2、虚拟化

3、容器化

三、容器化虚拟化的必要性

1、资源利用率高

2、环境标准化

3、资源弹性伸缩

4、差异化环境提供

5、沙箱安全

6、容器对比虚拟机更轻量,启动服务更快

7、维护和拓展交易

四、docker和虚拟机的区别

五、docker为什么比虚拟机资源利用率高,启动快

六、docker的架构

七、安装docker

1、server版本安装(ubuntu)

(1)安装依赖:

①操作系统的版本

②CPU支持

(2)安装docker

①确定CPU

②确定操作系统版本

③卸载旧版本

④卸载历史版本

⑤配置docker下载源

⑥安装

⑦配置和启动

(3)常见报错

(4)实战经验

①docker镜像源的修改

②docker目录的修改

2、Windows版本安装(GUI版本)

(1)安装依赖


一、技术架构的演进之路

1、单机架构

2、应用数据分离架构

3、应用服务集群架构

1、nginx是用来做负载均衡的,可以把它理解为应用层之上,它的上限是5万并发

2、如果nginx再处理不了就在之上再加一层,把它交到它的上层LVS/F5,百万级并发

3、如果还不行就再加,DNS

4、如果还不行就把数据交给上一层(浏览器)

4、读写分离/主从分离架构

5、引用缓存------冷热分离架构

6、垂直分库架构

7、微服务架构

8、容器编排架构

二、docker简介

1、物理机

物理机:实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境,有时也称为"寄主"或"宿主"。

2、虚拟化

是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

3、容器化

容器化是一种虚拟化技术,又称操作系统层虚拟化。这种技术将操作系统内核虚拟化,可以允许用户空间软件实例被分割成几个独立的单元,在内核中运行,而不是只有一个单一实例运行。这个软件实例,也被称为是一个容器(containers)。对每个实例的拥有者与用户来说,他们使用的服务器程序,看起来就像是自己专用的。容器技术是虚拟化的一种。docker是现今容器技术的事实标准。

三、容器化虚拟化的必要性

虚拟化和容器化的最主要目的就是资源隔离,随着资源隔离的实现逐渐也带来了更大的收益。

1、资源利用率高

将利用率较低的服务器资源进行整合,用更少硬件资源运行更多业务,降低IT支出和运维管理成本。

2、环境标准化

一次构建,随处执行。实现执行环境的标准化发布,部署和运维。开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现"这段代码在我机器上没问题啊"这类问题。

3、资源弹性伸缩

根据业务情况,动态调整计算、存储、网络等硬件及软件资源。比如遇到双11了,把服务扩容100个,双11过去了,把扩容的100个收回去。

4、差异化环境提供

同时提供多套差异化的执行环境,限制环境使用资源。

比如我的服务一个以来Ubuntu操作系统,一个服务依赖CentOS操作系统,但是没有预算购买两个物理机,这个时候容器化就能很好的提供多种不同的环境。

5、沙箱安全

为避免不安全或不稳定软件对系统安全性、稳定性造成影响,可使用虚拟化技术构建虚拟执行环境。比如我在容器里面执行rm-rf/*不会把整个服务器搞死,也不影响其他人部署的程序使用。

6、容器对比虚拟机更轻量,启动服务更快

7、维护和拓展交易

Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。比如dockerhub提供了很多镜像,各个系统的一个命令就可以拿到了,研发也可以自己定制镜像分享给各个产品。

四、docker和虚拟机的区别

|---------|-----------------------------------|-------------------------------|
| | 传统虚拟机 | docker容器 |
| 磁盘占用 | 几个 GB 到几十个 GB 左右 | 几十 MB 到几百 MB 左右 |
| CPU内存占用 | 虚拟操作系统非常占用 CPU 和内存,需要通 过虚拟层调用占用率高 | Docker 引擎占用资源极低,直接作用于硬件资源 占用少 |
| 启动速度 | (从开机到运行项目) 几分钟 | (从开启容器到运行项目)几秒 |
| 安装管理 | 需要专门的运维技术 | 安装、管理方便 |
| 应用部署 | 系统级别 | 进程级别 |
| 封装程度 | 打包整个操作系统 | 打包项目代码和依赖信息 |

五、docker为什么比虚拟机资源利用率高,启动快

**docker有比虚拟机更少的抽象层。**docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的是实际物理机的硬件资源。因此在cpu、内存利用率上docker将会在效率上有明显的优势。docker利用的是宿主机的内核,而不需要Guest OS,节省了Guest Os占用的资源。

**docker不需要GuestOS。**创建一个容器时,不需要和虚拟机一样重新加载一个操作系统内核。从而避免引寻,加载操作系统内核返回时耗时耗资源的过程,当新建一个虚拟机时,虚拟机软件需要加载GuestOS,返回新建过程是分钟级别的。而新建一个docker容器只需要几秒钟。

六、docker和JVM虚拟化的区别

|-------|-----------------------------------------------------|-------------------------------------|
| | JVM | Docker容器 |
| 性能 | Jvm 需要占用一定的CPU 和内存 | 基本没有损失 |
| 虚拟层面 | 基于 JVM 虚拟机,更加层 | 基于操作系统,更加通用 |
| 代码无关性 | 一个特定代码的执行平台, 它是运行时才存在的,只能 支撑特定代码的执行,并且 必须是在 jvm 进程内 | 模拟了一整个操作系统,它是静态存在的, 可以支撑任何相同平台的应用程序 |
| 主机隔离性 | jvm 不隔离主机 | 通过命名空间实现隔离 |

六、docker的架构

解释:

Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过Docker镜像来创建。

1、Docker仓库(Registry)

Docker仓库用来保存镜像,可以理解为代码控制中的代码仓库。DockerHub供了庞大的镜像集合供使用。

2、Docker daemon

Dockerdaemon是服务器组件,是Docker最核心的后台进程,我们也把它称为守护进程。它是所有Docker操作的"总管家",负责管理和维护Docker的所有资源,并响应来自Docker客户端的所有指令。

3、docker客户端(client)

Docker客户端通过命令行或者其他工具使用DockerAPI与Docker的守护进程通信。

4、docker主机(host)

一个物理或者虚拟的机器用于执行Docker守护进程和容器。

5、docker镜像(images)

Docker镜像是用于创建Docker容器的模板。

6、docker容器(container)

容器是独立运行的一个或一组应用。

七、安装docker

有server版本和桌面版本,重心放在桌面版本

1、server版本安装(ubuntu)

(1)安装依赖:

①操作系统的版本

建议ubuntu20.04往上的版本

②CPU支持

ARM64和X86_64两种

(2)安装docker

①确定CPU
bash 复制代码
uname -a
②确定操作系统版本
bash 复制代码
cat /etc/*release*
③卸载旧版本
bash 复制代码
sudo apt-get remove docker docker-engine docker.io containerd runc
④卸载历史版本
bash 复制代码
#卸载软件
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y
bash 复制代码
#删除目录
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
⑤配置docker下载源
bash 复制代码
#curl命令安装--curl理解为一个客户端
sudo apt install curl -y
bash 复制代码
#创建gap key目录--校验公钥
sudo mkdir -m 0755 -p /etc/apt/keyrings
bash 复制代码
#下载 gpg key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --yes -o /etc/apt/keyrings/docker.gpg
bash 复制代码
#配置docker源
echo \
 "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] 
https://download.docker.com/linux/ubuntu \
 $(lsb_release -cs) stable" | sudo tee 
/etc/apt/sources.list.d/docker.list > /dev/null
⑥安装
bash 复制代码
#安装
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
⑦配置和启动
bash 复制代码
#自动启动配置

#配置加载
sudo systemctl daemon-reload 
#启动服务
sudo systemctl start docker 
#开启启动
sudo systemctl enable docker
#查看服务状态
sudo systemctl status docker
bash 复制代码
#检查安装结果查看版本
docker version

#更详细的docker信息
docker info

(3)常见报错

查看日志

bash 复制代码
#journalctl 是操作系统日志查看命令
#-e 表示从末尾看
#-u 表示看哪个系统组件的,我们的组件是 docker

journalctl -eu docker

(4)实战经验

①docker镜像源的修改

/etc/docker/daemon.json 中加入:

bash 复制代码
#腾讯云
{
 "registry-mirrors": ["https://mirror.ccs.tencentyun.com"]
}

#阿里云
{
 "registry-mirrors": [
 "https://docker.m.daocloud.io",
 "https://dockerhub.timeweb.cloud",
 "https://huecker.io"
 ]
}
bash 复制代码
#重新启动
sudo systemctl daemon-reload
sudo systemctl restart docker
②docker目录的修改

docker默认的安装目录为/var/lib/docker,这里面会存放很多镜像,所以安装的时候要考虑这个目录的空间。

有以下方法:

将/var/lib/docker挂载到一个大的磁盘。

安装之前挂载一个大的磁盘,然后创建一个软链接到/var/lib/docker,这样就自动安装到我们空间比较大的磁盘了

安装了docker,然后发现忘了配置这个自录,我们需要修改docker的配置文件

现在假设要把修改到/data/var/lib/docker:

bash 复制代码
mkdir -p /data/var/lib/docker
# 编辑配置文件
vi /etc/docker/daemon.json
# 输入下面的 json
{
"data-root": "/data/var/lib/docker"
}

# 加载配置
sudo systemctl daemon-reload 
# 重启 docker
sudo systemctl restart docker 
#查看 docker 状态
sudo systemctl status docker

2、Windows版本安装(GUI版本)

(1)安装依赖

①确定开启虚拟化

④重启电脑

⑤安装WSL2

以管理员权限运行PowerShell

查看版本,如果不是2需要更新到2

bash 复制代码
wsl --status

PowerShell运行命令更新wsl到最新版本

bash 复制代码
wsl --update

设置wsl默认版本

bash 复制代码
 wsl --set-default-version 2

⑥通过微软应用商店安装Ubuntu子系统并打开

⑦安装docker

在官网下载docker安装包并安装,

桌面点击快捷方式进行运行docker,

确认Docker安装成功,在PowerShell中输入dockerversion命令确认 Client和Server是否启动

相关推荐
素雪风华8 小时前
只使用Docker+Maven实现全自动化流程部署服务;Docker创建ffmpeg环境;
java·运维·后端·docker·容器·自动化·maven
你想考研啊8 小时前
k8s使用kubectl报错
java·docker·kubernetes
cccyi78 小时前
高级I/O编程:从Select、Poll到Epoll的演进与Reactor服务器实现
服务器·c++·reactor
●VON8 小时前
小V健身助手开发手记(六):KeepService 的设计、实现与架构演进
学习·架构·openharmony·开源鸿蒙·von
前端不太难8 小时前
RN Navigation vs Vue Router 的架构对比
javascript·vue.js·架构
老蒋新思维8 小时前
创客匠人:工作流嵌入式智能体,重构知识变现的效率底层
大数据·服务器·人工智能·重构·创始人ip·创客匠人·知识变现
小张帅三代8 小时前
华为昇腾服务器ubuntu安装Anaconda步骤
运维·服务器·ubuntu
陈逸轩*^_^*8 小时前
微服务常见八股(分布式seat, 网关,服务注册与发现、负载均衡、断路器、API 网关、分布式配置中心)
java·微服务
杜子不疼.8 小时前
【Linux】 进程控制(二):进程等待(wait/waitpid) 与 子进程获取(status)
linux·运维·服务器