SpringCLoud——Docker的基本介绍

news2024/11/25 4:57:06

什么是Docker

项目部署问题

大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:

  1. 依赖关系复杂,容易出现兼容性问题
  2. 开发、测试、生产环境有差异。

Docker

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

  1. 将应用的LIbs(函数库)、Deps(依赖)、配置与应用一起打包
  2. 将每个应用放到一个隔离容器去运行,避免互相打扰

首先要了解一下计算机的运行原理,首先计算机大致是由计算机硬件,操作系统内核,系统应用组成。其中内核负责与硬件做交互,而系统则是封装了内核与硬件的交互指令,将指令封装成一个个的函数,组成函数库供我们调用,更加简便的开发程序:

那么都是基于同一个内核,那么Ubuntu的东西为什么不能再CentOS上运行呢?

因为两者的系统应用层不同,从而导致我们在程序中编写的一些函数不能调用,所以就无法顺利的在跨操作系统运行,Docker的思想,那就是将用户程序与所需要调用的系统函数库一起打包。也就是说Docker直接跳过了系统应用层,直接用自己封装的系统函数库与内核直接做交互,就完成了跨平台的运行。

总结

Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题?

  1. Docker允许开发中将应用,依赖,函数库,配置一起【打包】,形成可移植镜像
  2. Docker应用运行在容器中,使用沙箱机制,互相【隔离】

Docker如何解决开发,测试,生产环境有差异的问题

  1. Docker镜像中包括完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行。

Docker是一个快速交付,运行引用的技术:

  1. 将程序,及其依赖,运行环境一起打包,可以任意迁移
  2. 运行时使用沙箱机制隔离不同的服务
  3. 启动,移除都可以通过一行命令完成,方便快捷

Docker与虚拟机

Docker和虚拟机的差异:

  1. Docker是一个系统进程;虚拟机是在操作系统中的操作系统
  2. Docker体积小,启动速度快,性能好;虚拟机体积大,启动速度慢,性能一般。

Docker架构

镜像和容器

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

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

当我们启动一个容器的时候,他会产生自己独立的供自己运行的资源,以及有自己独立的文件系统用来储存业务数据,并且这个容器自己写的内容并不会污染其他的容器或者污染镜像,镜像就像是一个本体,所有的容器都是对镜像的拷贝,至于你的容器怎么玩,到时候都不会污染镜像,容器玩坏了就删掉,无非就是一个进程而已,到时候从镜像中再启动一个容器,就跟全新的是一样的了。

Docker和DockerHub

  1. DockerHub:DockerHub是一个Docker镜像的托管平台。这样的平台称为Docker Registry。
  2. 国内也有类似于DockerHub的公开服务,比如各大互联网公司的公开云服务器。
  3. 如果别希望自己的内部敏感服务暴露,可以创建自己的私有云服务器

Docker架构

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

  1. 服务端(server): Dcker守护进程,负责处理Docker指令,管理镜像,容器等
  2. 客户端(Client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或向远程服务端发送指令

一般我们的操作就是使用build创建镜像,或者使用pull拉取镜像,然后使用run生成实例。

安装Docker

企业不是一般采用Linux操作系统,所以我们这次就使用CentOS安装Docker做实例。

Docker分为CE和EE两大版本,CE即社区版,免费,EE即企业版,收钱。

Docker分为stable,test,nightly三个更新频道

DockerCE支持64位版本CentOS7,并且要求内核版本不低于3.10,CentOS满足最低内核要求,所以我们在CentOS7安装Docker。

卸载

如果之前安装过旧版本的Docker,可以使用以下命令卸载:

yum remove docker \

                  docker-client \

                  docker-client-latest \

                  docker-common \

                  docker-latest \

                  docker-latest-logrotate \

                  docker-logrotate \

                  docker-selinux \

                  docker-engine-selinux \

                  docker-engine \

                  docker-ce

正常应该是没有匹配就是没有安装Docker

安装Docker

首先需要虚拟机联网,安装yum工具

yum install -y yum-utils \

           device-mapper-persistent-data \

           lvm2 --skip-broken

然后更新本地镜像源:

yum install -y yum-utils

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

yum makecache fast

然后输入命令:

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

docker-ce为社区免费版本。稍等片刻,docker即可安装成功。

当然,也不是所有的情况都会这么顺利,坑有很多,其中一个就是,当你觉得很顺利的时候,在安装的时候出现了这个问题:

显示没有可用的软件包,这就表示你之前安装的清华源的源有问题,直接来到清华源的网址:docker-ce | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

在这里有最新的清华源的安装Docker的方式,使用这里的代码,按照这里的步骤就不会出错,当然,之前出错的原因可能是因为版本的问题,这里的代码有问题了,而原来的老代码在运行的时候会报错:

最主要的就是如果你发现你的这个网站是404-Not Found,就表示你的源地址已经过期了,使用新的:

yum install -y yum-utils

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

这样就可以了。

然后继续安装Docker:

出现这个就表示安装成功了。

启动Docker

在启动Docker之前一定要关闭防火墙,否则你的服务访问不到,你的墙全都给你拦截了,在正式的企业中是要对特定的服务端口做配置特定放行,但是在学习阶段,对于防火墙的配置比较麻烦,所以我们选择直接关闭防火墙即可。

查看防火墙的状态:

systemctl status firewalld

我这里显示是已经关闭了,正常应该是有一个绿色的点,然后状态显示active,我们只要看前面的点是不是绿色的就可以,如果是绿色的就要去关闭。

关闭防火墙:

systemctl stop firewalld

这个命令是没有返回效果的,所以我们在运行完之后要再去看一下防火墙的状态,直到变成关闭状态才可以。

不同版本的CentOS可能命令不同,如果后期出现了其他的变化,则需要更新最新的命令

并且可以设置防火墙禁止开机自启:

systemctl disable firewalld

这样防火墙就不存在于这台虚拟机上了。

然后我们就可以启动dicker了

systemctl start docker

启动之后我们查看docker服务的状态,如果是已经启动,则表示没有问题:

除了查看进程的方式查看服务是否正常启动,我们还可以通过查看版本号的方式查看安装和启动是否成功:

docker -v

配置镜像

docker官方镜像仓库网速较差,我们需要设置国内镜像:

参考阿里云的镜像加速文档:

如何获取和配置镜像加速器_容器镜像服务 ACR-阿里云帮助中心 (aliyun.com)

首先上来,他会告诉你如何获取镜像加速器地址:

然后我们就创建一个阿里云的账号,登录后获取一个镜像加速器地址,以及如何配置这个地址的案例:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://t6lm0wo3.mirror.aliyuncs.com"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

然后我们在自己的虚拟机中运行他给你的命令即可:

这样就完成了阿里云镜像的配置。

在选择配置方式这里,一定要注意看到阿里官网的地方,这里有两个标题,分别是【当您的Docker较新时】,和【当您的Docker较旧时】:

我们只需要看较新的那个就可以了,如果你不慎运行了Docker较旧版本的方式,那你可能需要重新部署一个虚拟机,或者清空有关的配置,建议安装Docker之后拍一个快照。

Docker的基本操作

Docker操作镜像

镜像相关命令

  1. 镜像名称一般分为两部分组成:[repository]:[tag]。
  2. 在没有指定tag时,默认是latest,代表最新版本镜像

这表示mysql:5.7和mysql:8.0是两个完全不同的镜像。

镜像操作命令:CRUD

  1. docker build:从本地创建镜像
  2. docker images:查看镜像
  3. docker rmi:删除镜像
  4. docker posh推送镜像到服务
  5. docker pull:从服务拉取镜像
  6. docker save:保存镜像为一个压缩包
  7. docker load:加载压缩包为镜像

查看帮助文档:docker --help

并且可以在某个具体的命令后面加上 --help 用来查看具体某个命令的作用:

案例

从DockerHub中拉取一个nginx并查看

  1. 首先要去镜像仓库搜索nginx镜像,比如DockerHub:

当然,因为某种【不知名】的原因,如果你想访问这个网站,你需要知道如何才能使用科学的方式去进行网络活动,如果你能打开Gethub,那么打开这个网站的方式是一样的:Explore Docker's Container Image Repository | Docker Hub

然后我们打开搜索结果的第一个:

他会告诉你这个镜像是什么,以及对应的服务如何配置,并且还有拉取镜像的命令:

很贴心,我们直接使用他给出的命令即可:

docker pull nginx

首先我们看到我们本地是没有任何的镜像存在的,然后我们拉取一个云端的nginx镜像:

这里,如果你不写tag,那么默认就是最新的版本,也就是latest:

然后我们可以看到这个镜像的详细信息,比如名字,tag,ID,创建日志,以及大小。然后我们再来测试将镜像导出到本地的压缩包中:

使用命令:

docker save -o nginx.tar nagin:latest

这样我们就完成了将镜像保存到本地的操作,然后我们现在删除已经安装的镜像,然后将本地的镜像导入进去:

首先是删除操作:

然后是导入操作:

这样就完成了从本地导入镜像的操作。

容器相关命令

关于容器,最常用的操作就是从镜像创建并运行一个容器,使用docker run命令。在容器运行期间,会出现三种状态,运行状态,暂停状态和停止状态。默认我们在创建一个容器的时候就已经是运行状态,从运行状态切换到暂停状态使用的是pause命令,而从暂停状态切换到运行状态是使用unpause命令。从运行状态切换到停止状态使用stop命令,从停止状态切换到运行状态使用的是start命令。除了状态切换命令,还有其他一切常用的命令:

  1. rm:删除指定容器
  2. ps:查看所有运行的容器及状态
  3. logs:查看容器运行日志
  4. exec:进入容器执行命令

关于停止和暂停的区别,停止是指将进程挂起,内存文件保留,等到再次启用这个进程的时候再次释放。停止就是结束这个进程,回收内存,只保留落盘的文件系统,等待下一次的启动。而删除就是结束进程,回收内存,并删除进程有关的文件,等于这个进程有关的所有的信息都被删除了。

案例

创建运行一个Nginx容器

  1. 步骤一:去dockerhub查看Nginx的容器运行命令

在官方的镜像网站中,一般都能看到对应的镜像使用方式,他会告诉你这个镜像的对应的命令以及参数都代表什么意思。

我们选一个最简单最短的一个:

docker run --name some-nginx -d -p 8080:80 -d nginx

命令解读:

  1. docker run:创建并运行一个容器
  2. --name:给容器起一个名字,比如some-nginx,是用来管理容器的id
  3. -p:端口映射,将宿主机端口与容器端口映射,冒号左侧是宿主机端口,右侧是容器端口。映射的作用是将原本完全隔离的容器暴露出一个可供访问的端口,让外界可以访问容器内的服务,宿主机端口可以随便写,只要不是一个占用端口就可以,容器内端口是看服务的启动端口。
  4. -d:后台运行容器
  5. nginx:镜像名称,例如nginx

然后我们来到容器中试一下:

容器运行之后,会返回一个字符串,这个就是容器的唯一ID,容器名和这个ID都是全局唯一的,都是用来管理容器的。

然后我们可以查看一下容器的状态:

docker ps

然后有关这个进程的相关信息就会被罗列出来。

然后我们就可以访问一下这个服务,这里要注意不要乱了,因为你的Docker是安装在Linux上的,所以对于Docker来说,宿主机的Linux,而不是你的真机,对于你的Linux来说,你的真机才是宿主机,所以这里我们要访问的是你的虚拟机的地址,而不是你的真机的地址:

这里我的虚拟机的地址是192.168.80.4,所以我的访问地址就是这个,根据你们自己的虚拟机地址不同这里是要发生改变的。

我们可以来到虚拟机查看一下我们的服务日志,使用命令:

docker logs [容器名]

并且,我们可以使用-f参数来持续的监控日志输出:

此时日志并没有退出,而是等待新的日志的出现,我们来到浏览器中点击几次刷新按钮:

对应的,这里就会出现刚才我们请求的日志信息。

其他操作

查看容器状态:

  1. docker ps
  2. 添加-a参数查看所有状态的容器

删除容器:

  1. docker rm
  2. 不能删除运行中的容器,除非加-f参数

进入容器

  1. 命令是docker exec -it 【容器名】 【要执行的命令】
  2. exec命令可以进入容器修改文件,但是在容器内修改文件是不推荐的。
    1. 首先修改不方便
    2. 其次修改的内容没有记录

案例

创建一个redis的容器,并且支持数据持久化

首先拉取一个redis的镜像到本地:

查看一下本地的镜像:

然后运行redis镜像,生成一个对应的容器:

docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes

--appendonly yes参数表示支持持久化。

启动之后我们进入容器:

这样我们就完成了从拉取镜像,到运行容器,并进入容器进行一定操作的过程。

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

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

相关文章

GDPU 数据结构 天码行空2

实验内容 用顺序表实现病历信息的管理与查询功能。具体要求如下: 利用教材中定义顺序表类型存储病人病历信息(病历号,姓名&#xff0c;症状)&#xff1b;要求使用头文件。 设计顺序表定位查找算法&#xff0c;写成一个函数&#xff0c;完成的功能为:在线性表L中查找数据元素x…

CSS 链接:Link

文章目录 CSS 链接链接样式常见的链接样式文本修饰背景颜色案例1&#xff0c;添加不同样式的超链接2&#xff0c;高级 - 创建链接框 CSS 链接 CSS可以用来设置链接的样式&#xff0c;包括未访问的链接&#xff08;a:link&#xff09;、已访问的链接&#xff08;a:visited&…

【Linux 应用】 kworker 进程

1.简介 “kworker” 是 Linux 内核的工作线程&#xff0c;用于异步处理工作队列中的任务。这些任务包括处理硬件中断、文件系统事件、管理系统内存等。你可能会看到多个 kworker 进程&#xff0c;每个进程的名称后面都有一个数字&#xff0c;如 “kworker/0:1”、“kworker/1:…

GIF动画如何生成?简单几步快速生成gif

gif动画图片制作的方法有哪些&#xff1f;gif动图就是由一帧一帧的静态图像合成的动态效果。gif动图能够在日常聊天中缓解尴尬的气氛&#xff0c;表达你的内心想法等等。那么&#xff0c;gif动图如何自制呢&#xff1f;通过使用专业的gif动画制作&#xff08;https://www.gif.c…

Tomcat7+ Weak Password Backend Getshell Vulnerability

漏洞描述 Tomcat 支持通过后端部署 war 文件&#xff0c;所以我们可以直接将 webshell 放入 Web 目录下。为了访问后端&#xff0c;需要权限。 Tomcat7 的权限如下&#xff1a; 经理&#xff08;后台管理&#xff09; 管理器-GUI&#xff08;HTML 页面的权限&#xff09;管理…

JMeter压力测试初体验:线程组、取样器、监听器的简单使用以及如何查看压测结果

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…

王国纪元 - 龙火战场+国战+IP联动ACW

IGG出品 龙火战场 类似于一个演习战场&#xff0c;给平时不常打仗的小伙伴一个打仗的机会。 大致流程&#xff1a;进场5分钟可以和朋友聊天打屁&#xff0c;商量战术&#xff0c;之后5分钟可以进攻哨塔和传送阵&#xff08;低级联赛没有传送阵&#xff09;&#xff0c;哨塔没什…

如何写出一个成熟的线上线下结合的营销方案?

分享一下咱们案例库里策划的一个线上线下结合的活动的案例。 这个活动是为了推广一个新品牌&#xff0c;增加品牌知名度和用户粘性。 你可以根据以下几个要点来进行活动策划&#xff1a; 1、目标&#xff1a; 让目标用户了解并喜欢新品牌&#xff0c;激发用户参与和分享&am…

使用延迟队列解决分布式事务问题——以订单未支付过期,解锁库存为例

目录 一、前言 二、库存 三、订单 一、前言 上一篇使用springcloud-seata解决分布式事务问题-2PC模式我们说到了使用springcloud-seata解决分布式的缺点——不适用于高并发场景 因此我们使用延迟队列来解决分布式事务问题&#xff0c;即使用柔性事务-可靠消息-最终一致性方…

【JAVASE】图书管理系统

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 图书管理系统 1. 设计思路图2. 创建 boo…

2023年 国赛 数学建模C 基于遗传算法和神经网络的销量定价模型

一、写在开头 阅读者可能需要先阅读2023年国赛C题才能读懂下面的内容。 文章着重于解题方向指引和经历分享&#xff0c;只解释部分核心代码。 二、内容概述 刚刚做完比赛&#xff0c;对这段经历和对问题的处理方法进行下记录。 三、个人经历 今年大三&#xff0c;第一…

stm32f103步进电机S曲线计算

S曲线主要实现低速扭力大&#xff0c;更快更稳 https://zhuanlan.zhihu.com/p/396648926?utm_campaign&utm_mediumsocial&utm_oi1361101006265331712&utm_psn1686906450235133952&utm_sourcezhihu 可点击上面链接查看啤酒杯的运动动画 摘自一段知乎上一段关于…

html div span 容器元素

html div && span 容器元素 div 标签定义 HTML 文档中的一个分隔区块或者一个区域部分, 标签常用于组合块级元素&#xff0c;以便通过 CSS 来对这些元素进行格式化 span 用于对文档中的行内元素进行组合 标签提供了一种将文本的一部分或者文档的一部分独立出来的方式 &…

【ELFK】之zookeeper

一、Zookeeper是什么&#xff1f; zooleeper是一个分布式服务管理框架。存储业务服务节点元数据及信息&#xff0c;并复制&#xff1b;通知客户端在zookeeper上注册的服务节点状态&#xff0c;通过文件系统通知机制 1、Zookeeper工作机制 Zookeeper从设计模式角度来理解 是…

Java——文件操作IO

一 、文件File 狭义的文件&#xff1a; 指硬盘上的 文件 和 目录 。 广义的文件&#xff1a; 泛指计算机中的很多软硬件资源。 针对硬盘这种持久化存储的I/O设备&#xff0c;当我们想要进行数据保存时&#xff0c; 往往不是保存成一个整体&#xff0c;而是独立成一个个的单位…

C/C++简单计算器 2019年12月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C简单计算器 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C简单计算器 2019年12月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 一个最简单的计算器&#xff0c;支持…

Hadoop NameNode执行命令工作流程

Hadoop NameNode执行命令工作流程 客户端API或者CLI与NameNode的交互命令数据的格式(1) 预处理流程(2) 创建NameNode与NameNodePrcServer流程(3) HDFS API以及CLI的命令到NameNode的工作执行流程(4) 执行命令的参数流动 客户端API或者CLI与NameNode的交互命令数据的格式 hadoop…

读高性能MySQL(第4版)笔记10_查询性能优化(上)

1. 三管齐下 1.1. 不做、少做、快速地做 1.2. 如果查询太大&#xff0c;服务端会拒绝接收更多的数据并抛出相应错误 1.3. 如果查询写得很糟糕&#xff0c;即使库表结构再合理、索引再合适&#xff0c;也无法实现高性能 1.4. 查询优化、索引优化、库表结构优化需要齐头并进&…

JS的WebAPI

WebAPI背景知识 什么是 WebAPI 前面学习的 JS 分成三个大的部分 ECMAScript: 基础语法部分 DOM API: 操作页面结构 BOM API: 操作浏览器 WebAPI 就包含了 DOM BOM. 什么是 API API 是一个更广义的概念. 而 WebAPI 是一个更具体的概念, 特指 DOMBOM&#xff0c;所谓的 API …

使用 Elasticsearch、OpenAI 和 LangChain 进行语义搜索

在本教程中&#xff0c;我将引导您使用 Elasticsearch、OpenAI、LangChain 和 FastAPI 构建语义搜索服务。 LangChain 是这个领域的新酷孩子。 它是一个旨在帮助你与大型语言模型 (LLM) 交互的库。 LangChain 简化了与 LLMs 相关的许多日常任务&#xff0c;例如从文档中提取文本…