微服务技术栈-Docker应用部署

文章目录

  • 前言
  • 一、数据卷
  • 二、Docker 应用部署
    • 1、MySQL部署
    • 2、Tomcat部署
    • 3、Nginx部署
    • 4、Redis部署
    • 5、Kafka部署
  • 总结


前言

之前文章讲到过,docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器,接下来我们将介绍如何使用docker去部署Java web开发的常见服务。


一、数据卷

在之前的文章中我们介绍了容器之间使用沙箱机制,相互隔离。现在我们继续来思考几个Docker容器在使用过程中会出现的问题。

  • Docker 容器删除后,在容器中产生的数据还在吗?
  • Docker 容器和外部继器可以交换文件吗?
  • 容器之间想要进行数据交互?

在解决上面几个问题之前,我们先来介绍一下Docker数据卷的概念。

Docker将运用与运行的环境打包形成容器运行, Docker容器产生的数据,需要通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来。如果没有docker commit,那么当容器删除后,数据自然也就没有了。为了避免反复生成新的镜像,且能将Docker容器的数据持久化的保存下来,我们引入了数据卷的概念。

数据卷:宿主机中的一个目录或文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步,一个数据卷可以被多个容器同时挂载,一个容器也可以被挂载多个数据卷。

配置数据卷的方法:创建启动容器时,使用-v参数 设置数据卷。

docker run ... -v 宿主机目录(文件):容器内目录(文件) ...

二、Docker 应用部署

学习完数据卷的概念之后,我们使用Docker来进行应用部署。

1、MySQL部署

回忆一下以前我们是怎么安装mysql的:
1.去mysql官网下载我们需要的mysql压缩包。
2.上传mysql并解压。
3.按照依赖关系依次安装rpm包
4.接着执行后面一系列的mysql初始化命令。

我们可以看出利用原始方法安装MySQL非常繁琐,且执行的命令太多很容易出错。

在Docker 容器中部署MySQL,并通过外部MySQL 客户端操作MySQL Server。要想在Docker容器中部署MySQL,我们只需要执行以下四步:

1.搜索mysql镜像
2.拉取mysql镜像
3.创建容器
4.操作容器中的mysql

在使用Docker部署MySQL的时候,还会存在一个问题:容器内的网络服务和外部机器不能直接通信。

解决方案:因为外部机器和宿主机可以直接通信且宿主机和容器可以直接通信,所以当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上。外部机器访问宿主机的端口,从而间接访问容器的服务,这种操作称为端口映射。

1.搜索mysql镜像

docker search mysql

2.拉取mysql镜像

docker pull mysql:8.0

在这里插入图片描述
3.创建容器,设置端口映射、目录映射。

# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
docker run -d \
-p 3306:3306 \
-e MYSQL_ROOT_HOST=% \
-e MYSQL_ROOT_PASSWORD=123456789 \
-v $PWD/conf:/etc/mysql/conf.d
-v $PWD/logs:/logs
-v $PWD/data:/var/lib/mysql
--name c_mysql \
mysql:8.0

参数说明

  • -p 3306:3306:将容器的3306端口映射到宿主机的3306端口。
  • -v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的conf/my.cnf挂载到容器/etc/mysql/my.cnf配置目录。
  • -v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs目录日志。
  • -v $PWD/data:/var/lib/mysql:将主机当前目录下的data目录挂载到容器的/var/lib/mysql数据目录。
  • -e MYSQL_ROOT_PASSWORD=123456:初始化root 用户密码。
    在这里插入图片描述
    4.进入MySQL的容器,可以看到MySQL的欢迎提示。
    在这里插入图片描述

2、Tomcat部署

部署tomcat的方式跟mysql大差不差,也是搜索镜像、拉取镜像、创建容器。
1.搜索Tomcat 镜像。

docker search tomcat

2.拉取tomcat镜像。

docker pull tomcat

3.创建容器,设置端口映射、目录映射。

创建容器,设置端口映射、目录映射
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat

参数说明:
- -p 8080:8080:将容器的8080端口映射到主机的8080端口
- -v $PWD:/usr/local/tomcat/webapps:将主机中当前目录挂载到容器的webapps

3、Nginx部署

1.搜索Nginx镜像

docker search nginx

2.拉取Nginx镜像

docker pull nginx

3.创建容器,设置端口映射、目录映射

#在/root目录下创建nginx目录用于存储nginx数据信息
mkdir -p ~/nginx/conf
mkdir -p ~/nginx/log
mkdir -p ~/nginx/html# 生成容器
docker run --name nginx -p 9001:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf ~/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d ~/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html ~/nginx/# 删除正在运行的nginx容器
docker rm -f nginx#Docker 创建Nginx容器
docker run \
-p 9002:80 \
--name c_nginx \
-v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v ~/nginx/conf/conf.d:/etc/nginx/conf.d \
-v ~/nginx/log:/var/log/nginx \
-v ~/nginx/html:/usr/share/nginx/html \
-d nginx:lates

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、Redis部署

1.搜索Redis镜像

docker search redis

2.拉取Redis镜像

docker pull redis:6.0.8

3.创建容器,设置端口映射、目录映射

docker run -id --name=c_redis -p 6379:6379 redis:6.0.8 --requirepass "100"

5、Kafka部署

1.拉取zookeeper镜像

docker pull wurstmeister/zookeeper

2.拉取kafka镜像

docker pull wurstmeister/kafka

3.运行zookeeper镜像

docker run -d --name zookeeper -p 2181:2181 wurstmeister/zookeeper

4.运行kafka镜像

docker run -d --name kafka -p 9092:9092 --link zookeeper -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_ADVERTISED_HOST_NAME=localhost -e KAFKA_ADVERTISED_PORT=9092  wurstmeister/kafka

5.进入kafka镜像

docker exec -it 镜像名 /bin/bash

6.测试kafka工作情况

#先进入 kafka的bin 目录。
cd /opt/kafka_2.12-2.5.0(这里看自己的目录版本号)/bin/
#自己创建topic
kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 1 --topic mytopic

7.修改kafka配置文件(要在宿主机里面改然后cp到容器中,因为在容器中改容器一启动就会失效)

#拷贝到宿主机
docker cp b8c5206770d1:/opt/kafka_2.13-2.8.1/config/server.properties  ~/server.properties
#修改的配置文件内容:
在kafka的应用下/config/server.properties下找到listeners=PLANTEXT://9092,去掉井号,并且将服务器ip或者域名加入到PLANTEXT:的后面,其中PLANTEXT是kafka默认使用的通信协议。在这个文件中,还有一个advertised.listeners的配置,这个主要用来配置公网ip
#从宿主机拷贝到容器中
docker cp ~/server.properties b8c5206770d1:/opt/kafka_2.13-2.8.1/config/server.properties
#重启容器
docker restart kafka

总结

在本章中我们介绍了数据卷这个概念,数据卷解决了docker容器在运行过程中的数据持久化问题。然后我们利用Docker来部署了与Java Web开发联系非常紧密的几个服务,可以看出使用了docker之后我们的部署变得十分方便且管理起来非常清晰,在后续的文章中将介绍更多有关docker部署服务的知识。


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

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

相关文章

数据结构与算法-(7)---栈的应用-(4)后缀表达式求值

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

vue 使用 创建二维数组响应数据 渲染 echarts图标

目前我遇到的情况就是用动态的二维数组数据渲染echarts图标,我们从后端收到的接口一般是个一维数组,需要手动构建并且保证响应式。接下来我做了个案例 一、案例总逻辑 1. 先创建一个vue项目 2. 添加 echarts依赖 3. 模拟数据请求,构建二维数组…

DevicData-D-XXXXXXXX勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

引言: 在数字时代,数据安全成为一项至关重要的挑战。DevicData-D-XXXXXXXX勒索病毒(以下简称DevicData病毒)是这场战斗中的新敌人,它能够以毁灭性的方式加密您的数据,迫使您在数据和时间之间做出艰难的选择…

59. 螺旋矩阵 II

题目描述 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 输入:n 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2: 输入:n …

基于SpringBoot的房屋租赁管理系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 屋主管理 房屋信息管理 房屋租赁公告 租用订单管理 房屋信息管理 保洁管理 房屋信息 租用订单管理 取消订单管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 互联网发展至今,无论是其理论还是…

java Spring Boot在配置文件中关闭热部署

之前更大家一起搭建了一个热部署的开发环境 但是 大家要清楚一个情况 我们线上程序运行突然内部发生变化这是不可能的。 所以 他就只会对我们开发环境有效 是否开启 我们可以通过 application配置文件来完成 我这里是yml格式的 参考代码如下 spring:devtools:restart:enabled…

OpenWrt使用Privoxy插件修改UA

OpenWrt使用privoxy修改UA 1.安装privoxy插件 SSH连接到路由器 更新插件列表 update opkg安装插件 opkg install privoxy luci-app-privoxy luci-i18n-privoxy-zh-cn重启路由器 2.配置privoxy 打开配置页面 文件和目录 访问和控制 转发 杂项 日志 编辑配置 浏览器打开 …

代码随想录算法训练营第五十八天 | 动态规划 part 16 | 583. 两个字符串的删除操作、72. 编辑距离

目录 583. 两个字符串的删除操作思路思路2代码 72. 编辑距离思路代码 583. 两个字符串的删除操作 Leetcode 思路 dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数。递推公…

云原生Kubernetes:简化K8S应用部署工具Helm

目录 一、理论 1.HELM 2.部署HELM2 3.部署HELM3 二、实验 1.部署 HELM2 2.部署HELM3 三、问题 1.api版本过期 2.helm初始化报错 3.pod状态为ImagePullBackOff 4.helm 命令显示 no repositories to show 的错误 5.Helm安装报错 6.git命令报错 7.CentOS 7 下git c…

volatile关键字使用总结

先说结论 1. volatile关键字可以让编译器层面减少优化,每次使用时必须从内存中取数据,而不是从cpu缓存或寄存器中获取 2. volatile关键字不能完全禁止指令重排,准确地说是两个volatile修饰的变量之间的命令不会进行指令重排 3. 使用volati…

常用Redis界面化软件

对于Redis的操作,前期有过介绍【Centos 下安装 Redis 及命令行操作】。而在Redis的日常开发调试中,可使用可视化软件方便进行操作。 本篇主要介绍Redis可视化的两款工具:Redis Desktop Manager和AnotherRedisDesktopManager。 1、Redis Desk…

C# 图解教程 第5版 —— 第1章 C# 和 .NET 框架

文章目录 1.1 在 .NET 之前1.2 .NET 时代1.2.1 .NET 框架的组成1.2.2 大大改进的编程环境 1.3 编译成 CIL1.4 编译成本机代码并执行1.5 CLR1.6 CLI1.7 各种缩写1.8 C# 的演化1.9 C# 和 Windows 的演化(*) 1.1 在 .NET 之前 MFC(Microsoft Fou…

[python 刷题] 4 Median of Two Sorted Arrays

[python 刷题] 4 Median of Two Sorted Arrays 题目: Given two sorted arrays nums1 and nums2 of size m and n respectively, return the median of the two sorted arrays. The overall run time complexity should be O ( l o g ( m n ) ) O(log (mn)) O(lo…

设计模式探索:从理论到实践的编码示例 (软件设计师笔记)

😀前言 设计模式,作为软件工程领域的核心概念之一,向我们展示了开发过程中面对的典型问题的经典解决方案。这些模式不仅帮助开发者创建更加结构化、模块化和可维护的代码,而且也促进了代码的复用性。通过这篇文章,我们…

Springboot+vue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的开放性实验室管理系统,采用M&#xff08…

最新AI智能创作系统源码SparkAi系统V2.6.3/AI绘画系统/支持GPT联网提问/支持Prompt应用/支持国内AI模型

一、智能AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统,已支持OpenAIGPT全模型国内AI全模型,已支持国内AI模型 百度文心一言、微软Azure、阿里云通义千问模型、清华智谱AIChatGLM、科大讯飞星火大模型等。本期针对源码…

【立体视觉(五)】之立体匹配与SGM算法

【立体视觉(五)】之立体匹配与SGM算法 一、立体匹配一)基本步骤二)局部立体匹配三)全局立体匹配四)评价标准1. 均方误差(RMS)2. 错误匹配率百分比(PBM) 二、半全局(SGM)立体匹配一)代价计算二&a…

各平台更新根证书

windows7 windows7根证书更新 https://support.microsoft.com/en-us/topic/support-for-urgent-trusted-root-updates-for-windows-root-certificate-program-in-windows-a4ac4d6c-7c62-3b6e-dfd2-377982bf3ea5 Linux 查看证书 ls -l /etc/ssl/certs/更新根证书 update-ca…

项目规划得心应手:Plane 助你打造高效能团队 | 开源日报 No.48

streamlit/streamlit Stars: 27.5k License: Apache-2.0 Streamlit 是一个快速构建和共享数据应用程序的方法。它可以将数据脚本转换为可分享的 Web 应用,只需几分钟即可完成。该项目完全由 Python 编写,开源且免费!一旦创建了一个应用程序&…

Ubuntu 2204 搭建 nextcloud 个人网盘

Nextcloud是一套用于创建网络硬盘/云盘以存放文件的客户端-服务器软件,Nextcloud 完全开源并且免费。 一、搭建 ubuntu apache2 mysql php (lamp)环境 因为 nextcloud 服务是使用 php 语言和 mysql 数据库的web服务,因此需要…