当前位置: 首页 > news >正文

Docker的运用

文章目录

    • 一、 Docker介绍
    • 二、Docker常用命令
    • 三、Docker 部署微服务项目
    • 四、Docker 使用场景
    • 五、Docker模拟场景
      • 5.1 模拟部署Nacos
      • 5.2 模拟部署Mongodb
      • 5.3 模拟部署RabbitMQ

一、 Docker介绍

Docker是一种开源软件平台,用于在不同的操作系统(如Windows、Linux等)之间隔离应用程序,以便更有效和可靠地管理这些应用程序的部署和运行。 Docker平台由三个基本概念组成:

  1. 镜像(Image):镜像是 Docker 包含应用所需的一切的文件系统和配置的静态表示。镜像是一个只读的模板,可以用来创建 Docker 容器。

  2. 容器(Container):容器是镜像的运行时实例。容器包含了一个应用程序及其依赖项,并且可以在任何 Docker 主机上运行。

  3. 仓库(Repository):仓库是存放镜像的地方,类似于代码仓库。Docker Hub是一个公共的仓库,用户可以从中获取各种镜像。

Docker平台的优势包括:

  1. 快速部署:Docker平台可以快速创建和部署应用程序,无需很长时间的安装和配置过程。

  2. 可靠性:Docker的容器隔离使应用程序更加可靠,因为它可以避免依赖项冲突和环境变化。

  3. 可移植性:由于 Docker 平台在各种操作系统上都能运行,因此应用程序可以更轻松地在不同的环境中迁移。

在应用程序开发中,Docker 可以在以下方面提供帮助:

  1. 开发环境一致性:开发人员可以使用 Docker 镜像构建开发环境,以确保团队成员之间具有一致的开发环境。

  2. 持续集成和部署:Docker 使得在 CI/CD 环境中更容易进行自动化部署和升级操作,帮助开发人员更加频繁地发布和测试新版本。

  3. 开发和生产环境一致性:使用 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 部署微服务项目需要以下步骤:

  1. 准备 Docker 镜像

首先需要将微服务应用程序打包成 Docker 镜像。可以使用 Dockerfile 文件定义 Docker 镜像的构建过程,然后使用命令 docker build 构建镜像。

  1. 部署 Docker 镜像

在 Docker 主机上部署 Docker 镜像,可以使用 Docker compose 工具来定义和管理多个 Docker 容器的生命周期。在 Docker Compose 文件中,定义每个组件(或微服务)所需的镜像、环境变量、网络配置等。

  1. 配置 Docker 网络

微服务应用程序在 Docker 中运行时,需要使用 Docker 网络来实现相互通信。可以创建自定义 Docker 网络来提供服务发现和负载均衡等功能。

  1. 监控和管理

使用 Docker 容器和镜像管理工具,如 Docker Swarm,Kubernetes 等来监控、管理、升级和扩展微服务应用程序。

总体来说,Docker 可以帮助简化微服务应用程序的部署、升级和扩展过程,提高应用程序的可靠性和可维护性。

四、Docker 使用场景

  1. 快速开发环境搭建:Docker 可以快速构建适合于不同语言、不同框架的开发环境,避免本地环境的差异性。

  2. 应用的打包和发布:将应用程序和其依赖项打包到一个 Docker 镜像中,然后在各种环境中进行部署,包括本地环境、云环境或者其他服务器。

  3. 微服务架构:Docker 可以在其容器中高效地运行各种服务,包括数据库、缓存、消息队列等,让整个架构变得更加模块化和可维护。

  4. 持续集成和持续部署:Docker 可以与 CI/CD 工具一起使用,提高应用程序的交付速度和质量。

  5. 多租户环境:Docker 可以在一个主机上运行多个容器,每个容器隔离运行,可以实现多租户的环境。

五、Docker模拟场景

5.1 模拟部署Nacos

Nacos是一个开源的,易于构建,易于使用的动态服务发现,配置管理和服务管理平台。Nacos使用了一系列的技术来实现它的功能,其中包括Spring Cloud Config,Eureka,Dubbo等。

在Docker中,我们可以使用Nacos来模拟部署,下面是具体的步骤:

  1. 安装Docker和Docker Compose

在使用Docker模拟部署Nacos之前,我们需要先安装Docker和Docker Compose。

  1. 下载Nacos的Docker镜像

使用以下命令从Docker Hub下载Nacos的Docker镜像:

docker pull nacos/nacos-server
  1. 创建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目录中。

  1. 启动Nacos

使用以下命令启动Nacos:

docker-compose up -d
  1. 访问Nacos

访问http://localhost:8848/nacos/,即可进入Nacos的控制台。

至此,我们已经成功地使用Docker模拟部署了Nacos。可以在控制台中进行服务的注册和发现等操作。

5.2 模拟部署Mongodb

要使用 Docker 模拟部署 Mongodb,可以按照以下步骤操作:

  1. 安装 Docker:在您的计算机上安装 Docker。

  2. 下载 Mongodb 镜像:使用以下命令从 Docker Hub 下载最新的 Mongodb 镜像。

docker pull mongo
  1. 运行 Mongodb 容器:使用以下命令运行 Mongodb 容器。
docker run -d -p 27017:27017 --name mymongodb mongo

注:-d 选项用于在后台运行容器,-p 选项将容器端口映射到主机端口,–name 选项为容器命名。

  1. 测试 Mongodb 容器:使用以下命令测试 Mongodb 容器是否正在运行。
docker ps

如果一切正常,您应该能够看到正在运行的容器。

  1. 连接 Mongodb 容器:使用以下命令连接到 Mongodb 容器。
docker exec -it mymongodb bash
  1. 运行 Mongodb shell:使用以下命令运行 Mongodb shell。
mongo

现在您可以在 Mongodb shell 中使用所有 Mongodb 命令来管理数据库。

  1. 退出 Mongodb shell:使用以下命令退出 Mongodb shell。
exit
  1. 停止 Mongodb 容器:使用以下命令停止 Mongodb 容器。
docker stop mymongodb

现在,您已经成功地使用 Docker 模拟部署了 Mongodb。

5.3 模拟部署RabbitMQ

在Docker中模拟部署RabbitMQ可以分为以下步骤:

  1. 下载RabbitMQ镜像
docker pull rabbitmq:management
  1. 运行RabbitMQ容器
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
  1. 访问RabbitMQ的web管理页面
    在浏览器中输入 http://localhost:15672 访问RabbitMQ的web管理页面,默认用户名和密码为 guest/guest

  2. 配置RabbitMQ
    我们可以在web管理页面中配置RabbitMQ,例如创建队列、交换机、绑定等等。

  3. 连接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项目。主要是学习&#xff…...

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、导入依赖 核心配…...

【核磁共振成像】部分傅里叶重建

目录 一、部分傅里叶重建二、部分傅里叶重建算法2.1 填零2.2 零差处理 一、部分傅里叶重建 在部分傅里叶采集中,数据并不是绕K空间中心对称收集的,而是K空间的一半是完全填充的,另一半只收集了一小部分数据。   部分傅里叶采集所依据的原理…...

React中的flushSync与Vue中的nextTick的比较

React中的flushSync与Vue中的nextTick是两种用于处理异步更新的机制。它们在React和Vue这两个流行的前端框架中起着重要的作用。 首先,让我们来看看flushSync。在React中,当需要更新UI时,React会将更新操作放入一个队列中,然后异…...

golang设置国内镜像源

以windows为例, 在cmd 窗口中执行下列语句 go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.io,direct 或者 1.运行 go env -w GO111MODULEon //开启mod 运行 go env -w GOPROXYhttps://goproxy.cn,direct //设置代理 执…...

linux切换到root没有conda环境

这个错是因为 没有将anaconda添加到环境变量 export PATH"/home/tao/anaconda3/bin:$PATH"然后 source ~/.bashrc或者写入 nano ~/.bashrc在文件的末尾添加以下行 export PATH"/home/tao/anaconda3/bin:$PATH"再 source ~/.bashrc就可以了...

数据库——redis介绍

文章目录 redis是什么?分布式缓存常见的技术选型方案有哪些?说一下 Redis 和 Memcached 的区别和共同点? redis是什么? 简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在…...

从C语言到C++_34(C++11_下)可变参数+ lambda+function+bind+笔试题

目录 1. 可变参数模板 1.1 展开参数包 1.1.1 递归函数方式展开 1.1.2 逗号表达式展开 1.2 emplace相关接口 2. lambda表达式(匿名函数) 2.1 C11之前函数的缺陷 2.2 lambda表达式语法 2.3 函数对象与lambda表达式 3. 包装器 3.1 function包装器…...

喜报|星瑞格荣获“2022-2023年度国产数据库应用优秀解决方案”奖项

近日,赛迪网为表彰数字赛道上的先行者,联合《数字经济》杂志社和北京科创互联,共同组织以“树立行业标杆,引领服务创新”为中心的“2022-2023年度产业数字服务案例及创新成果征集活动”。该活动旨在鼓励各行业数字化应用技术创新树…...

【Spring Cloud系列】- 分布式系统中实现幂等性的几种方式

【Spring Cloud系列】- 分布式系统中实现幂等性的几种方式 文章目录 【Spring Cloud系列】- 分布式系统中实现幂等性的几种方式一、概述二、什么是幂等性三、幂等性需关注几个重点四、幂等性有什么用五、常见用来保证幂等的手段5.1 MVCC方案5.2 去重表5.3 去重表5.4 select in…...

2023.8.26-2023.9.3 周报【3D+GAN+Diffusion基础知识+训练测试】

目录 学习目标 学习内容 学习时间 学习产出 学习目标 1. 3D方向的基础知识 2. 图像生成的基础知识(GAN \ Diffusion) 3. 训练测试GAN和Diffusion 学习内容 1. 斯坦福cv课程-3D (网课含PPT) 2. sjtu生成模型课件 3. ge…...

如何使用CSS创建渐变阴影?

随着网络的不断发展,制作漂亮的 UI 是提高客户在网站上的参与度的最重要的工作之一。改善前端外观的方法之一是在 CSS 中应用渐变阴影。应用渐变阴影的两种最重要的方法是线性渐变和径向渐变。 渐变阴影可用于吸引用户对特定信息的注意力,应用悬停或焦点…...