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

news2025/1/9 16:20:11

目录

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.coloradmin.cn/o/999627.html

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

相关文章

Python 操作 CSV

使用过 CSV 文件都知道:如果我们的电脑中装了 WPS 或 Microsoft Office 的话,.csv 文件默认是被 Excel 打开的,那么什么是 CSV 文件?CSV 文件与 Excel 文件有什么区别?如何通过 Python 来操作 CSV 文件呢?带…

创建开机自启的脚本

在启动许多ros节点时有多种方式,我推荐使用launch来启动所有的节点,这也是一种规范的方式。以后会慢慢向这个方向靠。 除此之外还可以通过创建的脚本来启动: 脚本位置不限,只需要: sudo gedit xxx.sh在里面添加相应的…

网站框架识别方法

cms一般有dedecms(织梦),dzcms,phpweb,phpwind,phpcms,ecshop,dvbbs,siteweaver,aspcms,帝国,zblog,wordpress等。 一般cms都有特定的…

ES6——知识点记录

这里写目录标题 1.字符串支持1.codePointAt——根据字符串码元的位置得到其码点2.includes——判断字符串中是否包含指定的子字符串3.startsWith——判断字符串中是否以指定的字符串开始4.endsWith——判断字符串中是否以指定的字符串结尾5.repeat——将字符串重复指定的次数&a…

AB试验(二)统计基础

AB试验(二)统计基础 随机变量 均值类指标:如用户的平均使用时⻓、平均购买金额、平均购买频率等 概率类指标:如用户点击的概率(点击率)、转化的概率(转化率)、购买的概率 (购买率)等 经验结论:在数量足够大时&#…

Vibro-meter VM600 200-510-041-021数字量控制板卡

Vibro-meter VM600 200-510-041-021 数字量控制模块通常用于振动监测和机械设备的控制系统中,以执行振动数据采集、分析和控制任务。以下是通常情况下数字量控制模块的一些产品特点: 多通道输入:这些模块通常配备多个输入通道,以接…

浅析数字孪生在科学研究中的作用和优势

在科学研究领域,数字孪生技术正迅速崭露头角,为研究人员提供了前所未有的工具和资源,以更深入、更全面地理解复杂的自然现象和系统。本文带大家探讨数字孪生对科学研究的作用: 1. 精准建模和仿真 数字孪生技术允许科学家创建真实…

【Minecraft】Lucky Block(幸运方块)mod介绍

文章目录 mod介绍支持版本mod作者合成方式幸运值使用方法总结 mod介绍 幸运方块模组虽然只是添加了一个方块,两种武器,一种药水,但拥有超过一百种可能性! 简单地打破幸运方块,它将开出意想不到的东西! 你可…

云原生安全性:构建可信任的云应用的最佳实践

文章目录 云原生安全性的重要性1. 数据隐私2. 恶意攻击3. 合规性要求4. 业务连续性 构建可信任的云应用的最佳实践1. 安全开发2. 身份验证与授权3. 容器安全性4. 监控与审计5. 持续集成与持续交付(CI/CD)6. 安全培训和教育 未来趋势:服务网格…

Swagger 使用教程

Swagger 官网&#xff1a; API Documentation & Design Tools for Teams | Swagger 整合swagger 依赖&#xff1a; springfox-swagger2 springfox-swagger-ui <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</a…

气象站:从气候预测到环境监测

在我们的日常生活中&#xff0c;气象站的存在可能并不显眼&#xff0c;但实际上&#xff0c;它对我们的生活产生了重要的影响。气象站是一种用于收集和监测天气数据的设施&#xff0c;通过它&#xff0c;我们可以获得各种关于气候和天气的宝贵信息。那么&#xff0c;气象站可以…

Selenium自动化测试框架常见异常分析及解决方法

01 pycharm中导入selenium报错 现象: pycharm中输入from selenium import webdriver, selenium标红 原因1: pycharm使用的虚拟环境中没有安装selenium, 解决方法: 在pycharm中通过设置或terminal面板重新安装selenium 原因2: 当前项目下有selenium.py,和系统包名冲突导致, …

飞行动力学 - 第20节-横向静稳定性 之 基础点摘要

飞行动力学 - 第20节-横向静稳定性 之 基础点摘要 1. 横向静稳定性2. 横向静稳定准则3. 横向静稳定性的组成4. 参考资料 1. 横向静稳定性 2. 横向静稳定准则 对于横向静稳定性飞机&#xff0c;右滚转扰动会产生正侧滑&#xff0c;飞机产生左滚恢复力矩(负)&#xff0c;即 Δ …

Python之数据库(MYSQL)连接

一&#xff09;数据库SQL语言基础 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典MySQL AB 公司开发&#xff0c;目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一&#xff0c;在 WEB 应用方面&#xff0c;MySQL是最好的 RDBMS (Relational Database…

想入行视觉设计?先看这篇文章再说!

大家好我是设计师不知名设计师l1m0&#xff0c;今天要给大家分享的设计岗位是&#xff1a;视觉设计师。 在当今数字化时代&#xff0c;视觉设计师扮演着至关重要的角色。他们是创意世界的魔术师&#xff0c;通过各种视觉元素的精妙组合&#xff0c;为品牌、产品和项目赋予生命…

【微信读书】数据内容接口逆向调试02

需求爬取微信读书的某一本书的整本书的内容 增强需求&#xff0c;大批量爬取一批书籍内容 众所周知微信读书是一个很好用的app&#xff0c;他上面书籍的格式很好&#xff0c;质量很高。 本人充值了会员但是看完做完笔记每次还得去翻很不方便&#xff0c;于是想把书籍内容弄下…

专注写作,快速上线:Cpolar+Inis帮助你在Ubuntu上建立博客网站

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总…

信息系统项目管理师(第四版)教材精读思维导图-第十一章项目成本管理

请参阅我的另一篇文章&#xff0c;综合介绍软考高项&#xff1a; 信息系统项目管理师&#xff08;软考高项&#xff09;备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图PDF格式 本章思维导图XMind源文件 11.1 管理基础 11.2 管理过程 11.3 规划成本管…

2023-简单点-怎么知道树莓派是什么cpu架构?

树莓派是几位&#xff1f; getconf LONG_BIT https://qengineering.eu/install-ncnn-on-raspberry-pi-4.html

Redis过期时间的思考

当我们把 Redis 当做缓存来使用时&#xff0c;设置过期时间是必须的&#xff0c;但具体设置多少的过期时间呢&#xff0c;针对不同的场景会有不同的决策。 虚假一个场景&#xff0c;我们基于用户的地理位置推荐附近的陌生主播&#xff0c;用户可以线下去找主播沟通。当系统第一…