【Docker】(一)基本概念与安装使用

news2024/11/24 0:37:39

1.概述

最近学习了Docker的使用,想通过一个系列的笔记来记录学习的过程与收获,并为以后的生产工作提供指导。
我一直认为学习一门技术时,需要先了解这门技术的基本概念,了解它能解决的问题,这样才能定位明确的学习目标,学以致用。同时,在运维技术中需要使用到的中间件与各类技术设施,都需要亲手安装使用,理论与实践结合起来,才能帮助我们理解这门技术,用好这门技术。

本篇是这个系列笔记中的第一篇笔记,记录的就是Docker中的基本概念与安装方法。

2.Docker中的基本概念

对于Docker的概念、使用教程、API文档,在《Docker官方文档》中都可以找到,有一定英文能力的同学,推荐直接跳转阅读原汁原味的官方文档。

本篇以下的内容是参考官方文档结合自身的理解来总结出的笔记,对官网中没有写到一些小细节做了一点补充。

2.1. 什么是Docker

在我学习Docker之前,经常听到这么一种说法,说Docker是一种容器,这种说法不能说是错的,但是没有描述完整,我们可以从多个角度来看Docker到底是什么。

  • 从程序的角度来看,容器就是包含了程序运行所需环境的轻量级虚拟服务器,而Docker是一种容器化技术。
  • 从使用者的角度看,Docker是一种可以帮助我们更加轻松的完成程序安装部署的工具

从Docker本身来看,它是一个用于传输、存储、部署、运行应用程序的综合开放平台,它既是一个服务,也是一个工具。

2.2.Docker的作用

Docker容器中包含了程序运行的一切,也就是说,一旦我们按照Docker提供好的流程构建了程序,我们将不再需要担心,由于不同服务器中对于应用程序运行所需依赖的文件、环境变量不同,而造成的各种异常、报错等问题,直接运行Docker就可以轻松的得到一个可正常使用的应用程序。

由于Docker容器有良好的移植性,我们可以使用别人已经构建好的image镜像文件,快速的安装应用程序,如分布式中间件中的Redis,MQ,ES等等。
同时,我们也可以将自己的服务打包之后,做成image,以供在各个环境中运行。

也就是说,使用Docker会显著的降低运维工作的繁琐程度与困难程度,让开发人员也可以参与到业务相关的运维工作中,也是实现DevOps的基础。(当然,容器化技术并不只有Docker这一种,只是Docker更具代表性)

2.3.Docker的组成

与多数的中间件架构一样,Docker也是C/S架构,包含客户端与服务端,安装完成Docker之后,我们可以在任意一台与Docker服务端网络连通的机器上,使用Docker客户端进行操作。

下面是一张官网的架构图:
在这里插入图片描述

接下解释一下,架构图中各个组成部分以及操作代表的含义。

2.3.1.Client

Docker的客户端,以调用API的形式,向Docker的服务端发送请求,上图中的3个API的作用分别是:

  • docker build:构建镜像文件
  • docker pull:拉取镜像文件
  • docker run:使用镜像文件,生成Docker 容器

2.3.2.Docker Daemon

Docker的守护进程,主要做两件事:

  • 监听由客户端发送过来的请求,按照请求的内容,指挥服务端中的其他Docker组件处理。
  • 与其他Docker服务端的守护进程通信,协调多个不同服务器上的容积进行协同工作。

2.3.3.Images

Docker的镜像文件,可以理解为创建Docker容器的模板,如果用Java来进行类比的话,image就相当于Java中的类。在绝大对数情况下,一个镜像文件除了本身需要运行的应用程序之前,还包含其他的镜像(思考一下为什么)。


以一个简单的例子来解释,假如我们现在需要构建一个可运行的SpringBoot应用,按照传统的方式,我们需要:

  • 准备一台服务器
  • 在这台服务器上安装Java环境
  • Springboot打包成一个jar,复制到服务器中运行

上面这三步是应用运行必不可少的,现在我们换成Docker的方式也是一样的,我们也需要三步:

  • 构建一个服务器镜像
  • 以这个服务器镜像为基础,构建一个包含了Java环境的服务器镜像
  • 以这个Java环境镜像为基础,构建一个SpringBoot应用程序镜像

Docker的优势在哪里?

对比一下发现,这两种方式不是一样的吗,都是需要这么多步骤,Docker的优势在哪里呢?

其实两者的区别是在于,使用Docker的方式,并不需要每次构建SpringBoot应用程序镜像的时候,都完整的执行者三个步骤,前面的两个步骤执行了一次之后,获取到的镜像是可以重复使用的。也就是说,如果我们继续迭代了这个服务,想重新部署一个新的版本,只需要做第三步,就可以获取到一个新版本的应用程序镜像。

同时,如果服务需要做扩展,相比于使用传统方式增加服务器,需要在服务器中重复繁琐的搭建工作而言,使用Docker的方式,一旦我们构建完成了可执行的应用程序镜像,就可以在任意一个有Docker服务端的服务器中直接运行了。

更进一步说,前面的两步所构建的镜像,我们甚至可以直接从在Docker的镜像仓库中下载,对于这种基础环境类型的镜像,在镜像仓库中可以很容易找到。

2.3.4.Registry

Docker的镜像仓库,类似于Maven远程仓库,我们可以在这个仓库中找到官方或其他开发者上传的镜像,直接拉取使用,也可以将我们自己构建好的镜像上传到仓库中。

Docker Hub是官方镜像仓库,而我们生产中可能会使用国内云厂商的镜像仓库,如阿里云、腾讯云等。

Docker Hub地址:https://hub.docker.com/

2.3.5.Containers

Docker容器,由运行镜像文件生成,如果将Image看作是Java中的类的话,Container就可以看作是Java中的对象。

使用docker run指令生成容器,映射好主机与容器中的虚拟服务器之间的端口关系之后,我们就可以正常的访问应用程序了。

3.Docker的安装

Docker Desktop具有图形化的界面,可以在具有图形化界面的操作系统中使用,例如:MacOS、Windows、Ubantu等,可以参考官方文档下载安装包进行安装, Docker Desktop下载

需要注意的是,如果已经在Windows上安装了VMware虚拟机,再安装Windows版本的Docker Desktop的话,有可能会因为两者不兼容导致虚拟机无法启动。

Docker有个人版和企业版,分别对应 docker ce 与 docker ee ,这里我们选择安装docker ce

如果已经有了Centos服务器,推荐使用以下方法。


第一步:安装yum工具,并配置docker的repository地址。

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

这里建议配置为阿里云的镜像,加速下载。
在这里插入图片描述
因为不让挂外链,这里阿里云的仓库地址只有放个截图在这里了。


第二步:安装docker ce

sudo yum install docker-ce

按照提示步骤进行安装,完成之后执行:

docker version

在这里插入图片描述


第三步:Docker启动与验证

sudo systemctl start docker

sudo docker run hello-world

当看到Hello from Docker!时,表示Docker已经安装成功并可以正常运行。但是服务器重启之后,又需要再次手动启动Docker服务,非常麻烦,所以我们还需要配置Docker的开机启动。

sudo systemctl enable docker

4.总结

本篇先描述了Docker的基本概念,了解Docker的架构组成与各个组件的作用,然后演示了如何在Centos中使用yum安装Docker服务。

现在基础设施已经完备了,接下来就是我们如何通过客户端的API来使用Docker,接下来的几篇文章会以循序渐进的搭建一个SpringBoot的运行环境为例,通过具体的操作来熟悉Docker的API指令。

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

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

相关文章

frp内网穿透https

在公网服务器搭建frps(service),在内网本地机子搭建frpc(client),流量通过访问公网ip,经过frps服务端转发到fprc客户端,fprc再转发到本地web应用。 官方下载地址​ https://github.com/fatedier/frp/releases 官方文档地址https…

智能门锁“激战正酣”

近年来,智能化已经成为了高频词,越来越多的行业都在朝着智能化方向发展,家居行业也不例外。受技术升级、居民收入水平提高等多重因素影响,整个智能家居行业呈现出了蓬勃发展态势。据亿欧智库预测,2025年中国智能家居市…

客运车票网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 题目:基于Wb的公路客运车票信息管理系统设计与实现 时了解客运站动态。 角色:乘客、管理员 (2)车…

[附源码]Node.js计算机毕业设计-高校人事管理系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

C++设计模式的个人理解 繁琐的底层需要合理设计

一、为什么会有设计模式 由于每个人自身的能力、所在的层次、看问题的角度都不同,仅凭直觉“对现实建模”,很有可能会生成一些大小不均、职责不清、关系混乱的对象,最后搭建出一个虽然可以运行,但却难以理解、难以维护的系统。为此…

基于Java+Mysql实现酒店预订系统【100010045】

酒店预订系统 1.引言 1.1编制目的 1.详细完成对酒店预订系统的概要设计, 2.达到指导详细设计和开发的目的, 3.同时实现和测试人员及用户的沟通。 3.本报告面向开发人员,测试人员及最终用户的编写额,是了解系统的导航。 1.2…

Flink基本转换算子

文章目录1.映射(map)2.过滤(filter)3.扁平映射(flatMap)4.按键分区(keyBy)5. 简单聚合(sum,min,max等)6.归约聚合(reduce&…

m基于LDPC+QPSK通信链路误码率matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 LDPC ( Low-density Parity-check,低密度奇偶校验)码是由 Gallager 在1963 年提出的一类具有稀疏校验矩阵的线性分组码 (linear block codes),然而在接下来的 …

第五届“强网”拟态防御国际精英挑战赛在南京举行——开辟网络安全新赛道 引领网络弹性新优势

12月15日,第五届“强网”拟态防御国际精英挑战赛在南京紫金山实验室隆重开幕,来自国内外60支顶尖战队将通过云上和线下相结合的方式展开72小时的高强度对抗。大赛组委会主席、紫金山实验室首席科学家、中国工程院邬江兴院士指出,本届挑战赛瞄…

jvm内存模型+类加载机制+垃圾手机器

1、类加载器分类 1、引导类加载器,负责加载支撑Jre/lib目录下的核心类库 2、扩展类加载器:负责加载Jre/lib目录下的ext扩展类jar包 3、应用程序类加载器:负责加载classpath下的类包 4、自定义类加载器:负责加载用户自定义路径下的…

值得思索的:ArrayList和线性表,你确定错过这次机会

线性表: 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结 构,常见的线性表:顺序表、链表、栈、队列... 线性表在逻辑上是线性结构,也就说是连续的一条…

Go项目实战:01-聊天室+map竞争需要上锁

实现一个聊天室(群): 功能分析: 1、上线下线2、聊天:其他人和自己都可以看到聊天消息3、查询当前的聊天室用户所有人的名字4、可以修改自己的名字5、超时潜水踢出机制 技术点分析: 1、socket tcp编程2、…

Adam算法及python实现

文章目录算法介绍代码实现结果展示参考算法介绍 Adam算法的发展经历了:SGD->SGDM->SGDNA->AdaGrad->AdaDelta->Adam->Adamax的过程。它是神经网络优化中的常用算法,在收敛速度上比较快,比SGD对收敛速度的纠结上有了很大的…

单商户商城系统功能拆解46—应用中心—足迹气泡

单商户商城系统,也称为B2C自营电商模式单店商城系统。可以快速帮助个人、机构和企业搭建自己的私域交易线上商城。 单商户商城系统完美契合私域流量变现闭环交易使用。通常拥有丰富的营销玩法,例如拼团,秒杀,砍价,包邮…

基于微信小程序的课程分享平台-计算机毕业设计

项目介绍 随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采用java语言技术和mysql数据库来完成对系统的设计。整…

[附源码]Node.js计算机毕业设计高校就业管理信息系统Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

学生竞赛网站

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 模块划分:通知类型、通知信息、学院信息、学生信息、学科信息、竞赛信息、报名信 息、成果上传、评分排名 管…

YOLOv5小目标切图检测

当我们在检测较大分辨率的图片时,对小目标的检测效果一直是较差的,所以就有了下面几种方法: 将图片压缩成大尺寸进行训练( 想法:没显存,搞不来)添加小检测头(想法:P5模型…

【爬虫实战项目】Python爬虫批量下载相亲网站数据并保存本地(附源码)

前言 今天给大家介绍的是Python爬虫批量下载相亲网站图片数据,在这里给需要的小伙伴们代码,并且给出一点小心得。 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这样的纯文本数据爬取的人会…

数据结构---树和二叉树

树和二叉树定义二叉树二叉树的物理结构链式存储数组二叉树应用查找维持相对顺序二叉树的遍历深度优先遍历前序遍历中序遍历后序遍历二叉树广度优先遍历层序遍历定义 有且仅有一个特定的称为根的节点。当n>1时,其余节点可分为m(m>0)个互…