Docker简介

2023-11-07

1、Docker是什么

Docker 是一个开源的应用容器引擎

        Docker是一个基于轻量级虚拟化技术的容器,整个项目基于Go语言开发,并采用了Apache 2.0协议。Docker可以将我们的应用程序打包封装到一个容器中,该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必需的资源,通过容器就可以实现方便快速并且与平台解耦的自动化部署方式,无论你部署时的环境如何,容器中的应用程序都会运行在同一种环境下。

        Docker 其中包括 镜像、容器、仓库,很简单,目的就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的产品(可以是 web 应用或者数据库应用)及其环境能够做到“一次封装,到处运行”。

1.1 镜像-(概念:复制的程序)

定义:Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。

        类似于虚拟机中使用到的镜像,由于任何应用程序都需要有它自己的运行环境,Image就是用来提供所需运行环境的一个模板。可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)
作用 : Docker镜像是用来启动容器的,也用来创建新的容器,类似于虚拟机的快照。
特点 : 镜像不包含任何动态数据,其内容在构建之后也不会被改变,在Docker里可以创建镜像,也可以从第三方的网站上下载别人已经做好的镜像来使用


1.2 Container容器-(概念:集装箱)

定义 : 一个Docker镜像可以实例化出来多个容器,而每一个容器之间是独立运行的,没有任何依赖

        Container是Docker提供的一个抽象层,它就像一个轻量级的沙盒,其中包含了一个极简的Linux系统环境与运行在其中的应用程序。Container是Image的运行实例(Image本身是只读的,Container启动时,Docker会在Image的上层创建一个可写层,任何在Container中的修改都不会影响到Image,如果想要在Image保存Container中的修改,Docker采用了基于Container生成新的Image层的策略),Docker引擎利用Container来操作并隔离每个应用(也就是说,每个容器中的应用都是互相独立的)。
作用 : 运行程序员开发的应用程序的
特点 : Docker镜像是不能运行的,是静态的,而Docker容器是运行的,是动态的,可以将Docker容器想像成一个简化版的操作系统和一些核心基础的应用。每个容器运行一个独立的应用程序。


1.3 仓库-(概念:存放镜像的地方)

定义 : Docker仓库提供一个注册服务器,用于存储多个仓库,而仓库是用来存储镜像位置的
作用: 我们自已创建了一个镜像之后,可以使用push命令将镜像文件上传到仓库中,后期如果在其它服务器上需要使用镜像,就可以从仓库上下载过来并使用
总结: 说白了镜像就等于一个centos系统的安装程序,一个镜像只是一个只读环境而已,这个镜像提供的是基础的运行环境,而你在Centos7系统中安装的应用,比如Redis,Mysql这些应用就相当于一个容器,这些容器都是单独可运行的,仓库的概念就更好理解了,在Centos7系统中下载的所有应用都被收集到同一个仓库里了,比如Maven仓库

 

2、Docker有什么用

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

2.1.简化配置

这是Docker初始目的,虚拟机VM最大的好处是基于你的应用配置能够无缝运行在任何平台上。Docker提供同样类似VM的能力,但是没有任何副作用,它能让你将环境和配置放入代码然后部署,同样的Docker配置能够在各种环境中使用,这实际是将应用环境和底层环境实现了解耦。

2.2.代码管道化管理

        能够对代码以流式pipeline管道化进行管理,从开发者的机器到生产环境机器这个流程中都能有效管理。因为在这个流程中会有各种不同的环境,每个都可能有微小的区别,Docker提供了跨越这些异构环境以一致性的微环境,从开发到部署实现流畅发布。

2.3.开发人员的生产化

在一个开发环境,我们希望我们的开发环境能更加接近于生产环境,我们会让每个服务运行在自己的VM中,这样能模拟生产环境,比如有时我们并不总是需要跨越网络连接,这样我们可以将多个Docker装载一系列服务运行在单机上最大程度模拟生产分布式部署的环境。

2.4.应用隔离

有很多理由你需要在一台机器上运行多个应用,这就需要将原来铁板一块monolithic的应用切分为很多微服务。实现应用之间的解耦,将多个应用服务部署在多个Docker中能轻松达到这个目的。

2.5.服务合并

使用Docker也能合并多个服务以降低费用,不多的操作系统内存占用,跨实例共享多个空闲的内存,这些技术Docker能以更加紧密资源提供更有效的服务合并。

2.6.多租户

Docker能够作为云计算的多租户容器,使用Docker能容易为每个租户创建运行应该多个实例,这得益其灵活的快速环境以及有效diff命令。

2.7.快速部署

Docker通过创建进程的容器,不必重新启动操作系统,几秒内能关闭,你可以在数据中心创建或销毁资源,不用担心额外消耗。典型的数据中心利用率是30%,通过更积极的资源分配,以低成本方式对一个新的实例实现一个更聚合的资源分配,我们很容易超过这个利用率,大大提高数据中心的利用效率。

3、为什么使用Docker?

        当我们在工作中,一款产品从开发设计到上线运行,其中需要开发人员和运维工程师,开发人员负责代码编写,开发产品,运维工程师需要测试环境,产品部署。这之间就会有分歧。

        好比一个正常的java项目,其中包括 Java 环境/Tomcat/ MySQL / JDBC 驱动包/相应 jar 包,还有SSM框架等技术,在windows系统上配置环境,保证项目正常运行,就需要大量时间来调试,技术人员往往在windows系统上开发及调试,那么上线的时候需要部署到linux系统中,这就会导致由于环境不同的产品部署问题。

        往往就算不跨系统,而是换一台同样操作系统的服务器,要移植部署依然很麻烦,那么为了解决这个问题,Docker就体现出了他的用处!

4 结论

        绝大部分应用,开发者都可以通过docker build创建镜像,通过docker push上传镜像,用户通过docker pull下载镜像,用docker run运行应用。用户不需要再去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突,而且通常不会需要消耗更多的硬件资源,不会明显降低性能。这就是所说的标准化、集装箱的原因所在。

        解决运行环境不一致所导致的问题。这样就不会产生“本地运行没问题,可一到服务器上就不行了”的情况,限定最大的cpu使用内存硬盘,这样就起到了隔离的作用,避免产生“一块代码产生死循环,把磁盘占满了,其它程序也挂了”的情况。
        docker的标准化让快速扩展,弹性伸缩变得简单

容器不是模拟一个完整的操作系统而是对进程进行隔离,有了容器,我们就可以将软件运行所需的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件工作所需的库资源和设置。系统因此而变得高效轻量并保证部署在任何环境中的软件都能始终如一地运行

5、Docker安装部署 

win10安装docker(适用于windows家庭版)_一起玩编程的博客-CSDN博客_docker安装win10

Docker的安装与使用(Windows10版)_Java烂笔头any的博客-CSDN博客_dockerwindows下安装使用

Windows10的Docker安装和配置_Hu Ziyin的博客-CSDN博客_windows10 docker安装部署

Win10专业版系统Docker安装、配置和使用详细教程_win10使用docker_皓月盈江的博客-CSDN博客

debian安装docker_debian docker_人生30一道坎的博客-CSDN博客 

Docker: Debian安装Docker_陌生谁家年少的博客-CSDN博客

6、Docker的使用

Jenkins

【Docker】之安装 Jenkins_docker 安装jenkins

docker安装jenkins详细教程_Xd聊架构的博

Nginx 

Docker 安装 Nginx 容器 (完整详细版)

使用docker安装nginx

JDK

Docker安装JDK1.8版本_Jack魏的博客-CSDN博客_docker安装jdk

docker 安装 jdk,配置环境变量

docker极简安装jdk_小鲍侃java的博客-CSDN博客

Mysql

Docker下安装mysql超详细步骤_亿只王菜菜的博客-CSDN博客_docker mysql

使用docker安装mysql_王钧石的技术博客的博客-CSDN博客

Docker部署SpringBoot项目

Docker快速部署Springboot项目

手把手教你使用Docker部署Springboot项目

7、Docker常用命令

Docker命令

参考资料:

https://www.zhihu.com/question/28300645/answer/585166942
https://baijiahao.baidu.com/s?id=1665273511649700130&wfr=spider&for=pc
https://baijiahao.baidu.com/s?id=1668622380573288716&wfr=spider&for=pc
https://blog.csdn.net/qsbbl/article/details/86715741
https://baijiahao.baidu.com/s?id=1666555716941349742&wfr=spider&for=pc

https://blog.csdn.net/weixin_44232093/article/details/124297427

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker简介 的相关文章

随机推荐

  • 一、编写hello world

    1 开发环境 1 操作系统 Linux 2 编译 GCC编译 2 安装GCC 1 我们安装的Linux是Ubuntu 默认是不带GCC的 2 安装GCC命令 apt get install gcc 3 使用vim编写hello world
  • 用opencv3写的超详细注释的车牌检测

    include iostream include opencv2 opencv hpp include opencv2 highgui highgui hpp include opencv2 core core hpp include op
  • uniapp打包app,调用相机功能时在真机调试可以,打包成app之后不行

    在打包成app之后报如图所示错误 解决 在app模块配置勾选上相机这一项 如图 这是主要针对上面这个报错的 当然还有一下情况比较类似 就是相机功能在真机调试下可以 打包之后就不行了 我总结了如下几点 1 代码中的sourceType要配置为
  • 【满分】【华为OD机试真题2023 JS】不爱施肥的小布

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 不爱施肥的小布 知识点二分查找 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 某农场主管理了一大片果园 fields i 表示不同果林的面积 单位 m 2 现在
  • mybatis批量更新list对象

    最重要的一点 mybatis要想批量更新 首先我们数据库需要支持批量更新操作 需要在连接数据库时 添加配置 url jdbc mysql 192 168 6 11 3306 equipment im dev serverTimezone A
  • 内网渗透测试 MSF搭建socks代理

    环境搭建 最终效果为如此 web服务器可以ping通外网和内网两台服务器 外网打点 信息收集 发现端口 80 http 3306 mysql 敏感目录 phpMyadmin 数据库弱口令 root root 通过日志功能getshell 现
  • 在Unbuntu 18.04上docker安装MindSpore

    作者 张小白 文章来源 https bbs huaweicloud com blogs 241465 摘要 本文介绍了如何在ubuntu 18 04上使用docker安装python 3 7 5和mindspore 1 1 1 docker
  • RecyclerView设置Item的边距

    一 通过继承RecyclerView ItemDecoration RecyclerView有三种布局即 LinearLayoutManager 线性布局 StaggeredGridLayoutManager瀑布流布局 GridLayout
  • Java判断两个ListMap值是否相等(包括数据长度、存储的值)超实用工具类(亲测)

    一 功能描述 比较两个list中存储的map数据 比较的list的数据类型需一致 就能比较出存储的数据是否一致 二 实现步骤 1 比较两个list的长度大小 2 统计出每个list中存储的map值的个数及重复的 进行比较 3 具体比较值 三
  • React Hooks(useState、useEffect)

    本文目录 一 react hooks useState 1 1 useState使用 1 2 hooks案例 useState 二 react hooks useEffect 2 1 useEffect使用 2 2 useEffect模拟销
  • 设置地图背景图片

    设置地图背景图片 代码如下 设置地图框div的background 设置map ground surfaceColor 0 0 0 0 设置sceneview的 environment background color 0 0 0 0 di
  • xss绕过尖括号和双括号_XSS绕过filter高级技术part1

    在如今的web时代 XSS攻击十分常见 针对xss攻击的防御也有不少 Filter就是一种用来防御xss攻击的最常见的手段 filter通常是采用黑名单的形式或者基于正则表达式来过滤 尽管如此 依然有很多技术可以用来绕过Filter 基本变
  • VUE 子组件内输入框,父组件获取输入框的值

    父组件
  • 26. Remove Duplicates from Sorted Array

    题目 Given a sorted array nums remove the duplicates in place such that each element appear only once and return the new l
  • 01-TomCat和HTTP协议

    一 介绍 Tomcat 服务器是一个免费的开放源代码的Web应用服务器 Tomcat是Apache 软件基金会 Apache Software Foundation 的Jakarta 项目中的一个核心项目 由Apache Sun 和其他一些
  • [UE4][C++]用Socket传输图片并生成UTexture2D的一些坑

    首先 我规定好数据传输的格式 char 数组 RGBARGBARGBA 主要是将RGBA四个通道的数据按一定格式和顺序写好 然后发过来接收并解析就行 然后 就是数据的接收与解析 先讲一点很少有人注意到的细节 Socket的recv函数并不是
  • 华为OD机试真题-简单的压缩算法/栈【2023Q1】

    题目描述 现需要实现一种算法 能将一组压缩字符串还原成原始字符串 还原规则如下 1 字符后面加数字N 表示重复字符N次 例如 压缩内容为A3 表示原始字符串为AAA 2 花括号中的字符串加数字N 表示花括号中的字符重复N次 例如压缩内容为
  • 区块链电子签名技术及方案

    数字签名技术是电子签名的底层核心技术 由非对称密钥加密技术和数字摘要技术构成 首先发送方利用Hash函数对文件内容进行加密并生成数字摘要 然后利用私钥对数字摘要加密形成数字签名 接收方利用发送方提供的公钥对数字签名进行解密 若解密后的数字摘
  • [编程题] 不要二

    二货小易有一个W H的网格盒子 网格的行编号为0 H 1 网格的列编号为0 W 1 每个格子至多可以放一块蛋糕 任意两块蛋糕的欧几里得距离不能等于2 对于两个格子坐标 x1 y1 x2 y2 的欧几里得距离为 x1 x2 x1 x2 y1
  • Docker简介

    1 Docker是什么 Docker 是一个开源的应用容器引擎 Docker是一个基于轻量级虚拟化技术的容器 整个项目基于Go语言开发 并采用了Apache 2 0协议 Docker可以将我们的应用程序打包封装到一个容器中 该容器包含了应用