SpringCloud-Docker安装与详解

news2024/11/14 23:32:02

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.repo

sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

yum 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:latest
    ports:
      - "8080:80"
  db:
    image: postgres:latest
    environment:
      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-server
    environment:
      MODE: standalone
    ports:
      - "8848:8848"

  mysq1:
    image: mysql:5.7.25
    environment:
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "SPhD/mysql/data:/var/lib/mysql"
      - "SPhD/mysql/conf:/etc/mysql/conf.d/"

  userservice:
    build: ./user-service

  orderservice:
    build: ./order-service

  gateway:
    build: ./gateway
    ports:
      - "10010:10818"

③ 构建和启动微服务集群

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

docker-compose up -d --build

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


④ 查看微服务状态

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

docker-compose ps

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


五、Docker总结

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

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

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

相关文章

基于springboot+vue的工厂车间管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

Spring Boot与Netty打造TCP服务端(解决粘包问题)

欢迎来到我的博客,代码的世界里,每一行都是一个故事 Spring Boot与Netty打造TCP服务端 前言功能目标项目实现maven坐标构建自定义HandlerChannelInitializer实现server实现 前言 在物联网时代,设备之间的通信变得愈发重要。本文将带你踏上一…

微信小程序云开发教程——墨刀原型工具入门(添加批注+其他操作)

引言 作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计? “时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

程序员的金三银四求职宝典:如何在关键时期脱颖而出

程序员的金三银四求职宝典:如何在关键时期脱颖而出 程序员的金三银四求职宝典:如何在关键时期脱颖而出摘要 面试技巧分享 😊1. 自我介绍 Tips简洁明了 ✨重点突出 🔍结合实例 🌐 2. 技术问题回答 Tips冷静应对 &#x…

重学SpringBoot3-自动配置机制

重学SpringBoot3-自动配置机制 引言Spring Boot 自动配置原理示例:Spring Boot Web 自动配置深入理解总结相关阅读 引言 Spring Boot 的自动配置是其最强大的特性之一,它允许开发者通过最少的配置实现应用程序的快速开发和部署。这一切都得益于 Spring …

扑克牌翻牌记忆小游戏源码

源码由HTMLCSSJS组成,双击html文件可以本地运行效果,也可以上传到服务器里面 效果预览 下载地址 https://www.qqmu.com/2296.html

LeetCode每日一题之 移动0

前言: 我的每日一题专栏正式开始更新,我会分享关于我在LeetCode上刷题时的经验,将经典题型拿出来详细讲解,来提升自己及大家的算法能力,希望这篇博客对大家有帮助。 题目介绍: 题目链接:. - …

HTML5+CSS3+移动web——列表、表格、表单

系列文章 HTML5CSS3移动web——HTML 基础-CSDN博客https://blog.csdn.net/ymxk2876721452/article/details/136070953?spm1001.2014.3001.5501 目录 一、列表 无序列表 有序列表 定义列表 二、表格 表格结构标签 基本使用 合并单元格 三、表单 input 标签 input 标签占位文…

模版进阶C++

非类型模版 之前我们写的模版都是在不知道模版(类)中有的变量的类型是什么的时候,我们先用模版参数定义,当类实例化的时候在传参确认 非类型模版:模版参数定义的时候也可以定义整型类型(c20之后才支持其…

Topaz DeNoise AI:一键让照片重获清晰 mac/win版

Topaz DeNoise AI是一款革命性的图片降噪软件,它利用先进的人工智能算法,帮助用户轻松去除照片中的噪点,恢复图像的清晰度和细节。无论是专业摄影师还是摄影爱好者,Topaz DeNoise AI都能成为他们处理图片时的得力助手。 Topaz De…

【Matlab】Matlab电话拨号音合成与识别(代码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

springboot240基于Spring boot的名城小区物业管理系统

基于Spring boot的名城小区物业管理系统的设计与实现 摘要 当下,正处于信息化的时代,许多行业顺应时代的变化,结合使用计算机技术向数字化、信息化建设迈进。以前相关行业对于物业信息的管理和控制,采用人工登记的方式保存相关数…

第三百八十回

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 013pickers2.gif 我们在上一章回中介绍了"如何实现Numberpicker"相关的内容,本章回中将介绍wheelChoose组件.闲话休提,让我们一起Talk Flutter吧。 1. 概念…

文件操作命令touch、cat、more、cp、mv

touch 创建文件 1)可以通过touch命令创建文件。 2)语法: touch Linux路径 3)touch命令无选项,参数必填,表示要创建的文件路径,相对、绝对、特殊路径符均可以使用。 注:以 d 开头的…

Apache POI的简单介绍与应用

介绍 Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目。我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作。PS: 一般情况下,POI 都是用于操作 Excel 文件,如图: Apache POI 的应用场景&…

韦东山嵌入式Liunx入门驱动开发五

文章目录 一、驱动程序基石1-1 休眠与唤醒1-2 POLL机制1-3 异步通知(1) 异步通知程序解析(2) 异步通知机制内核代码详解 1-4 阻塞与非阻塞1-5 定时器(1) 内核函数(2) 定时器时间单位 1-6 中断下半部 tasklet 本人学习完韦老师的视频,因此来复习巩固,写以…

【web | CTF】BUUCTF [HCTF 2018]WarmUp

天命&#xff1a;这题本地php代码是无法复现的 首先打开网站&#xff0c;啥也没有&#xff0c;查看源码 发现文件&#xff0c;打开访问一下看看&#xff0c;发现是代码审计 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whit…

IOS 发布遇到“Unable to authenticate with App Store Connect”错误咋解决?

问题&#xff1a; 在开发ios app后&#xff0c;先发布adhoc版本&#xff0c;测试通过后&#xff0c;再发布testflight版本测试&#xff0c;但是可能会遇到一下问题。 解决办法&#xff1a; 在Signing &Capabilities中&#xff0c;在ios下边要指定有发布权限的Team账号&a…

文件底层的理解之缓冲区

目录 一、缓冲区的初步认识 二、向文件中写数据的具体过程 三、缓冲区刷新的时机 一、缓冲区的初步认识 缓冲区其实就是一块内存区域&#xff0c;采用空间来换时间&#xff0c;可以提高使用者的效率。我们一直说的缓冲区其实是语言层面上的缓冲区&#xff0c;其实操作系统内部…

黑马点评-商户查询业务

缓存原理 本文的业务就是redis的经典应用&#xff0c;标准的操作方式就是查询数据库之前先查询缓存&#xff0c;如果缓存数据存在&#xff0c;则直接从缓存中返回&#xff0c;如果缓存数据不存在&#xff0c;再查询数据库&#xff0c;然后将数据存入redis。 缓存更新策略 根据…