2.docker安装及原理
一. docker的架构
1.1 docker的架构
先来看docker官网给出的docker架构图:
看官网,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 pull
或docker 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)
- 阿里云服务器:Alibaba Cloud Linux 参考阿里云安装docker文档:https://help.aliyun.com/document_detail/264695.html
2. docker安装的前提条件
- 目前centos仅发行版本的内核支持docker
- docker运行在centos7上, 要求系统为64位,系统内核版本为3.10以上
- docker运行在centos6.5或更高版本上,要求系统64位,系统内核版本为2.6.32-431或者更高版本
uname命令打印系统相关信息
uname -r
我的服务器版本是5.10.23, 64位
查询系统版本
cat /etc/redhat-release 或者 cat /etc/os-release
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
如上图所示, 表示之前没有安装过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
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服务器, 这里在执行这个命令的时候, 会报错:
这里报错的原因是, 阿里云操作系统是Alibaba Cloud Linux, 而不是存粹的centOS, 这时我们可以参考阿里云提供的docker安装文档: https://help.aliyun.com/document_detail/264695.html
4. 启动docker
systemctl start docker
5. 检查是否安装成功
docker version
6. 拉取docker镜像拉取helloworld
7. 配置阿里云镜像加速器
第一步:访问国内阿里云的网址
dev.aliyun.com第二步:登录
第三步: 获取镜像地址
在产品与服务-->搜索"容器镜像服务" --> 镜像工具 --> 镜像加速器 --> 复制镜像加速器地址
https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
配置方法:
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是怎么工作的?
docker是一个client-server结构的系统,Docker的守护进程运行在主机上, 然后通过Socket连接从客户端访问, 守护进程从客户端接受命令并管理运行在主机上的容器, 容器,是一个运行时环境, 就是我们前面说到的集装箱
客户端通过socket连接到后台守护进程, 然后通过命令告诉守护进程, 调用容器. 可见容器和客户端是互相隔离的. 我们可以把容器理解为一个小型的linux, 他有自己的端口号, 比如mysql容器端口号是3306, 容器中的端口, 通过客户端是不能直接访问的. 我们需要做端口映射.
2. 虚拟机和容器的区别
docker将虚拟机的Hypervisor和操作系统应将cpu, 内存等去掉了. 替换成了Docker Engine. 而这两块恰恰就是虚拟机笨重的地方. docker共享了宿主机的操作系统, 内核, cpu. 省略了自己构建的过程.
docker容器 | 虚拟机VM | |
---|---|---|
操作系统 | 与宿主机共享OS | 宿主机OS上运行虚拟机OS |
存储大小 | 镜像小, 便于存储和传输 | 镜像庞大(vmdk, vdi等) |
运行性能 | 几乎无额外性能损失 | 操作系统额外的CPU,内存消耗 |
移植性 | 轻便,灵活,适用于linux系统 | 笨重, 与虚拟机技术耦合度高 |
硬件亲和性 | 面向软件开发者 | 面向硬件运维者 |
部署速度 | 快速, 秒级 | 较慢, 10s以上 |
以上是虚拟机和容器的区别
2.docker安装及原理的更多相关文章
- 2、docker安装:内核要求、docker三要素、安装、helloworld、底层原理
1.前提说明 1.CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 2.前提条件:内 ...
- [原][Docker]特性与原理解析
Docker特性与原理解析 文章假设你已经熟悉了Docker的基本命令和基本知识 首先看看Docker提供了哪些特性: 交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上, ...
- 使用docker安装部署Spark集群来训练CNN(含Python实例)
使用docker安装部署Spark集群来训练CNN(含Python实例) http://blog.csdn.net/cyh_24/article/details/49683221 实验室有4台神服务器 ...
- centos7之docker安装
下午四点左右,我准备接触docker这个技术.之所以接触它,原因来自tomcat服务器老是挂,也不能说老是挂,一周一次吧,或者不定时,最初出现的问题,分为这么几类? 一类,java代码的问题,某个类导 ...
- Docker容器的原理与实践(上)
本文来自网易云社区. 虚拟化 是一种资源管理技术,将计算机的各种资源予以抽象.转换后呈现出来, 打破实体结构间的不可切割的障碍,使用户可以比原本更好的方式来应用这些资源. Hypervisor 一种运 ...
- 利用Docker安装Web前端性能测试工具Sitespeed.io
目录结构 一.Sitespeed.io概述 1.Sitespeed.io简介 2.Sitespeed.io使用场景 二.Sitespeed.io的安装和使用 1.安装Sitespeed.io 2.连接 ...
- Docker安装及常用操作
Docker简介: Docker是一个轻量级容器技术,类似于虚拟机技术,但性能远远高于虚拟机,Docker支持将软件编译成一个镜像(image),在这个镜像中做好对软件的各种配置,然后可以运行这个镜像 ...
- Docker系列-(1) 原理与基本操作
Docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0协议开源. Docker可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任何流行的Linux机器 ...
- Docker系列之原理简单介绍
目录 1.1.Docker架构简介 1.2.Docker 两个主要部件 1.3.虚拟机和Docker对比: 1.4.Docker内部结构 Docker系列之原理简单介绍 @ Docker是一个开源的应 ...
随机推荐
- Java基础技术-Java其他主题【面试】
Java基础技术-Java其他主题[面试] Java基础技术IO与队列 Java BIO.NIO.AIO Java 中 BIO.NIO.AIO 的区别是什么? 含义不同: BIO(Blocking I ...
- 微信SDK的使用
一.导入依赖 <!--微信支付--> <dependency> <groupId>com.github.wxpay</groupId> <arti ...
- efcore分表下"完美"实现
ShardingCore 如何呈现"完美"分表 这篇文章是我针对efcore的分表的简单介绍,如果您有以下需求那么可以自己选择是否使用本框架,本框架将一直持续更新下去,并且免费开源 ...
- spring-boot 2.5.4,nacos 作为配置、服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD
spring-boot 2.5.4,nacos 作为配置.服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD 本文主要介绍 Java 通过 Cloud N ...
- SQL 练习40
按照出生日期来计算学生的年龄信息 IF OBJECT_ID('GetStudentAge','FN') IS NOT NULL DROP FUNCTION GetStudentAge GO CREAT ...
- SQL 练习4
查询不存在" 01 "课程但存在" 02 "课程的情况 SELECT * from sc WHERE cid = '02' AND sid not in (SE ...
- GC垃圾收集器
垃圾收集器是垃圾收集算法的具体实现,是执行垃圾收集算法的,是守护线程. HotSport虚拟机采用分代收集(JVM规范并未对堆区进行划分),将堆分为年轻代和老年代,垃圾收集器也是这样组合使用的,不过已 ...
- Ant的使用(一)
<?xml version="1.0" encoding="UTF-8"?> <project name="projectName& ...
- mzy,struts学习(一)
大家都在讲struts已经过时了,现在都是前后台分离,没有必要去学一个淘汰的框架,但是怎么讲呢?我觉得,struts能够流行那么多年,肯定有它的原因,肯定有很多优秀和好的地方,有一个指导过我的人给我讲 ...
- SpEL表达式注入漏洞学习和回显poc研究
目录 前言 环境 基础学习和回显实验 语法基础 回显实验 BufferedReader Scanner SpEL漏洞复现 低版本SpringBoot中IllegalStateException CVE ...