1、Docker概述与安装

news2024/10/5 17:28:53

相关资源网站:
● 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.coloradmin.cn/o/1248126.html

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

相关文章

set和map + multiset和multimap(使用+封装(RBTree))

set和map 前言一、使用1. set(1)、模板参数列表(2)、常见构造(3)、find和count(4)、insert和erase(5)、iterator(6)、lower_bound和upper_bound 2. multiset3. map(1)、模板参数列表(2)、构造(3)、modifiers和operations(4)、operator[] 4. multimap 二、封装RBTree迭代器原理R…

2023年P气瓶充装证模拟考试题库及P气瓶充装理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年P气瓶充装证模拟考试题库及P气瓶充装理论考试试题是由安全生产模拟考试一点通提供&#xff0c;P气瓶充装证模拟考试题库是根据P气瓶充装最新版教材&#xff0c;P气瓶充装大纲整理而成&#xff08;含2023年P气瓶…

云原生基础概述

云原生的理解 在云原生这个概念还没流行起来的时候&#xff0c;公司开发了一款应用&#xff0c;这是「原生应用」&#xff0c;一般来说传统部署应用的方式都是通过购买物理的服务器&#xff0c;然后将需要上线的项目部署到物理服务器中跑起来。而购买物理机器&#xff0c;还要…

指针运算详解

1.引入 指针的基本运算有三种&#xff0c;分别是&#xff1a; • 指针- 整数 • 指针-指针 • 指针的关系运算 2.指针- 整数 因为数组在内存中是连续存放的&#xff0c;只要知道第⼀个元素的地址&#xff0c;顺藤摸⽠就能找到后⾯的所有元素。 int arr[10] {1,2,3,4,5,…

开发者神器-GitHub Copilot

关于费用 Copilot认证地址&#xff1a;https://web.52shizhan.cn/activity/copilot ① 无需账号&#xff0c;100%认证成功。 ② 支持windows、mac、linux系统。 ③ 可激活Jetbrains全系列,VsCode和Android Studio的Copilot插件&#xff0c;一键认证&#xff0c;100%秒成功。 …

NPU、CPU、GPU算力及算力计算方式

NVIDIA在9月20日发布的NVIDIA DRIVE Thor 新一代集中式车载计算平台&#xff0c;可在单个安全、可靠的系统上运行高级驾驶员辅助应用和车载信息娱乐应用。提供 2000 万亿次浮点运算性能&#xff08;2000 万亿次8位浮点运算&#xff09;。NVIDIA当代产品是Orin&#xff0c;算力是…

抽象类, 接口, Object类 ---java

目录 一. 抽象类 1.1 抽象类概念 1.2 抽象类语法 1.3 抽象类特性 1.4 抽象类的作用 二. 接口 2.1 接口的概念 2.2 语法规则 2.3 接口的使用 2.4 接口间的继承 2.5 抽象类和接口的区别 三. Object类 3.1 toString() 方法 3.2 对象比较equals()方法 3.3 hash…

24V转5V负压-5V3A降压芯片WT6019

24V转5V负压-5V3A降压芯片WT6019 WT6019这个小家伙&#xff0c;电压输入范围从6V到30V&#xff0c;能给你提供3A的电流&#xff0c;稳稳的&#xff01;而且&#xff0c;它的开关频率高达130kHz&#xff0c;让动态响应飞快&#xff0c;让你的设备随时保持冷静。WT6019转负压5V-5…

H5ke12--1--iframe标签制作页面的使用

上次说到 如何我们的数据html页面返回到服务器,服务器到html.submit不要了,直接button普通按钮,action也不用,,,fetch直接异步请求,那么就会有数据发送到服务器 Repones.write写入就行了,直接写的就是html页面演示 这次我们来看iframe, H5加入了传输页面的新的事件 注意 link、…

Python之Pygame游戏编程详解

一、介绍 1.1 定义 Pygame是一种流行的Python游戏开发库&#xff0c;它提供了许多功能&#xff0c;使开发人员可以轻松创建2D游戏。它具有良好的跨平台支持&#xff0c;可以在多个操作系统上运行&#xff0c;例如Windows&#xff0c;MacOS和Linux。在本文中&#xff0c;我们将…

【机器学习】聚类(一):原型聚类:K-means聚类

文章目录 一、实验介绍1. 算法流程2. 算法解释3. 算法特点4. 应用场景5. 注意事项 二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 导入必要的库1. Kmeans类a. 构造函数b. 闵可夫斯基距离c. 初始化簇心d. K-means聚类e. 聚类结果可视化 2. 辅助函数3. 主函数a. 命令…

Jetson Orin Nano 内核编译

首先是安装编译环境所需的依赖 sudo apt-get install git bison flex libssl-dev zip libncurses-dev makesudo apt-get install build-essential bc下载交叉编译器以及代码&#xff0c;官方链接: link https://developer.nvidia.com/embedded/jetson-linux 解压下载的两个文件…

JVM之jvisualvm多合一故障处理工具

jvisualvm多合一故障处理工具 1、visualvm介绍 VisualVM是一款免费的&#xff0c;集成了多个 JDK 命令行工具的可视化工具&#xff0c;它能为您提供强大的分析能力&#xff0c;对 Java 应 用程序做性能分析和调优。这些功能包括生成和分析海量数据、跟踪内存泄漏、监控垃圾回…

应用内测分发平台如何上传应用包体?

●您可免费将您的应用&#xff08;支持苹果.ios安卓.apk文件&#xff09;上传至咕噜分发平台&#xff0c;我们将免费为应用生成下载信息&#xff0c;但咕噜分发将会对应用的下载次数进行收费&#xff08;每个账号都享有免费赠送的下载点数以及参加活动的赠送点数&#xff09;&a…

RTMDet原理与代码解析

paper&#xff1a;RTMDet: An Empirical Study of Designing Real-Time Object Detectors official implementation&#xff1a;https://github.com/open-mmlab/mmdetection/tree/main/configs/rtmdet 本文的创新点 Backbone and Neck 在backbone的basic building block中采…

Spark SQL 时间格式处理

初始化Spark Sql package pbcp_2023.clear_dataimport org.apache.spark.SparkConf import org.apache.spark.sql.SparkSession import org.apache.spark.sql.functions.{current_date, current_timestamp}object twe_2 {def main(args: Array[String]): Unit {val con new …

js获取时间日期

目录 Date 对象 1. 获取当前时间 2. 获取特定日期时间 Date 对象的方法 1. 获取各种日期时间组件 2. 获取星期几 3. 获取时间戳 格式化日期时间 1. 使用 toLocaleString() 方法 2. 使用第三方库 UNIX 时间戳 内部表示 时区 Date 对象 JavaScript中内置的 Date 对象…

获取DOM元素和类型判断

一、获取dom元素 <div id"one" class"one">我是第一个div</div> <div>我是第二个div</div> <div name"username">我是第三个div</div> <input type"text" name"username"> 1.qu…

【完美世界】叶倾仙强势登场,孔雀神主VS护道人,石昊重逢清漪

Hello,小伙伴们&#xff0c;我是拾荒君。 《完美世界》国漫第138集已更新。在这一集中&#xff0c;天人族的行为让人大跌眼镜&#xff0c;他们不仅没有对石昊感恩戴德&#xff0c;反而一心想要夺取他身上的所有秘法宝术。天人族的护道人登场&#xff0c;试图以强大的实力压制石…

Theta*: Any-Angle Path Planning on Grids 原文翻译

Theta*: Any-Angle Path Planning on Grids 文章目录 Theta*: Any-Angle Path Planning on Grids翻译摘要1.Introduction2. Path-Planning Problem and Notation3. Existing Terrain Discretizations4.Existing Path-Planning Algorithms4.1 A* on GridsA* with Post-Smoothed …