2.docker架构,原理,安装及简单应用

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: docker的架构先来看docker官网给出的docker架构图:

一. docker的架构


1.1 docker的架构


先来看docker官网给出的docker架构图:

微信图片_20220512094123.png

 


 

看官网,docker的架构描述: https://docs.docker.com/get-started/overview/


Docker使用客户端-服务器架构。Docker 客户端与Docker 守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。Docker客户端和守护程序可以 在同一系统上运行,也可以将Docker客户端连接到远程Docker守护程序。Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通信。

 

从上图我们也可以看出, 整体分为三个部分: docker客户端, docker后台(相当于一个小型的linux), docker仓库. 接下来一个一个看.


1. Docker客户端--The Docker client


Docker客户端是许多Docker用户与Docker交互的主要方式。当您使用诸如之类的命令时docker run,客户端会将这些命令发送到dockerd,以执行它们。该docker命令使用Docker API。Docker客户端可以与多个守护程序通信。


2. Docker守护程序 -- The Docker daemon


Docker守护程序(dockerd)侦听Docker API请求并管理Docker对象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理Docker服务。


3. Docker仓库 -- Docker registries


Docker registries存储Docker映像。Docker Hub是任何人都可以使用的公共注册表,并且默认情况下,Docker已配置为在Docker Hub上查找映像。您可以运行自己的私人注册表。如果使用Docker数据中心(DDC),则其中包括Docker可信registries(DTR)。

使用docker pulldocker run命令时,所需的图像将从配置的注册表中提取。使用该docker push命令时,会将映像推送到配置的注册表。


1.2 docker的基本元素 -- Docker对象


通过上面的架构图, 我们可以看到docker主要包含: 镜像, 容器, 仓库. 下面就来具体看看这几个概念


1. images


一个图像是用于创建一个码头工人容器指令的只读模板。通常,一个映像基于另一个映像,并进行一些其他自定义。例如,您可以基于该ubuntu 映像构建映像,但是安装Apache Web服务器和您的应用程序,以及运行该应用程序所需的配置详细信息。

您可以创建自己的图像,也可以仅使用其他人创建并在注册表中发布的图像。要构建自己的映像,您可以 使用简单的语法创建一个Dockerfile,以定义创建映像并运行它所需的步骤。Dockerfile中的每个指令都会在映像中创建一个层。当您更改Dockerfile并重建映像时,仅重建那些已更改的层。与其他虚拟化技术相比,这是使映像如此轻巧,小型和快速的部分原因。


2. container


容器是图像的可运行实例。您可以使用Docker API或CLI创建,启动,停止,移动或删除容器。您可以将容器连接到一个或多个网络,将存储连接到它,甚至根据其当前状态创建新映像。


默认情况下,容器与其他容器及其主机之间的隔离程度相对较高。您可以控制容器的网络,存储或其他基础子系统与其他容器或与主机的隔离程度。

容器由其映像以及在创建或启动时为其提供的任何配置选项定义。删除容器后,未存储在持久性存储中的状态更改将消失。


3. 仓库


仓库是存放镜像的地方, 分为共有仓库和私有仓库


共有仓库: dockerHub(国外) , 阿里云(国内)


私有仓库: 自定义的仓库

 

二.docker的安装及应用


1. docker支持的centos版本


  • Centos7(64-bit)


  • Centos6.5(64-bit)


2. docker安装的前提条件


  • 目前centos仅发行版本的内核支持docker


  • docker运行在centos7上, 要求系统为64位,系统内核版本为3.10以上


  • docker运行在centos6.5或更高版本上,要求系统64位,系统内核版本为2.6.32-431或者更高版本


uname命令打印系统相关信息


uname -r


 

微信图片_20220512094152.png微信图片_20220512094155.png

 

 

我的服务器版本是5.10.23, 64位

 

查询系统版本


cat /etc/redhat-release    或者  cat /etc/os-release


微信图片_20220512094211.png

 

3. centos6.5及以上的安装docker


安装docker, 我们主要借助于帮助文档, 文档地址:


https://docs.docker.com/engine/install/, 对照文档安装


第一步: 卸载旧版本的docker


sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

 微信图片_20220512094241.png

 

如上图所示, 表示之前没有安装过docker, 如果安装过, 会提示,卸载完毕.


第二步: 安装docker


官网给出, 安装docker有三种方法:


  • 第一种: 是从仓库安装,


  • 第二种是通过RPM包安装,


  • 第三种是通过脚本安装.


我们这里采用第一种从仓库安装


1. 安装docker前需要安装的依赖包


yum install -y yum-utils


2. 设置镜像仓库


在一台新的主机上首次安装docker engine之前, 需要先设置docker镜像仓库, 后面可以从镜像仓库安装和更新docker.


镜像仓库官网给的是国外的, 我们尽量不用, 速度太慢


sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo


 我们百度搜索, 找到阿里云docker镜像参考的地址, 国内使用这个


sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 微信图片_20220512094338.png

 

3. 安装最新版docker引擎


安装引擎之前, 先来安装yml软件包索引


yum makecache fast


这个命令什么意思呢? 科普一下


我们在更新yum源或者出现配置yum源之后,通常都会使用yum makecache 生成缓存
yum makecache fast
这个命令是将软件包信息提前在本地缓存一份,用来提高搜索安装软件的速度
yum clean all
yum 会把下载的软件包和header存储在cache中而不自动删除。如果觉得占用磁盘空间,可以使用yum clean指令清除缓存。


然后安装docker


sudo yum install docker-ce docker-ce-cli containerd.io


这里安装了docker, docker-cli 和容器. docker-ce是社区版的意思, docker-ee是企业版. 通常我们使用的都是社区版的.

 

注意: 有很多朋友使用的linux服务器, 这里在执行这个命令的时候, 会报错:


微信图片_20220512094518.png

 

 

这里报错的原因是, 阿里云操作系统是Alibaba Cloud Linux, 而不是存粹的centOS, 这时我们可以参考阿里云提供的docker安装文


档: https://help.aliyun.com/document_detail/264695.html

 

4. 启动docker


systemctl start docker


5. 检查是否安装成功


docker version


6. 拉取docker镜像拉取helloworld


 微信图片_20220512094551.png


7. 配置阿里云镜像加速器


第一步:访问国内阿里云的网址
dev.aliyun.com
第二步:登录
第三步: 获取镜像地址在产品与服务-->搜索"容器镜像服务" --> 镜像工具 --> 镜像加速器 --> 复制镜像加速器地址
https://cr.console.aliyun.com/cn-hangzhou/instances/repositories


配置方法:


微信图片_20220512094717.png

 

 

sudo mkdir -p /etc/docker


sudo tee /etc/docker/daemon.json <<-'EOF'


{


  "registry-mirrors": ["https://6w5zrjdk.mirror.aliyuncs.com"]


}


EOF


sudo systemctl daemon-reload


sudo systemctl restart docker


三. docker的底层原理


1. docker是怎么工作的?


微信图片_20220512094731.png

 

 

docker是一个client-server结构的系统,Docker的守护进程运行在主机上, 然后通过Socket连接从客户端访问, 守护进程从客户端接受命令并管理运行在主机上的容器, 容器,是一个运行时环境, 就是我们前面说到的集装箱

 

客户端通过socket连接到后台守护进程, 然后通过命令告诉守护进程, 调用容器. 可见容器和客户端是互相隔离的. 我们可以把容器理解为一个小型的linux, 他有自己的端口号, 比如mysql容器端口号是3306, 容器中的端口, 通过客户端是不能直接访问的. 我们需要做端口映射.


2. 虚拟机和容器的区别


微信图片_20220512094742.png



docker将虚拟机的Hypervisor和操作系统应将cpu, 内存等去掉了. 替换成了Docker Engine. 而这两块恰恰就是虚拟机笨重的地方. docker共享了宿主机的操作系统, 内核, cpu. 省略了自己构建的过程.


  docker容器 虚拟机VM
操作系统 与宿主机共享OS

宿主机OS上运行虚拟机OS

存储大小 镜像小, 便于存储和传输 镜像庞大(vmdk, vdi等)
运行性能 几乎无额外性能损失 操作系统额外的CPU,内存消耗
移植性 轻便,灵活,适用于linux系统 笨重, 与虚拟机技术耦合度高
硬件亲和性 面向软件开发者 面向硬件运维者
部署速度 快速, 秒级 较慢, 10s以上

 

 

以上是虚拟机和容器的区别

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
10天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
22天前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
24天前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
46 3
|
27天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
61 1
|
9天前
|
NoSQL 关系型数据库 MySQL
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
107 56
《docker高级篇(大厂进阶):4.Docker网络》包括:是什么、常用基本命令、能干嘛、网络模式、docker平台架构图解
|
23天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
25天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
32 5
|
25天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
53 4
|
25天前
|
存储 缓存 运维
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像。此机制减少存储占用,提高构建和传输效率。Docker还通过缓存机制提升构建和运行效率,减少重复工作。文章深入解析了Docker镜像分层存储与缓存机制,包括具体实现、管理优化及实际应用案例,帮助读者全面理解其优势与挑战。
43 4
|
27天前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
57 1