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.rhkb.cn/news/135998.html

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

相关文章

Matlab图像处理-强度分层法

强度分层法 强度分层技术是最简单的伪彩色图像处理方法之一。 如果将一幅图像被描述为空间坐标(x,y) 的强度函数f(x,y) ,则分层的方法可以看作是将一些平面平行于图像坐标平面(x,y) ,然后将每个平面在相交区域切割图像函数。下图展示了使用平面将图像函…

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测

时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-BiGRU贝叶斯优化双向门控循环单元时间序列预测。…

项目--苍穹外卖

1.| constant | 存放相关常量类 | | context | 存放上下文类 | | enumeration | 项目的枚举类存储 | | exception | 存放自定义异常类 | | json | 处理json转换的类 | | properties | 存放SpringBoot相关的配置属性类 | | result | 返回结果类的封装 | | utils | 常用工具类 | …

Linux工具(一)

前言:Linux是一个开源的操作系统,它拥有庞大而活跃的开发社区,为用户提供了丰富多样的工具和应用程序。这些工具不仅适用于系统管理员和开发人员,也适用于普通用户,可以帮助他们完成各种任务,从简单的文件管…

宝塔面板日志和缓存占用磁盘空间很大,如何清理?

服务器使用的宝塔面板,最近发现服务器的“系统盘”快爆满了,点面板上日志管理都要收费,我也不是很懂服务器的运维,使用ai进行询问,得到了解决: /var/log 日志目录 运行下面的命令查找是哪些目录占用空间很…

嵌入式Linux驱动开发(I2C专题)(七)

使用GPIO操作I2C设备_IMX6ULL 参考资料: Linux文档 Linux-5.4\Documentation\devicetree\bindings\i2c\i2c-gpio.yamlLinux-4.9.88\Documentation\devicetree\bindings\i2c\i2c-gpio.txt Linux驱动源码 Linux-5.4\drivers\i2c\busses\i2c-gpio.cLinux-4.9.88\driv…

【SpringMVC】文件上传与下载、JREBEL使用

目录 一、引言 二、文件的上传 1、单文件上传 1.1、数据表准备 1.2、添加依赖 1.3、配置文件 1.4、编写表单 1.5、编写controller层 2、多文件上传 2.1、编写form表单 2.2、编写controller层 2.3、测试 三、文件下载 四、JREBEL使用 1、下载注册 2、离线设置 一…

Java增强for循环(学习笔记)

Java增强for循环 主要用于数组或者集合的增强型for循环。 格式: for(声明语句:表达式){ 代码句子 } 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元…

Python 变量作用域

视频版教程 Python3零基础7天入门实战视频教程 在程序中定义一个变量时,这个变量是有作用范围的,变量的作用范围被称为它的作用域。根据定义变量的位置,变量分为两种。 局部变量。在函数中定义的变量,包括参数,都被称…

王道考研操作系统

王道考研操作系统 计算机系统概述操作系统的概念操作系统的特征操作系统的发展历程操作系统内核中断和异常![在这里插入图片描述](https://img-blog.csdnimg.cn/162452b4c60144e0bd500e180127c447.png)系统调用操作系统结构虚拟机错题 进程与线程进程控制进程通信线程和多线程模…

jvm中对象创建、内存布局以及访问定位

对象创建 Java语言层面,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字即可,而在虚拟机中,对象(限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过…

【直播预约中】 腾讯大数据 x StarRocks|构建新一代实时湖仓

随着信息时代的兴起,数据已成为推动业务决策和创新的核心要素;结构化、半结构化等多种类型的数据呈现爆炸式增长,如何高效处理和分析海量数据已经成为关键挑战,结合传统数仓与数据湖优势的湖仓一体(Lakehouse&#xff…

解决WSL2占用内存过多问题(Docker on WSL2: VmmemWSL)

解决WSL2占用内存过多问题(Docker on WSL2: VmmemWSL) 一、问题描述二、问题解决2.1 创建.wslconfig文件2.2 重启wsl2 一、问题描述 安装完WSL2后,又安装了Docker,使用了一段时间,发现电脑变卡,进一步查看…

【VUE异常】el-popconfirm失效,@confirm事件不生效,点击没有任何反应,刷新页面才能点击

el-popconfirm失效,confirm事件不生效,点击没有任何反应,刷新页面才能点击 一、背景描述二、原因分析三、解决方案3.1 方案一:使用onConfirm3.2 方案二:confirm与onConfirm同时使用3.3 方案三:el-popconfir…

【用unity实现100个游戏之12】unity制作一个俯视角2DRPG《类星露谷物语》资源收集游戏demo

文章目录 前言加快编辑器运行速度素材(1)场景人物(2)工具 一、人物移动和动画切换二、走路灰尘粒子效果探究实现 三、树木排序设计方法一方法二 四、绘制拿工具的角色动画五、砍树实现六、存储拾取物品引入Unity 的可序列化字典类 七、实现靠近收获物品自动吸附八、树木被砍掉的…

【详细教程hexo博客搭建】1、从零开始搭建一个能用的博客

1、开始 2.环境与工具准备 本教程主要面对的是Windows用户 操作系统:Windows10NodeGitHexo文本编辑器(强烈推荐VSCODE)GitHub 帐号一个域名(强烈推荐买个域名)云服务器(可选) 3.Node的安装 打开Node官网&#xff0…

Error: error:0308010C:digital envelope routines::unsupported

文章目录 1, 问题背景2.解决方法13.解决方法2将 React 脚本升级到 5 以上版本 3.参考资料 1, 问题背景 最近在升级我之前的一个网站的过程中,由于使用了高版本的nodejs v18.0.0报错如下 (undefined) assets/js/styles.1dbb3634.js from Terser Error: error:03080…

LeetCode: 4. Median of Two Sorted Arrays

LeetCode - The Worlds Leading Online Programming Learning Platform 题目大意 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m n))。 你可以假设 nums1 和 nums2 不会同时为空。 …

爆破shadow文件密码脚本(完成版)

在之前的博客Python爆破shadow文件密码脚本(简化版)中我们做了简化版的爆破shadow文件密码的python脚本,接下来在之前代码的基础上改进: import crypt shadow_line"root:$y$j9T$uEgezfJhn7Ov5naU8bzZt.$9qIqkWYObaXajS5iLDA…

Java 时间范围

前端使用Element-ui 时间范围组件 后端注意在Vo里面时间设置String类型不要设置Date类型 XMl组件字段映射成功性