Docker入门,Docker是什么?有什么用?该怎么用?

目录

1. 项目部署时的复杂性?

2. Docker是如何解决依赖兼容问题的?

3. 众多Linux操作系统发行版的区别

4. Docker 是如何实现跨系统运行的?

5. Docker与虚拟机的差别

6. 镜像(Image)与容器(Container)

7. DockerHub

8. Docker 架构

9. Docker 基本操作


1. 项目部署时的复杂性?

在了解 Docker之前,我们需要先知道一件事,那就是在实际业务开发和部署的时候,特别是大型项目,组件会非常多,运行环境也会非常的复杂。

举些最简单的例子,前端通常会依赖于 Node.js;缓存通常会依赖于 Redis;消息队列也会有多种MQ 组件;数据库通常采用 MySQL;

而这些应用到最终通常我们都是要部署在服务器上的,在运行业务时,我们通常都会采用 Linux 操作系统。那么问题就来了,每种应用(也可以说是软件)都会依赖于不同的函数库和依赖,如果这些应用需要用到的函数库和依赖版本相同,则可以共享使用相同的依赖和函数库;如果依赖的函数库和依赖版本不同,那么它们之间就会产生很大的冲突,极其容易产生兼容性问题。而且这还只是开发环境,还有生产环境,测试环境等等,那么要处理的问题也会异常的多。

2. Docker是如何解决依赖兼容问题的?

Docker 为了解决上面说到的依赖兼容问题,采取了另外一种做法,如下图所示。

Docker会将项目需要用到的应用软件和这些应用软件运行时需要的依赖和函数库打成整体的一个包,将整个包一起运行。而且将每个应用放到不同的隔离容器中去运行,避免互相造成干扰。

3. 众多Linux操作系统发行版的区别

我们知道,Linux操作系统有众多的发行版,如下图所示,较为常用的有CentOS,Ubuntu。它们的操作系统核心内核都是Linux内核,只是系统应用层不太相同,系统应用运行时是通过函数库调用内核,内核再通过指令调用计算机硬件从而实现整个应用的运行。

所以也就是说众多Linux操作系统的发行版最大的区别就是调用Linux内核的指令(也可以说是函数库)略有不同。

4. Docker 是如何实现跨系统运行的?

Docker 不仅利用容器隔离技术实现了多应用同时运行且互不干扰,还实现了可以在不同的系统上运行的效果。

刚才在第三点,我提到了不同的Linux发行版所依赖的函数库不同,所以一个Redis应用在CentOS上可以正常运行,但如果到了Ubuntu上就不一定能正常运行了。

Docker为了实现跨系统,它采用了一种做法,就是将各种应用运行调用Linux操作系统内核的函数库跟着这些应用需要的依赖一起打包。

如下图所示,当我们去操作MySQL时,我们调用对应的指令,因为我们将MySQL对应的函数库也一起打包了,所以MySQL在调用Linux内核时,就不需要再经过系统应用,可以使用Docker打包好的函数库直接调用内核,越过了系统应用这一层,从而实现了Docker跨系统运行的问题。

5. Docker与虚拟机的差别

平常我们在自己学习的过程中,想要模拟 Linux 操作系统,通常都会在我们自己的 Windows 系统上安装一个虚拟机,然后在虚拟机中安装不同版本的 Linux 系统。

而 Docker 与虚拟机是有很大的差别的。如下图所示

Docker 在运行应用时,直接通过调用已经封装好的函数库调用系统内核,再由系统内核调用计算机硬件,从而完成应用的一系列操作。

而我们安装的虚拟机,是通过一种Hypervisor的技术(这里了解即可)在我们的 Windows 系统中又安装了另外的一个系统,当想要运行某个应用时,该应用会先调用虚拟机内部的函数库,再由函数库调用内部的操作系统,内部操作系统通过虚拟机技术调用外部 Windows 操作系统,外部 Windows 操作系统再调用计算机硬件,层层传递,系统中套系统,系统调用系统,效率是比较差的。

除了上面系统调用层面的不同,Docker与虚拟机的硬盘占用也有很大区别,虚拟机通常都是GB起步,而Docker只是对函数库和依赖做了一些封装,通常都是软件一样大小,小的甚至只有几MB;Docker 与虚拟机的启动速度也是不同的,虚拟机等于是一台新的电脑,通常要分钟级别,而Docker通常都是秒级别。

6. 镜像(Image)与容器(Container)

镜像(Image):将应用程序及其所需的依赖,函数库,环境,配置文件等打包在一起,称为镜像。

容器(Container):镜像中的应用程序运行后形成的进程就是容器,一个镜像可以产生多个容器。只是 Docker 会给容器做隔离,对外不可见。

如下图:有一个 MySQL5.7 的镜像,这里要知道一点,镜像都是只读的,因为如果有多个容器同时对镜像操作,会对镜像造成污染,所以各个容器当想要写数据的时候,会复制一份数据到自己的容器中操作,包括data数据文件和log日志文件,这样一来即便后续有新的容器创建,还是一个全新的镜像,可以任意操作,非常方便。

7. DockerHub

说到 DockerHub,相比我们也能联想到 GitHub,DockerHub 是一个镜像托管平台。

我们通常也可以称为Docker Registry(Docker 仓库)。在国内,也有类似的 Docker Hub 的公开服务,例如 阿里云镜像服务,网易云镜像服务等...上面有很多不同版本的已经封装好的各种应用的镜像,当我们想要使用的时候,可以拉取下来直接使用。

8. Docker 架构

Docker 是一个CS架构的程序,由两部分组成。

服务端(Server):Docker守护进程,负责处理Docker指令,管理镜像,容器等;

客户端(Client):通过命令或 RestAPI 向Docker服务端发送指令。可以在本地也可以在远程向服务端发送指令;

9. Docker 基本操作

在 Linux 操作系统中安装成功 docker 之后,我们就可以通过如下命令操作 docker 了。

(这里补充几点:各位同学可以使用虚拟机安装docker,也可以使用云服务器,我直接使用我已经有的云服务器了,各位同学完成安装之后,记得配一下加速镜像,因为docker默认采用的国外,我们配置到国内,首选阿里云,这一点与 maven 很相似;另外如果采用的是虚拟机,请关闭防火墙!关闭防火墙!关闭防火墙!否则极有可能拉取镜像失败。主要这两点普遍容易忽略,所以需要注意,如有其它问题可以自行上网搜寻)

systemctl stop firewalld:此次启动关闭防火墙;

systemctl disable firewalld:永久关闭防火墙,以后开机防火墙也是关闭状态;

systemctl status firewalld:查看防火墙状态;

systemctl start docker:启动 docker;

systemctl stop docker:停止 docker;

systemctl status docker:查看docker 状态

docker images:查看本地所有 docker 镜像;

docker -v:查看 docker 版本;

docker --help:查看所有 docker 命令;

命令展示如下图所示:

docker 拉取应用镜像有一个通用命令公式,即 docker pull [repository]:[tag]

repository 就是想要拉取的镜像名称,tag 就是镜像的版本,如果不写默认就是 latest 最新版;

如下演示拉取 nginx 镜像

docker pull nginx:拉取nginx镜像到本地,nginx后面还可以跟版本号,如果不写默认就是最新版;

docker rmi [repository]:[tag]:删除一个指定镜像;

如下图所示,拉取完成 nginx 完成,再使用 docker images 查看,可以看到 nginx 镜像已经存在了;

关于 docker 的命令,也不必死记硬背,需要哪个命令,直接上网搜索即可,但建议把常用的几个命令还是记下来的好;

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

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

相关文章

安防监控/视频汇聚/云存储/AI智能视频分析平台EasyCVR显示CPU过载,该如何解决?

视频云存储/安防监控/视频汇聚平台EasyCVR基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防视频监控系统EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云…

Java知识总结(持续更新)

一、JDK、JRE、JVM三者之间的关系? 1. **JDK (Java Development Kit)**: JDK 是 Java 开发工具包,它包含了用于开发 Java 应用程序的所有必要工具和库。这包括 Java 编译器(javac)、Java 核心类库、开发工具&#x…

《React vs. Vue vs. Angular:2023年的全面比较》

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【LeetCode-简单题】844. 比较含退格的字符串

文章目录 题目方法一:单指针方法二:双指针方法三:栈 题目 方法一:单指针 首先每次进入循环处理之前需要对第一个字符进行判断,若是退格符,直接删掉,结束此次循环fast从0开始,如果fa…

每日一练 | 网络工程师软考真题Day32

阅读以下说明,答复以下【问题1】至【问题5】 【说明】 某公司内部效劳器S1部署了重要的应用,该应用只允许特权终端PC1访问,如图4-1所示。为保证通信平安,需要在S1上配置相应的IPSec策略。综合考虑后,确定该IPSec策略如…

pdf.js 微信公众号不显示问题

问题1: 在浏览器中能够正常显示, 但是在微信浏览器中不行!解决: 这个是pdf.js 版本问题, 用2.4版本,微信打开就没问题了 问题2: 如何关闭侧边栏? 修改这个地方, 将 -1 改…

QLineEdit 类(行编辑器)

1、 QLineEdit 类是 QWidget 类的直接子类,该类实现了一个单行的输入部件,即行编辑器; 2、验证器(QValidator 类)和输入掩码简介:主要作用是验证用户输入的字符是否符合验证器 的要求,即限制对用户的输入,比…

发UPS国际快递到墨西哥的收费标准

UPS国际快递是目前全球范围内最为知名和可靠的快递服务提供商之一,无论是个人还是企业都可以通过UPS将包裹快速送达世界各地,其中包括墨西哥。所以,对于许多人来说,了解到发UPS国际快递到墨西哥的收费标准是十分重要的。 发UPS国际…

Linux常见进程类别

目录 常见进程类别 守护进程&精灵进程 任务管理 进程组 作业 作业 | 进程组 会话 w命令 守护进程 守护进程的创建 setsid()函数 daemon()函数 模拟实现daemon函数 前台进程 | 后台进程 僵尸进程 | 孤儿进程 僵尸进程的一些细节 守护进程 | 后台进程 守护…

C++-map和set

本期我们来学习map和set 目录 关联式容器 键值对 pair 树形结构的关联式容器 set multiset map multimap 关联式容器 我们已经接触过 STL 中的部分容器,比如: vector 、 list 、 deque 、forward_list(C11)等,这些容器统称为序列式…

关于软件的功能复用

有一些人总在说软件要复用,开发一个项目时要想想怎么在另一个项目中能重用。你问他怎么做到复用,就会听到微服务、中台一些名词 复用的层次 说到复用,首先要想明白复用的是啥 级别越低,粒度越小,复用的范围越广&#…

Yolov5改进算法之添加Res2Net模块

目录 1. Res2Net介绍 1.1 Res2Net的背景和动机 1.2 Res2Net的基本概念 2. YOLOV5添加Res2Net模块 Res2Net(Residual Resolution Network)是一种用于图像处理和计算机视觉任务的深度卷积神经网络架构。它旨在解决传统的ResNet(Residual Ne…

【java】【SSM框架系列】【三】Maven进阶

目录 一、分模块开发与设计 1.1 分模块开发的意义 1.2 分模块开发(模块拆分) 二、依赖管理 2.1 依赖传递 2.2 可选依赖 2.3 排除依赖 三、聚合与继承 3.1 聚合 3.2 继承 3.3 聚合与继承的区别 四、属性管理 4.1 属性 4.1.1 属性配置与使用 …

2023 年高教社杯全国大学生数学建模竞赛题目 B 题 多波束测线问题

B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀速直线传播,在不同界面上产生反射,利用这一原理,从测量船换能器垂直向海底发射声波信号,并记录从声波发射到信号接收的传播…

智慧工地:让工地可视化、数字化、智能化

智慧工地平台功能包括:劳务管理、施工安全管理、视频监控管理、机械安全管理、危大工程监管、现场物料监管、绿色文明施工、安全隐患排查、施工综合管理、施工质量管理、设备管理、系统管理等模块。 一、项目开发环境 技术架构:微服务 开发语言&#…

数据结构--- 树

(一)知识补充 定义 树是一种数据结构,它是由n(n≥0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。​ 它具有以下的特点: 每个节点有零个或多个子节点; 没有父节点的节点称为根节点;每一个非根…

算法训练营day44|动态规划 part06:完全背包 (完全背包、 LeetCode518. 零钱兑换 II、377. 组合总和 Ⅳ )

文章目录 完全背包518. 零钱兑换 II (求组合方法数)思路分析代码实现思考总结 377. 组合总和 Ⅳ (求排列方法数)思路分析代码实现思考总结 完全背包 完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。 依然举这个例子: 背包最大重量为4。 物…

【LInux编译器gcc/g++】gcc使用方法和动静态库相关概念

目录 一.前言 二.源代码的翻译环境 三.gcc相关指令 四.动静态库 1.什么是库? 2.库的命名 3.库的链接方式 4.动静态链接的优缺点 5.小结 一.前言 在Windows系统上我们常用VisualStudio来进行C/C开发,VS并不是一款单一的软件,而是集成…

【刷题篇】贪心算法(一)

文章目录 分割平衡字符串买卖股票的最佳时机Ⅱ跳跃游戏钱币找零 分割平衡字符串 class Solution { public:int balancedStringSplit(string s) {int lens.size();int cnt0;int balance0;for(int i0;i<len;i){if(s[i]R){balance--;}else{balance;}if(balance0){cnt;}}return …

WPF CommunityToolkit.Mvvm Messenger通讯

文章目录 环境WeakReferenceMessenger方法介绍无回调订阅发送Token区分有回调订阅发送 环境 CommunityToolkit.Mvvm Messenger 十月的寒流: 如何使用 CommunityToolkit.Mvvm 中的 Messenger 来进行 ViewModel 之间的通信 WeakReferenceMessenger 我这里只讲简单的弱Messenger…