SpringCloud-Docker安装与详解

Docker 是一款强大的容器化平台,通过其轻量级的容器技术,使应用程序的开发、部署和管理变得更加便捷和高效。本文将深入探讨 Docker 的安装过程,并详细解析其基本概念、组件及常用命令,以帮助读者充分理解和熟练使用 Docker。企业部署一般都是采用 Linux 操作系统,而其中又数 CentOS 发行版占比最多,因此我们在 CentOS 下安装 Docker。


一、Docker里的基本概念

1、容器(Container)

容器是 Docker 的核心概念之一。它是一个独立运行的软件包,包含应用程序和其所有依赖项,例如库、运行时和系统工具。容器通过 Docker 引擎进行管理,具有轻量级和可移植性的特点。

这么说是不是有点抽象,下面举个生动点的例子:

想象一下容器就像是一个移动的盒子,但不是普通的盒子,而是一个包含应用程序、运行环境以及所有所需依赖的特殊盒子。这个盒子具有一定的隔离性,就像是一个独立的小世界,里面的应用程序不会干扰外部的系统。

在这个盒子里,应用程序可以自己携带所需的一切,无论是代码、库、配置文件还是其他依赖,就像是一个自给自足的小单元。这使得这个盒子可以在任何支持容器技术的地方运行,而不会受到外部环境的影响。 

容器就像是移动的、自包含的应用程序集装箱,可以在任何地方顺利运行,让软件的开发、测试和部署变得更加简便和可靠。

容器的好处在于它们轻量、快速,而且非常灵活。你可以在一台计算机上开发和测试容器,然后轻松地将它们部署到另一台计算机上,而不必担心环境差异。这种便携性和一致性让容器成为现代软件开发和部署的理想选择。


2、镜像(Image)

镜像是容器的基础,是一个只读的文件,包含了应用程序运行所需的所有信息,包括代码、运行时、库、环境变量等。镜像是容器的模板,可以通过它创建并运行多个相同的容器。

镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。

镜像是分层结构,每一层称为一个Layer:

  • Baselmage层:包含基本的系统函数库、环境变量、文件系统。
  • Entrypoint:入口,是镜像中应用启动的命令。
  • 其它:在Baselmage基础上添加依赖、安装程序、完成整个应用的安装和配置。

除了很多被封装好的镜像外,我们也可以用 Dockerfile 来自定义镜像,这里仅作了解。


3、仓库(Repository)

Docker 仓库是用来存储和共享镜像的地方。

官方仓库是Docker Hub,用户可以在其中找到并下载各种官方和社区创建的镜像。

镜像仓库 (Docker Registry) 有公共的和私有的两种形式:

  • 公共仓库:例如 Docker 官方的 Docker Hub,国内也有一些云服务商提供类似于 Docker Hub 的公开服务,比如网易云镜像服务、DaoCloud 镜像服务、阿里云镜像服务等。
  • 私有仓库:除了使用公开仓库外,用户还可以在本地搭建私有 Docker Registry,企业自己的镜像最好是采用私有 Docker Registry 来实现。

我们可以根据需要,通过更改镜像仓库源的方式,灵活选择镜像仓库。


二、安装Docker

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期7个月),EE 即企业版,强调安全,付费使用,支持周期24个月。Docker CE 分为 stable test 和 nightly 三个更新频道。官方网站上有各种环境下的安装指南,这里主要介绍 Docker CE 在 CentOS 上的安装。

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

1、卸载已有的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 软件包。但不会删除容器、镜像等数据。


2、CentOS7安装Docker

接下来,我们将安装 Docker。

首先,安装一些 yum 工具:

yum install -y yum-utils \device-mapper-persistent-data \1vm2 --skip-broken

然后,更新本地镜像源为阿里源:

#设置docker镜像源
yum-config-manager \--add-repo \https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repoyum makecache fast

安装 Docker:

sudo yum install -y docker-ce #-y表示按默认配置安装

3、启动Docker

① 关闭防火墙

Docker应用需要用到各种端口,逐一去修改防火墙设置。 非常麻烦,因此建议大家直接关
闭防火墙!启动docker前,一定要关闭防火墙!!!

#关闭
systemct1 stop fi rewalld
#禁止开机启动防火墙
systemct1 disable firewalld

② 启动Docker

启动 Docker 服务,并设置为开机自启:

sudo systemctl start docker
sudo systemctl enable docker

现在,Docker 已经成功安装并启动在 CentOS 7 上。

输入命令,可以查看 Docker 版本:

docker -v

这将显示 Docker 的版本信息,确认安装成功。

至此,我们已经完成了 CentOS 7 上 Docker 的安装和配置。


③ 配置镜像加速器

由于 Docker 的官方镜像源在国外,网速较差,我们可以根据需要设置国内镜像:
(建议自行百度,查阅参考 阿里云官方的最新镜像加速文档)


三、Docker的基本操作

1、容器操作

Docker 提供了许多命令来管理容器,以下是一些常见的 Docker 容器操作命令:

① 创建容器
docker run [options] image [command] [args...]

例如:

docker run -it ubuntu /bin/bash

这将创建一个以交互模式运行的 Ubuntu 容器。


② 列出所有容器
docker ps -a

这将列出所有容器的详细信息,包括运行中的和已停止的容器。


③ 停止容器
docker stop container_id

通过容器的 ID 或者名称停止运行中的容器。


④ 删除容器
docker rm container_id

删除已停止的容器。 


⑤ 启动已停止的容器
docker start container_id

通过容器的 ID 或者名称启动已停止的容器。


⑥ 重启容器
docker restart container_id

通过容器的 ID 或者名称重启容器。


⑦ 进入容器
docker exec -it container_id /bin/bash

以交互模式进入正在运行的容器。


⑧ 查看容器日志
docker logs container_id

查看容器的标准输出。


⑨ 查看容器统计信息
docker stats container_id

查看容器的资源使用情况。


⑩ 查看容器详细信息
docker inspect container_id

查看有关容器的详细信息,包括配置、网络设置等。


⑪ 复制文件到/从容器
docker cp source_path container_id:destination_path
docker cp container_id:source_path destination_path

将文件复制到或从容器中。


2、镜像操作

Docker 提供了丰富的命令来管理镜像,以下是一些常见的 Docker 镜像操作命令:

① 查找镜像
docker search image_name

在 Docker Hub 上查找镜像。


② 拉取镜像
docker pull image_name

从 Docker Hub 拉取指定的镜像。


③ 列出本地镜像
docker images

列出本地已经下载的镜像。


④ 删除本地镜像
docker rmi image_id

删除本地的镜像。


⑤ 构建镜像
docker build -t image_name:tag

根据当前目录中的 Dockerfile 构建一个新的镜像。


⑥ 推送镜像到仓库
docker push image_name:tag

将本地的镜像推送到远程镜像仓库。


⑦ 查看镜像历史记录
docker history image_name

⑧ 导出镜像为文件

docker save -o output_file.tar.gz image_name

将镜像打包为一个文件。 


⑨ 从文件中导入镜像

docker load -i input_file.tar.gz

从文件中导入一个镜像。 


⑩ 查看镜像详细信息
docker inspect image_name

查看有关镜像的详细信息,包括配置、挂载点等。


3、数据卷操作

数据卷的建立是为了解决容器与数据耦合的问题。Docker 数据卷是一种用于在容器之间共享和持久化数据的机制。它提供了一种绕过容器文件系统的方式,将数据存储在主机上,并使多个容器能够访问相同的数据。

数据卷 (volume) 是一个虚拟目录,指向宿主机文件系统中的某个目录。

Docker 数据卷的原理是通过将容器与主机上的目录或预定义的卷进行关联,使得数据能够持久化保存,并且可以被多个容器之间共享。这种机制为容器提供了灵活且可靠的数据存储方式。


  以下是一些常见的 Docker 数据卷操作命令:

① 创建数据卷
docker volume create volume_name

使用 docker volume create 命令可以创建一个新的数据卷。

每个数据卷都有一个唯一的名称,用于标识它。


② 列出所有数据卷
docker volume ls

列出所有数据卷的信息。


③ 查看数据卷详细信息
docker volume inspect volume_name

查看有关数据卷的详细信息,包括挂载点等。


④ 删除数据卷
docker volume rm volume_name

删除指定的数据卷。


⑤ 将数据卷挂载到容器

当运行容器时,可以使用 -v --volume 选项将一个或多个数据卷挂载到容器的指定路径。这样,容器就可以访问数据卷上的数据:

docker run -v volume_name:/container_path image_name

这将把数据卷 volume_name 挂载到容器的 /container_path

数据卷的挂载具有共享性和持久性:

  • 多个容器可以同时挂载同一个数据卷,实现数据在容器之间的共享。这样,它们可以读取和写入相同的数据卷,实现数据的一致性和共享。
  • 数据卷上的数据是持久化存储的,即使容器停止或删除,数据卷仍然存在,可以被其他容器重新挂载。这使得数据在容器的生命周期内得以保留。

⑥ 从容器中复制数据到数据卷
docker cp source_path container_id:/volume_name/destination_path

将容器中的数据复制到指定的数据卷。


⑦ 从数据卷中复制数据到容器
docker cp container_id:/volume_name/source_path destination_path

将数据卷中的数据复制到容器的指定路径。


⑧ 挂载匿名数据卷
docker run -v /host_path image_name

使用匿名数据卷将宿主机路径 /host_path 挂载到容器。 


⑨ 删除容器时保留数据卷
docker run -v volume_name:/container_path --rm image_name

在删除容器时保留数据卷。


四、Docker-Compose的使用

1、Docker-Compose介绍

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个简单的  docker-compose.yml 文件帮我们快速的部署分布式应用,定义应用的服务、网络和卷等配置,而无需手动一个个创建和运行容器。

以下是一个简单的 docker-compose.yml 文件:

version: '3'
services:web:image: nginx:latestports:- "8080:80"db:image: postgres:latestenvironment:POSTGRES_PASSWORD: example

通过运行 docker-compose up 命令,即可启动包含 Nginx 和 PostgreSQL 服务的 Docker 应用。


2、部署微服务集群

为了更好地理解 Docker 的应用,我们可以通过一个简单的实战案例来深入了解。假设我们要搭建一个简单的微服务集群,包括 Nacos 作为服务注册与发现中心、MySQL 数据库、以及用户服务、订单服务和网关服务。

① 准备工作

确保已经安装 Docker 和 Docker Compose。创建一个项目目录,例如 microservices,在该目录下放置你的 Docker Compose 配置文件。


② 编写Docker-Compose文件

创建docker-compose.yml 文件,内容如下:

version: "3.2"services:nacos:image: nacos/nacos-serverenvironment:MODE: standaloneports:- "8848:8848"mysq1:image: mysql:5.7.25environment:MYSQL_ROOT_PASSWORD: 123volumes:- "SPhD/mysql/data:/var/lib/mysql"- "SPhD/mysql/conf:/etc/mysql/conf.d/"userservice:build: ./user-serviceorderservice:build: ./order-servicegateway:build: ./gatewayports:- "10010:10818"

③ 构建和启动微服务集群

在项目目录中执行以下命令:

docker-compose up -d --build

通过运行 docker-compose up 命令,即可构建并启动所有定义的服务,并以后台方式运行。等待一段时间,直到所有服务完全启动。


④ 查看微服务状态

使用以下命令查看当前运行的服务:

docker-compose ps

通过这个案例,我们可以看到 Docker 的强大之处,它使得应用的构建、运行和部署变得非常简单且可重复。


五、Docker总结

Docker 的安装非常简单,就像安装一个应用程序一样,只需使用包管理器或者 Docker Desktop,在各种操作系统上都能轻松完成。掌握 Docker 的基础知识和常用命令,能够更好地利用和理解它的功能。Docker 之所以受欢迎,是因为它提供了一种轻量级、便携且高效的容器化解决方案。它让开发者可以灵活地部署应用程序,保证在不同环境中的一致性和高效性。通过实际操作案例,我们学会了如何使用 Docker 来创建一个简单的 Web 应用,展示了它的强大功能和易用性。随着容器技术的不断进步,Docker 必将继续在现代软件开发中扮演重要角色,为开发者提供更便捷、高效的工具和环境。

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

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

相关文章

C++:多重继承带来的问题及解决方法

在继承的过程中,如果一个派生类由多个基类派生,则称为多重继承(实际开发中会引入困难,不建议使用) 目录 多重继承的构造函数、析构函数调用顺序: 多重继承引发的二义性问题: 问题1&#xff…

【SVN】使用TortoiseGit删除Git分支

使用TortoiseGit删除Git分支 前言 平时我在进行开发的时候,比如需要开发一个新功能,这里以蘑菇博客开发服务网关-gateway功能为例 一般我都会在原来master分支的基础上,然后拉取一个新的分支【gateway】,然后在 gateway分支上进…

SQL Server添加用户登录

我们可以模拟一下让这个数据库可以给其它人使用 1、在计算机中添加一个新用户TeacherWang 2、在Sql Server中添加该计算机用户的登录权限 exec sp_grantlogin LAPTOP-61GDB2Q7\TeacherWang -- 之后这个计算机用户也可以登录数据库了 3、添加数据库的登录用户和密码&#xff0…

微信小程序-底层框架-开发文档学习笔记

查看更多学习笔记:GitHub:LoveEmiliaForever 微信小程序开发指南 微信小程序开发文档 双线程模型 小程序是基于双线程模型的,在这个模型中,小程序的逻辑层与渲染层分开在不同的线程运行 技术选型 在对小程序的架构设计时的要求…

YOLOv7代码解读[02] cfg/training/yolov7.yaml解读

ELAN结构 MP结构 SPPCSPC结构 ELAN-H结构 # parameters nc: 80 # number of classes depth_multiple: 1.0 # model depth multiple width_multiple: 1.0 # layer channel multiple# anchors anchors:- [12,16, 19,36, 40,28] # P3/8- [36,75, 76,55, 72,146] #…

UnityWebGL UGUI中文不显示问题

这是Unity编辑中效果 打包成webgl后的效果(中文没有显示出来) 解决方法 将Unity默认使用的Arial替换成中文字体。 1.找到电脑字体库(win电脑字体库路径:C:\Windows\Fonts ;Mac电脑搜索“字体册”)。 2.将…

大数据职业技术培训包含哪些

技能提升认证考试,旨在通过优化整合涵盖学历教育、职业资格、技术水平和高新技术培训等各种教育培训资源,通过大数据行业政府引导,推进教育培训的社会化,开辟教育培训新途径,围绕大数据技术人才创新能力建设&#xff0…

【GPTs分享】每日GPTs分享之Image Generator Tool

今日GPTs分享:Image Generator Tool。Image Generator Tool是一种基于人工智能的创意辅助工具,专门设计用于根据文字描述生成图像。这款工具结合了专业性与友好性,鼓励用户发挥创造力,同时提供高效且富有成效的交互体验。 主要功能…

Vue.js+SpringBoot开发校园失物招领管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 招领管理模块2.2 寻物管理模块2.3 系统公告模块2.4 感谢留言模块 三、界面展示3.1 登录注册3.2 招领模块3.3 寻物模块3.4 公告模块3.5 感谢留言模块3.6 系统基础模块 四、免责说明 一、摘要 1.1 项目介绍 校园失物招领…

【51单片机】红外遥控红外遥控电机调速(江科大)

1.红外遥控简介 红外遥控是利用红外光进行通信的设备,由红外LED将调制后的信号发出,由专用的红外接收头进行解调输出 通信方式:单工,异步 红外LED波长:940nm 通信协议标准:NEC标准 2.硬件电路 红外发送部分 IN高电平时,LED不亮,IN低电平时&…

STM32学习3 寄存器映射和GPIO寄存器编程

STM32学习3 寄存器映射和GPIO寄存器编程 一、STM32外设内存空间1. 内存空间划分2. 区域功能说明(1)block0(2)block1(3)block2(4)block3~4(5)block5&#xff0…

UE4 材质多张图片拼接成一张图片(此处用2×2拼接)

UE4 材质多张图片拼接成一张图片&#xff08;此处用22拼接&#xff09; //TexCoord,TextureA,TextureB,TextureC,TextureDfloat3 ReturnTexture TextureA; if(TexCoord.x < 0.5 && TexCoord.y < 0.5) {ReturnTexture TextureA; } else if(TexCoord.x > 0.5…

对Redis锁延期的一些讨论与思考

上一篇文章提到使用针对不同的业务场景如何合理使用Redis分布式锁&#xff0c;并引入了一个新的问题 若定义锁的过期时间是10s&#xff0c;此时A线程获取了锁然后执行业务代码&#xff0c;但是业务代码消耗时间花费了15s。这就会导致A线程还没有执行完业务代码&#xff0c;A线程…

vue中循环多个li(表格)并获取对应的ref

有种场景是这样的 <ul><li v-for"(item,index) in data" :key"index" ref"???">{{item}}</li> </ul> //key值在项目中别直接用index&#xff0c;最好用id或其它关键值const data [1,2,3,4,5,6]我想要获取每一个循环并…

华为云是什么

公有云配置 区域&#xff1a; 同一个区域中的云主机是可以互相连通的&#xff0c;不通区域云主机是不能使用内部网络互相通信的 选择离自己比较近的区域&#xff0c;可以减少网络延时卡顿 华为云yum仓库&#xff1a;https://repo.huaweicloud.com/rockylinux/ 首先完成跳板机的…

【linux进程信号(一)】信号的概念以及产生信号的方式

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 进程信号 1. 前言2. 信号的基…

亿道推出重磅加固平板!为行业发展注入新动力

随着科技生产力的不断发展&#xff0c;各行各业都得到质的飞跃。产品的迭代速度也大大加快&#xff0c;作为全球领先的加固行移动终端一站式提供商&#xff0c;亿道信息跟紧时代潮流&#xff0c;推出EM-I10J、EM-I20J两款均衡型加固平板&#xff0c;为行业发展注入新动力。 接地…

YOLOv8 DeepSORT实现智能交通监控-改进yolo单目测距及速度测量-流量计数

YOLOv8&#xff1a;目标检测算法详解 YOLO&#xff08;You Only Look Once&#xff09;系列是一种单阶段、实时的目标检测框架&#xff0c;其最新迭代版本YOLOv8继承并优化了前代YOLO在速度与精度上的优势。YOLOv8的核心思想在于将整幅图像一次性输入到神经网络中&#xff0c;直…

dpdk协议栈之udp架构优化

dpdk优势 传统网络架构与 DPDK&#xff08;Data Plane Development Kit&#xff09;网络架构之间存在许多区别&#xff0c;而 DPDK 的优势主要体现在以下几个方面&#xff1a; 数据包处理性能&#xff1a;传统网络架构中&#xff0c;网络数据包的处理通常由操作系统的网络协议…

【学习笔记】Serdes中的高速接口设计

参考文献&#xff1a; 一、绪论 1.1 背景 “串行替代并行”&#xff1a; 串行传输使用差分信号传输以传输更长距离&#xff1b; 并行传输因串扰无法长距离传输&#xff1b;并行线路对信号偏斜量的要求&#xff0c;限制了最大的传输速率。 SerDesSerializer Deserializer S…