1、Docker概述与安装

相关资源网站:
● docker官网:http://www.docker.com
● Docker Hub仓库官网: https://hub.docker.com/
注意,如果只是想看Docker的安装,可以直接往下拉跳转到Docker架构与安装章节下的Docker具体安装步骤,一步步带你安装自己的Docker;

Docker简介概述

Docker对我来说是一种全新技术,既然是全新的技术那么我就不禁要问了,Docker它到底是什么东西?它是基于什么场景下出现的,解决了什么问题呢?

Docker技术入门理解

首先什么是Docker?
Docker 是使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于 LXC,从 0.7 版本以后开始去除 LXC,转而使用自行开发的 libcontainer,从 1.11 开始,则进一步演进为使用 runC 和 containerd。Docker 在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护,使得 Docker 虚拟技术比虚拟机技术更为轻便、快捷。
以上是我在网上搜刮出来的定义,很生硬,但可以简单地将Docker理解为一种类似于Linux虚拟机的虚拟化技术;
那么为什么会出现Docker这种虚拟化技术呢?它解决了什么问题?
我们来看一下下面这个场景:
假如说在你入职一个公司后,在公司参与开发了公司的一个项目,你使用的电脑中具有特定配置的开发环境,也就是说跟公司的其他开发人员的环境配置各有不同;你正在开发的应用肯定是依赖于你当前的环境配置以及某些配置文件,除此之外,公司也有一套标准化的测试和生产环境、以及自身的配置和一系列的支持文件的;你是不是遇到过自己在本地跑项目的时候是没有问题的,一推到线上或者代码给到运维跑的时候就出现了奇奇怪怪的Bug各种令人头疼;
这个时候一番扯皮推卸责任的免不了的;那么问题来了,你要如何确保你开发的应用能够在这些环境中运行和通过质量检测?并且在部署过程中不出现令人头疼的版本、配置问题,也无需重新编写代码和进行故障修复呢?
这就是Docker所解决的问题,它对此给出了一个标准化的解决方案,即系统平滑移植,容器虚拟化技术。
在没有Docker之前,开发人员将系统源代码提交给运维之后,运维就需要拿着这份源代码进行项目部署,但是在进行部署的时候就有可能会遇到一些问题,比如说环境不一致的问题,就像上面说的,开发环境跟运维环境不一致,这就需要运维人员根据开发人员给的版本清单,一步一步的进行手动安装环境,异常麻烦;而且更致命的是,若果开发的项目是分布式集群项目,每个集群中的每台机器都要安装一下环境,要是此时有任何一台机器在安装过程中出现了差错,都有可能导致项目部署失败;
还有就是若果说开发的系统需要进行机器扩容,增加某个集群的机器,这对运维来说也是一个难题;

上面一系列下来可以看出,环境的配置过程相当麻烦,换一台机器,就要重来一次,费力费时;而引入了Docker之后,假如说现在项目在开发环境下是完全百分百可以运行的,不管是源码、配置、环境、版本等都没有问题,这个时候Docker就可以将这一整套东西打包成一个镜像文件,你可以将这个镜像文件发送到任何平台环境,运行这个镜像文件时会开启一个容器,不管你是在什么环境下运行都与你在开发时的环境一模一样,相当于在开发环境中运行这个项目,达到应用平台无缝衔接;

为什么要选择Docker呢?用虚拟机技术不是也能达到类似效果吗?
首先Docker 容器的本质可以理解为通过容器虚拟技术,利用宿主机的硬件资源来虚拟出的一台主机,就像虚拟机一样,可以将应用及其运行环境部署在这台虚拟出的“主机”(容器)上运行。但容器与传统的虚拟机技术(VMware、VirtualBox等运行的虚拟机技术)又有着本质的不同。
在这里插入图片描述
传统的虚拟机技术
传统的虚拟技术是在物理机的操作系统之上安装一个虚拟机管理程序,例如 VMware、 VirtualBox 等,在虚拟机管理程序的管理下,使用者可以在同一个物理服务器上创建多个虚拟机,每个虚拟机需要安装自己独立的操作系统,而应用就是安装在虚拟机的操作系统之上的程序,应用程序通过调用各种命令或库函数来使用其需要的各种系统资源。
在这种情况下对于完全相同的两个应用,若它们需要运行在两个虚拟机中,就需要两套完全相同的虚拟机操作系统与 bins/libs,如上图左侧所示,存在大量的资源占用冗余,形成资源浪费。
Docker容器虚拟化技术
因为Docker 容器运行在 Docker 引擎之上,是在宿主机服务器的操作系统层面实现的虚拟化,可以直接复用本地物理主机的操作系统;所有 Docker 容器都共享同一个 Docker 引擎,所以不需要像传统虚拟机一样需要另外的虚拟硬件及虚拟操作系统, 而是共享的宿主机的硬件与操作系统,但它们的运行环境又是相互隔离、互不干扰的。并且所有 Docker 容器对于系统硬件资源的使用都是由 Docker 引擎统一进行管理,所以对系统资源的占用很少,其仅包含 运行时必须的一些资源,利用率很高。无论是应用执行速度、内存损耗或者文件存储速度, 都要比传统虚拟机技术更高效。

小结Docker解决的问题

1、 提供统一的运行环境
在生产环境中,很多时候的开发、测试及上线环境都是不一样的,从而导致项目(war 或 jar)在不同阶段出现很多其它阶段所不存在的奇怪的问题。 Docker 容器除了可以提供相同的应用外,还提供了该应用的统一运行环境,确保在任 何宿主机 HOST 上都可以跑出相同的结果。即 Docker = jar/war + 环境。
2、 便捷的应用迁移
由于 Docker 确保了统一的运行环境,使得应用的迁移更加便捷。无论是物理机、虚拟 机、公有云、私有云,Docker 镜像的运行结果都是相同的。用户可以很方便地将一个平台 上运行的应用,迁移到另一个平台上,而无需担心运行环境的变化导致应用无法正常运行。
3、 超快的启动时间
传统的虚拟机技术启动应用一般需要数分钟:首先需要启动虚拟机,然后再加载虚拟机 操作系统,最后还需要再手工启动应用。而 Docker 容器应用,由于直接运行于宿主机系统 中,无需启动操作系统,因此可以做到秒级、甚至毫秒级的启动。
4、 更轻松的维护和扩展
Docker 公司及各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在 生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。
Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应 用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。

Docker架构与安装

阅读docker官方的Guides文档可以发现,Docker系统整体上主要包含客户端Client、宿主机DOCKER_HOST(服务端)和仓库Register三大部分。我们日常使用各种 docker 命令,其实就是在使用Client 客户端工具 给 Docker 引擎(服务端守护进程Docker daemon) 提交请求进行交互,如下图所示。
在这里插入图片描述

1、Client 客户端

Docker 是一个客户端-服务器(C/S)架构程序。Docker 客户端只需要向 Docker 服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。
Client 能够帮助我们使用命令行与 Docker 服务端进行交互,包括本地服务端和远程服务端:
通过-H参数可以指定客户端连接的服务端:docker -H host

2、Registry 仓库

镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。一个 Docker Registry 中可以包含多个 仓库(Repository);每个仓库可以包含多个 标签(Tag);每个标签对应一个镜像。Docker 公司运营公共的 Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号,分享并保存自己的镜像。

3、Docker 引擎(服务器端)

服务端会启动一个守护进程 Docker Daemon ,通过 socket 或者 RESTful API 监听来自客户端的请求,并且处理这些请求,实现对镜像和容器的操作。 守护进程可以 管理 Docker 对象(例如镜像、容器、网络和卷);还可以与其他守护进程通信以管理 Docker 服 务。

Docker的安装介绍

Docker 可以安装在 Windows、Linux、Mac 等系统中,我们经常说的安装Docker其实主要就是安装Docker引擎,只是为了简单直接说安装Docker而已;在安装 Docker 之前需要先了解 Docker 官方对其版本的分类。Docker 的版本分为大版本 与小版本。
Docker 从大版本来说,分为三类:Moby、社区版 Docker-CE(Community Edition)和企业版 Docker-EE(Enterprise Edition)。
从 v1.13.1 之后,Docker 的发布计划发生了变更,每个大版本下都出现了两个小版 本 Edge 月版与 Stable 季版。不过,现在的官网中一般只能看到 Stable 版本。
由于生产环境下,服务器使用 Linux 的居多,所以下面就以 Docker 在 CentOS7 中的安装为例来学习 Docker 的安装;
注意,虽然Docker可以安装在 Windows、Linux、Mac 等系统中,但Docker并非是一个通用的容器工具,它需要依赖于已存在并运行的 Linux内核环境。Docker的实质上是在已经运行的Linux下制造了一个隔离的文件环境,因此它执行的效率几乎等同于所部署的Linux主机。因此,Docker必须部署在Linux内核的系统上,如果其他系统想部署Docker就必须安装一个虚拟Linux环境;
在这里插入图片描述
即在Windows上部署Docker的方法都是先安装一个虚拟机,并在安装Linux系统的的虚拟机中运行Docker。注意,目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在CentOS 7 (64-bit)上,要求系统为64位、Linux系统内核版本为 3.8以上,这里选用Centos7.x 。
在这里插入图片描述
官网 https://docs.docker.com/engine/install/centos/中可以看到具体安装方式与安装步骤。

Docker的具体安装步骤
前面啰嗦了一大堆,现在开始正式安装Docker,这里我们选择安装的是19.03.14版本,当然你不指定版本就是最新版本;
1、首先第一步配置yum工具,
● sudo yum install -y yum-utils
2、卸载系统之前的 docker

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

3、安装 Docker 运行所需的依赖软件包
● sudo yum install -y yum-utils device-mapper-persistent-data lvm2
4、配置docker的yum源为阿里云仓库,告诉Linux从阿里云的镜像地址获取 Docker 相关软件包和更新;

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

5、选择安装docker的版本
● 默认安装最新版:# sudo yum install -y docker-ce docker-ce-cli containerd.io
● 安装19.03.14版本:sudo yum install -y docker-ce-19.03.14 docker-ce-cli-19.03.14 containerd.io-1.4.6

6、docker安装好之后,需要给docker配置一下加速镜像源,默认的镜像源是Docker官网的,下载镜像的时候可能速度不是很快,这个镜像地址可以到自己的阿里云中获取,当然也可以随便找一个别人的:
控制台—>镜像容器服务---->镜像中心:镜像加速服务下获取
注意,这里额外添加了docker的生产环境核心配置cgroup

# 创建一个docker的配置文件
sudo mkdir -p /etc/docker
# 添加阿里云的加速镜像源,即registry-mirrors后面的地址
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
EOF
# 重启
sudo systemctl daemon-reload
sudo systemctl restart docker#启动 docker & 设置 docker 开机自启
sudo systemctl enable docker

到这里Docker就安装完成了,可以输入docker -v 验证一下;
在这里插入图片描述

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

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

相关文章

82基于matlab GUI的图像处理

基于matlab GUI的图像处理&#xff0c;功能包括图像一般处理&#xff08;灰度图像、二值图&#xff09;&#xff1b;图像几何变换&#xff08;旋转可输入旋转角度、平移、镜像&#xff09;、图像边缘检测&#xff08;拉普拉斯算子、sobel算子、wallis算子、roberts算子&#xf…

【Rust日报】2023-11-22 Floneum -- 基于 Rust 的一款用于 AI 工作流程的图形编辑器

Floneum -- 基于 Rust 的一款用于 AI 工作流程的图形编辑器 Floneum 是一款用于 AI 工作流程的图形编辑器&#xff0c;专注于社区制作的插件、本地 AI 和安全性。 Floneum 有哪些特性&#xff1a; 可视化界面&#xff1a;您无需任何编程知识即可使用Floneum。可视化图形编辑器可…

oled的使用 动态的变量 51

源码均在IIC手写程序中 外部中断实现变量加一 #include "reg52.h" #include "main.h" #include <intrins.h> #include "OLED.h" #include "bmp.h" #include "Delay.h" sbit LED1 P1^0; sbit LED2 P1^1; sbit LED3…

Python报错:AttributeError(类属性、实例属性)

Python报错&#xff1a;AttributeError&#xff08;类属性、实例属性&#xff09; Python报错&#xff1a;AttributeError 这个错误就是说python找不到对应的对象的属性&#xff0c;百度后才发现竟然是初始化类的时候函数名写错了 __init__应该有2条下划线&#xff0c;如果只有…

构建未来:云计算 生成式 AI 诞生科技新局面

目录 引言生成式 AI&#xff1a;开发者新伙伴云计算与生成式 AI 的无缝融合亚马逊云与生成式 AI 结合的展望/总结我用亚马逊云科技生成式 AI 产品打造了什么&#xff0c;解决了什么问题未来科技发展趋势&#xff1a;开发者的机遇与挑战结合实践看未来结语开源项目 引言 2023年…

SpectralGPT: Spectral Foundation Model 论文翻译1

遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址&#xff1a;[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) 摘要 ​ 基础模型最近引起了人们的极大关注&#xff0c;因为它有可能以一种自我监督的方式彻底改变视觉表征学习领域。虽然大多数基础模型…

VSCode 连接远程服务器问题及解决办法

端口号不一样&#xff0c;需要在配置文件中添加Port Host 27.223.26.46HostName 27.223.*.*User userForwardAgent yesPort 14111输入密码后可以连接 在vscode界面&#xff0c;终端&#xff0c;生成公钥&私钥 ssh-keygen可以看到有id_rsa和id_rsa.pub两个文件生成&#…

C#,《小白学程序》第五课:队列(Queue)其一,排队的技术与算法

日常生活中常见的排队&#xff0c;软件怎么体现呢&#xff1f; 排队的基本原则是&#xff1a;先到先得&#xff0c;先到先吃&#xff0c;先进先出 1 文本格式 /// <summary> /// 《小白学程序》第五课&#xff1a;队列&#xff08;Queue&#xff09; /// 日常生活中常见…

nodejs微信小程序+python+PHP-青云商场管理系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

C++算法 —— 贪心(4)

文章目录 1、分发饼干2、最优除法3、跳跃游戏Ⅱ4、跳跃游戏Ⅰ5、加油站6、单调递增的数字7、坏了的计算器 1、分发饼干 455. 分发饼干 其实看完这个题会发现&#xff0c;如果给定的两个数组不排序的话会非常难受&#xff0c;所以无论怎样&#xff0c;先排序。接下来需要比较两…

项目管理套路:看这一篇绝对够用❤️

写论文必不可少的&#xff0c;就是创建代码并进行实验。好的项目管理可以让实验进行得更加顺利。本篇博客以一次项目实践为例&#xff0c;介绍项目管理的方法&#xff0c;以及可能遇到的问题&#xff0c;并提供一些可行的解决方案。 目录 项目管理工具开始第一步版本管理十分关…

【JavaWeb】TomcatJavaWebHTTP

Tomcat&JavaWeb&HTTP 文章目录 Tomcat&JavaWeb&HTTP一、Tomcat1.1 版本选择及安装1.2 目录1.3 WEB项目部署的方式 二、IDEA中Java Web开发部署流程三、HTTP协议3.1 发展历程3.2 HTTP协议的会话方式3.3 请求报文3.4 响应报文 一、Tomcat Tomcat是Apache 软件基…

php xml数据转数组两种方式

目录 方法一、可以使用simplexml_load_string()函数将XML数据转换为数组。 方法二、使用PHP内置的DOMDocument类来将XML数据转换为数组的方法 方法一、可以使用simplexml_load_string()函数将XML数据转换为数组。 $xmlData <root><name>John Doe</name>&l…

NX二次开发UF_CSYS_create_matrix 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_create_matrix Defined in: uf_csys.h int UF_CSYS_create_matrix(const double matrix_values [ 9 ] , tag_t * matrix_id ) overview 概述 Creates a 3 x 3 matrix. 创建…

nodejs+vue+python+PHP+微信小程序-青云商场管理系统的设计与实现-安卓-计算机毕业设计

研究步骤、措施&#xff1a; &#xff08;1&#xff09;与指导老师确定系统主要功能&#xff1b; &#xff08;2&#xff09;做需求分析及功能模块划分&#xff1b; &#xff08;3&#xff09;指导老师通过后&#xff0c;设计出用例图&#xff0c;E-R图&#xff0c;功能模块图 …

【XSLVGL2.0】如何新增一种语言和词条

XSLVGL2.0 开发手册 【XSLVGL2.0】如何新增一种语言和词条 1、概述2、以外置资源的方式增加词条3、以内置资源的方式增加词条4、使用方法1、概述 本文件旨在介绍新增一种语言词条的方法 2、以外置资源的方式增加词条 假设项目需要增加一种英文的词条。一般地,我们采用国际…

老牌开源 SVG 编辑器 SVGEdit 是如何架构的?

大家好&#xff0c;我是前端西瓜哥。这次简单看看 SVGEdit 的架构。 SVGEdit 的版本为 7.2.0。 SVGEdit 一款非常老牌的 SVG 图形编辑器&#xff0c;用于编辑处理 SVG&#xff0c;start 数目前是 5.8k。 它的优点在于经过多年的开发&#xff0c;完成度高&#xff0c;较为成熟&a…

大众博客系统测试报告【改】

一、项目背景 大众博客系统采用前后端分离的方法来实现&#xff0c;同时使用了数据库来存储相关的数据&#xff0c;同时将其部署到云服务器上。前端主要有四个页面构成&#xff1a;登录页、列表页、详情页以及编辑页&#xff0c;以上模拟实现了最简单的大众博客系统。其结合后端…

Tars-GO 开发

默认环境是安装好的 创建服务: tarsgo make App Server Servant GoModuleName Tars 实例的名称&#xff0c;有三个层级&#xff0c;分别是 App&#xff08;应用&#xff09;、Server&#xff08;服务&#xff09;、Servant&#xff08;服务者&#xff0c;有时也称 Object&am…

数据结构——堆的实现

堆的实现-----C语言版 目录&#xff1a;一、堆的实现1.1堆的定义1.2堆的实现1.2.1堆的各个接口1.2.2堆的向上调整1.2.3堆的向下调整1.2.4堆的定义声明和初始化1.2.5堆的数据处理1.2.6堆的判空和堆的数据个数以及堆销毁1.2.7堆的代码实现 二、TOP—K问题 目录&#xff1a; 一、…