Docker的运用
文章目录
- 一、 Docker介绍
- 二、Docker常用命令
- 三、Docker 部署微服务项目
- 四、Docker 使用场景
- 五、Docker模拟场景
- 5.1 模拟部署Nacos
- 5.2 模拟部署Mongodb
- 5.3 模拟部署RabbitMQ
一、 Docker介绍
Docker是一种开源软件平台,用于在不同的操作系统(如Windows、Linux等)之间隔离应用程序,以便更有效和可靠地管理这些应用程序的部署和运行。 Docker平台由三个基本概念组成:
-
镜像(Image):镜像是 Docker 包含应用所需的一切的文件系统和配置的静态表示。镜像是一个只读的模板,可以用来创建 Docker 容器。
-
容器(Container):容器是镜像的运行时实例。容器包含了一个应用程序及其依赖项,并且可以在任何 Docker 主机上运行。
-
仓库(Repository):仓库是存放镜像的地方,类似于代码仓库。Docker Hub是一个公共的仓库,用户可以从中获取各种镜像。
Docker平台的优势包括:
-
快速部署:Docker平台可以快速创建和部署应用程序,无需很长时间的安装和配置过程。
-
可靠性:Docker的容器隔离使应用程序更加可靠,因为它可以避免依赖项冲突和环境变化。
-
可移植性:由于 Docker 平台在各种操作系统上都能运行,因此应用程序可以更轻松地在不同的环境中迁移。
在应用程序开发中,Docker 可以在以下方面提供帮助:
-
开发环境一致性:开发人员可以使用 Docker 镜像构建开发环境,以确保团队成员之间具有一致的开发环境。
-
持续集成和部署:Docker 使得在 CI/CD 环境中更容易进行自动化部署和升级操作,帮助开发人员更加频繁地发布和测试新版本。
-
开发和生产环境一致性:使用 Docker 平台可以确保在开发和生产环境中使用完全相同的应用程序和配置,从而减少可能会导致生产环境故障的变量。
二、Docker常用命令
- docker run:运行一个容器
- docker ps:列出所有正在运行的容器
- docker images:列出所有镜像
- docker stop:停止一个或多个容器
- docker rm:删除一个或多个容器
- docker rmi:删除一个或多个镜像
- docker build:构建一个新的镜像
- docker exec:在正在运行的容器中执行命令
- docker inspect:查看容器或镜像的详细信息
- docker logs:查看容器的日志信息
- docker pull:下载一个镜像
- docker push:将本地的镜像推送到远程仓库
- docker-compose:使用docker-compose命令编排容器
- docker network:管理Docker网络
- docker volume:管理Docker卷
三、Docker 部署微服务项目
Docker 部署微服务项目需要以下步骤:
- 准备 Docker 镜像
首先需要将微服务应用程序打包成 Docker 镜像。可以使用 Dockerfile 文件定义 Docker 镜像的构建过程,然后使用命令 docker build
构建镜像。
- 部署 Docker 镜像
在 Docker 主机上部署 Docker 镜像,可以使用 Docker compose 工具来定义和管理多个 Docker 容器的生命周期。在 Docker Compose 文件中,定义每个组件(或微服务)所需的镜像、环境变量、网络配置等。
- 配置 Docker 网络
微服务应用程序在 Docker 中运行时,需要使用 Docker 网络来实现相互通信。可以创建自定义 Docker 网络来提供服务发现和负载均衡等功能。
- 监控和管理
使用 Docker 容器和镜像管理工具,如 Docker Swarm,Kubernetes 等来监控、管理、升级和扩展微服务应用程序。
总体来说,Docker 可以帮助简化微服务应用程序的部署、升级和扩展过程,提高应用程序的可靠性和可维护性。
四、Docker 使用场景
-
快速开发环境搭建:Docker 可以快速构建适合于不同语言、不同框架的开发环境,避免本地环境的差异性。
-
应用的打包和发布:将应用程序和其依赖项打包到一个 Docker 镜像中,然后在各种环境中进行部署,包括本地环境、云环境或者其他服务器。
-
微服务架构:Docker 可以在其容器中高效地运行各种服务,包括数据库、缓存、消息队列等,让整个架构变得更加模块化和可维护。
-
持续集成和持续部署:Docker 可以与 CI/CD 工具一起使用,提高应用程序的交付速度和质量。
-
多租户环境:Docker 可以在一个主机上运行多个容器,每个容器隔离运行,可以实现多租户的环境。
五、Docker模拟场景
5.1 模拟部署Nacos
Nacos是一个开源的,易于构建,易于使用的动态服务发现,配置管理和服务管理平台。Nacos使用了一系列的技术来实现它的功能,其中包括Spring Cloud Config,Eureka,Dubbo等。
在Docker中,我们可以使用Nacos来模拟部署,下面是具体的步骤:
- 安装Docker和Docker Compose
在使用Docker模拟部署Nacos之前,我们需要先安装Docker和Docker Compose。
- 下载Nacos的Docker镜像
使用以下命令从Docker Hub下载Nacos的Docker镜像:
docker pull nacos/nacos-server
- 创建Docker Compose文件
创建一个docker-compose.yaml文件,将以下内容复制到文件中。
version: '3.1'
services:nacos:image: nacos/nacos-servercontainer_name: nacosports:- "8848:8848"environment:- PREFER_HOST_MODE=hostnamevolumes:- "./data:/home/nacos/data"- "./logs:/home/nacos/logs"- "./init.d:/home/nacos/init.d"
其中,我们将Nacos映射到端口号为8848,并将数据和日志保存在本地的data和logs目录中。
- 启动Nacos
使用以下命令启动Nacos:
docker-compose up -d
- 访问Nacos
访问http://localhost:8848/nacos/,即可进入Nacos的控制台。
至此,我们已经成功地使用Docker模拟部署了Nacos。可以在控制台中进行服务的注册和发现等操作。
5.2 模拟部署Mongodb
要使用 Docker 模拟部署 Mongodb,可以按照以下步骤操作:
-
安装 Docker:在您的计算机上安装 Docker。
-
下载 Mongodb 镜像:使用以下命令从 Docker Hub 下载最新的 Mongodb 镜像。
docker pull mongo
- 运行 Mongodb 容器:使用以下命令运行 Mongodb 容器。
docker run -d -p 27017:27017 --name mymongodb mongo
注:-d 选项用于在后台运行容器,-p 选项将容器端口映射到主机端口,–name 选项为容器命名。
- 测试 Mongodb 容器:使用以下命令测试 Mongodb 容器是否正在运行。
docker ps
如果一切正常,您应该能够看到正在运行的容器。
- 连接 Mongodb 容器:使用以下命令连接到 Mongodb 容器。
docker exec -it mymongodb bash
- 运行 Mongodb shell:使用以下命令运行 Mongodb shell。
mongo
现在您可以在 Mongodb shell 中使用所有 Mongodb 命令来管理数据库。
- 退出 Mongodb shell:使用以下命令退出 Mongodb shell。
exit
- 停止 Mongodb 容器:使用以下命令停止 Mongodb 容器。
docker stop mymongodb
现在,您已经成功地使用 Docker 模拟部署了 Mongodb。
5.3 模拟部署RabbitMQ
在Docker中模拟部署RabbitMQ可以分为以下步骤:
- 下载RabbitMQ镜像
docker pull rabbitmq:management
- 运行RabbitMQ容器
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
-
访问RabbitMQ的web管理页面
在浏览器中输入http://localhost:15672
访问RabbitMQ的web管理页面,默认用户名和密码为guest/guest
。 -
配置RabbitMQ
我们可以在web管理页面中配置RabbitMQ,例如创建队列、交换机、绑定等等。 -
连接RabbitMQ
我们可以使用客户端代码连接RabbitMQ,例如使用Python的pika库连接RabbitMQ并发送和接收消息。
参考代码如下:
import pika# 连接RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()# 创建队列
channel.queue_declare(queue='hello')# 发送消息
channel.basic_publish(exchange='',routing_key='hello',body='Hello World!')
print(" [x] Sent 'Hello World!'")# 定义回调函数
def callback(ch, method, properties, body):print(" [x] Received %r" % body)# 接收消息
channel.basic_consume(queue='hello',on_message_callback=callback,auto_ack=True)print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
以上就是在Docker中模拟部署RabbitMQ的步骤。
盈若安好,便是晴天
相关文章:
Docker的运用
文章目录 一、 Docker介绍二、Docker常用命令三、Docker 部署微服务项目四、Docker 使用场景五、Docker模拟场景5.1 模拟部署Nacos5.2 模拟部署Mongodb5.3 模拟部署RabbitMQ 一、 Docker介绍 Docker是一种开源软件平台,用于在不同的操作系统(如Windows、…...

在项目中快速搭建机器学习的流程
在软件开发领域,机器学习框架发挥着关键作用,为开发人员提供强大的人工智能工具、库和算法,以有效地利用机器学习的潜力。从本质上讲,机器学习使计算机能够从数据中学习并做出预测或决策,而无需明确编程。 机器学习框…...

计网-All
路由器的功能与路由表的查看_路由器路由表_傻傻小猪哈哈的博客-CSDN博客路由基础-直连路由、静态路由与动态路由的概念_MikeVane-bb的博客-CSDN博客路由器的功能与路由表的查看_路由器路由表_傻傻小猪哈哈的博客-CSDN博客 直连路由就是路由器直接连了一个网段,他就…...

Rabbitmq的Federation Exchange
(broker 北京 ) , (broker 深圳 ) 彼此之间相距甚远,网络延迟是一个不得不面对的问题。有一个在北京的业务(Client 北京 ) 需要连接 (broker 北京 ) ,向其中的交换器 exchangeA 发送消息,此时的网络延迟很小,(C…...

AIGC - 生成模型
AIGC - 生成模型 0. 前言1. 生成模型2. 生成模型与判别模型的区别2.1 模型对比2.2 条件生成模型2.3 生成模型的发展2.4 生成模型与人工智能 3. 生成模型示例3.1 简单示例3.2 生成模型框架 4. 表示学习5. 生成模型与概率论6. 生成模型分类小结 0. 前言 生成式人工智能 (Generat…...
如何优雅地创建一个自定义的Spring Boot Starter
优雅永不过时,希望看完本文,你会觉得starter如此优雅! Spring Boot Starter是一种简化Spring Boot应用开发的机制,它可以通过引入一些预定义的依赖和配置,让我们快速地集成某些功能模块,而无需繁琐地编写代…...

Hbase--技术文档--单机docker基础安装(非高可用)
环境准备-docker 配置Linux服务器华为云耀云服务器之docker安装,以及环境变量安装 java (虚拟机一样适用)_docker配置java环境变量_一单成的博客-CSDN博客 说明: 本文章安装方式为学习使用的单体hbase项目。主要是学习ÿ…...

React 生命周期新旧对比
前言 React16.4版本之后使用了新的生命周期,它使用了一些新的生命周期钩子(getDerivedStateFromProps、getSnapshotBeforeUpdate),并且即将废弃老版的3个生命周期钩子(componentWillMount、componentWillReceiveProps…...

云计算存储类型
一、共享存储模式 NAS: ①一种专门用于存储和共享文件的设备,它通过网络连接到计算机或其他设备, 提供了一个中心化的存储解决方案 ②存储网络使用IP网络 ,数据存储共享基于文件 ③本质上为:NFS和CIFS文件共享服务器 ④提供的不是一个磁盘块…...

javacv基础03-调用本机摄像头并截图保存到本地磁盘
基于基础02 的基础上对视频进行取帧保存 代码如下: package com.example.javacvstudy;/*** 本地摄像头截图*/import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.OpenCVFrameConverter; import org.b…...

Python读取Windows注册表的实战代码
大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

macOS 安装 Homebrew 详细过程
文章目录 macOS 安装 Homebrew 详细过程Homebrew 简介Homebrew 安装过程设置环境变量安装 Homebrew安装完成后续设置(重要)设置环境变量homebrew 镜像源设置macOS 安装 Homebrew 详细过程 本文讲解了如何使用中科大源安装 Homebrew 的安装过程,文章里面的所有步骤都是必要的,需…...

数据结构之树型结构
相关概念树的表示二叉树二叉树性质二叉树储存 实现一颗二叉树创建遍历(前中后序)获取树中节点个数获取叶子节点个数获取第k层节点个数获取二叉树高度检测值为value元素是否存在层序遍历(需要队列来实现)判断是否为完全二叉树&…...

指针进阶详解
个人主页:点我进入主页 专栏分类:C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 欢迎大家点赞,评论,收藏。 一起努力,一起奔赴大厂。 目录 1.字符指针 2.指针数组 3.数组指针 4.数组传…...

QGIS 如何添加天地图
相信很多小伙伴在 QGIS 里面添加天地图的时候一定感觉很困惑,按照官网的操作申请 Key 之后,添加相对应的服务地址之后看不到地图或者地图不正常显示,今天我们就来解决这个问题 以下所有操作基于 QGIS 3.22 版本 申请 Key 1. 添加天地图的第一步需要申请 Key,首先要注册天…...

PHP8内置函数中的数学函数-PHP8知识详解
php8中提供了大量的内置函数,以便程序员直接使用常见的内置函数包括数学函数、变量函数、字符串函数、时间和日期函数等。今天介绍内置函数中的数学函数。 本文讲到了数学函数中的随机数函数rand()、舍去法取整函数floor()、向上取整函数 ceil()、对浮点数进行四舍…...

云计算企业私有云平台建设方案PPT
导读:原文《云计算企业私有云平台建设方案PPT》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 喜欢文章,您可以点赞评论转发本文,…...

ORA-01174: DB_FILES be compatible RAC rolling fashion complete outage
How to change the DB_FILES parameter in RAC (Doc ID 1636681.1)编辑To Bottom In this Document Goal Solution APPLIES TO: Oracle Database - Enterprise Edition - Version 10.1.0.2 and later Oracle Database Cloud Schema Service - Version N/A and later Oracle…...

线性代数(五) 线性空间
前言 《线性代数(三) 线性方程组&向量空间》我通过解线性方程组的方式去理解线性空间。此章从另一个角度去理解 空间是什么 大家较熟悉的:平面直角坐标系是最常见的二维空间 空间由无穷多个坐标点组成 每个坐标点就是一个向量 反过来,也可说&…...

kafka--技术文档--spring-boot集成基础简单使用
阿丹: 查阅了很多资料了解到,使用了spring-boot中整合的kafka的使用是被封装好的。也就是说这些使用其实和在linux中的使用kafka代码的使用其实没有太大关系。但是逻辑是一样的。这点要注意! 使用spring-boot整合kafka 1、导入依赖 核心配…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...