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

news2025/7/17 17:47:34

文章目录

  • 前言
  • 一、数据卷
  • 二、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.coloradmin.cn/o/1063608.html

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

相关文章

虫情测报灯——一种农业虫情防治工具

KH-CQPest虫情测报灯是一种农业虫情防治工具,它可以通过光源或药物诱虫的方式,吸引害虫撞击撞击屏,通过远红外自动处理技术,无公害杀死害虫的同时保存害虫标本,利用高像素的摄像头拍照、农业四情测报平台识别害虫&…

简单两步实现离线部署ChatGPT,ChatGPT平替版,无需GPU离线搭建ChatGPT

文末附主程序安装包和大模型参数文件~ 演示效果如下图所示: 一、使用方法 软件主要分为两个部分:GPT4ALL软件主体(主程序)模型参数(离线模型),如果使用API Key的话则不需要下载模型参数。 可以…

家居家纺经营配送小程序商城的作用是什么

家居家纺产品是每个家庭都必备的,无论商场还是小摊贩,市场中经营商家数量都比较多,而随着互联网电商发展,在实际经营中,传统线下商家也面临多个难题: 首先就是获客问题,线下渠道推广宣传方式单…

深刻解析数据库技术的要点以及应对策略 (软件设计师笔记)

😀前言 在信息化的时代背景下,数据已经成为了推动各行各业发展的核心要素之一。数据的储存、管理、维护、和获取变得尤为关键,确保信息的高效流通和决策的科学性。数据库技术,正是在这一背景下发挥着举足轻重的作用,它…

源码上分析Vue2和Vue3的响应式原理

本文节选自我的博客:源码上分析Vue2和Vue3的响应式原理 💖 作者简介:大家好,我是MilesChen,偏前端的全栈开发者。📝 CSDN主页:爱吃糖的猫🔥📣 我的博客:爱吃糖…

基于帝国主义竞争优化的BP神经网络(分类应用) - 附代码

基于帝国主义竞争优化的BP神经网络(分类应用) - 附代码 文章目录 基于帝国主义竞争优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.帝国主义竞争优化BP神经网络3.1 BP神经网络参数设置3.2 帝国主义竞争算…

【BI看板】Superset2.0+图表二次开发初探

Superset图表功能也很丰富了,但一些个性化的定制需求就需要二次开发了。网上二开的superset版本大多是0.xxx版本的或1.5xxx版本,本次用的是2.xxx。 源码相关说明 源码目录 superset-2.0\superset-frontend\plugins\plugin-chart-echarts 插件相关资料 官…

图片批量编辑器,轻松拼接多张图片,创意无限!

你是否曾经遇到这样的问题:需要将多张图片拼接成一张完整的画面,却缺乏专业的图片编辑技能?现在,我们为你带来一款强大的图片批量编辑器——让你轻松实现多张图片拼接,创意无限! 这款图片批量编辑器可以帮助…

IP地址划分知识点总结

目录 1.IP数据报头 2.IP地址 3.IP地址分类 4.特殊IP地址 1.IP数据报头 网络之间的互连协议(Internet Protocol,IP)是方便计算机网络系统之间相互通信的协议,是各大厂家遵循的计算机网络相互通信的规则。 IP数据报报头如下图所示: (1)版…

计算机竞赛 题目:基于python的验证码识别 - 机器视觉 验证码识别

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于pyt…

蓝桥杯---第二讲---二分与前缀和

文章目录 前言Ⅰ. 数的范围0x00 算法思路0x00 代码书写 Ⅱ. 数的三次方根0x00 算法思路0x01代码书写 Ⅲ. 前缀和0x00 算法思路0x01 代码书写 Ⅳ. 子矩阵的和0x00 算法思路0x01 代码书写 Ⅴ. 机器人跳跃问题0x00 算法思路0x01 代码书写 Ⅵ. 四平方和0x00 算法思路0x01 代码书写 …

10.3 C++运算符重载实现的过程,代码

目录 运算符重载背景(operator) 定义 重载的方法 不能重载的运算符 运算符重载注意事项 代码实现 运行结果 运算符重载背景(operator) 自定义的类中,系统默认只提供两个运算符供用户使用,分别是赋值…

1.3.OpenCV技能树--第一单元--图像的基础操作(进阶篇)

目录 1.文章内容来源 2.图像的进阶操作 2.1.边界填充 2.2.数值计算 2.3.图像融合 2.4.图像保存 2.5.视频读取 3.课后习题代码复现 3.1.问题一图像像素颜色 3.2.问题二图片黑客帝国化 3.3.问题三梅西的足球轨迹 4.易错点总结与反思 1.文章内容来源 1.题目来源:https://edu.c…

netcore MediatR

一、安装包 <PackageReference Include"MediatR" Version"12.1.1" /> 二、编写示例 using MediatR;namespace WebApplication7 {public class TestCommand : IRequest<bool>{}public class TestCommandHandler : IRequestHandler<TestCo…

Python为Excel中每一个单元格计算其在多个文件中的平均值

本文介绍基于Python语言&#xff0c;对大量不同的Excel文件加以跨文件、逐单元格平均值计算的方法。 首先&#xff0c;我们来明确一下本文的具体需求。现有一个文件夹&#xff0c;其中有如下所示的大量Excel文件&#xff0c;我们这里就以.csv文件为例来介绍。其中&#xff0c;每…

Linux友人帐之账号用户管理

一、账号管理 1.1简介 Linux系统是一个多用户多任务的分时操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统管理员申请一个账号&#xff0c;然后以这个账号的身份进入系统。 用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪&#…

不死马的利用与克制(基于条件竞争)及变种不死马

不死马即内存马&#xff0c;它会写进进程里&#xff0c;并且无限地在指定目录中生成木马文件 这里以PHP不死马为例 测试代码&#xff1a; <?phpignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file .test.php;$code <?php if(md5($_GET["pass…

理解自动驾驶感知技术

理解自动驾驶感知技术 文章目录 什么是自动驾驶感知技术&#xff1f;自动驾驶感知技术的关键组成部分1. 雷达&#xff08;Radar&#xff09;2. 摄像头&#xff08;Camera&#xff09;3. 激光雷达&#xff08;Lidar&#xff09;4. 超声波传感器&#xff08;Ultrasonic Sensors&a…

一文搞懂APT攻击

APT攻击 1. 基本概念2. APT的攻击阶段3. APT的典型案例参考 1. 基本概念 高级持续性威胁&#xff08;APT&#xff0c;Advanced Persistent Threat&#xff09;&#xff0c;又叫高级长期威胁&#xff0c;是一种复杂的、持续的网络攻击&#xff0c;包含高级、长期、威胁三个要素…

法国乐天下单支付流程,自养号测评技术环境揭秘。

Rakuten的前身是PriceMinister一家法国公司&#xff0c;经营电子商务网站PriceMinister&#xff0c;按访问量计算&#xff0c;该网站是法国第五大电子商务网站。2010年&#xff0c;它被乐天公司收购&#xff0c;2018年&#xff0c;它更名为Rakuten。乐天法国Rakuten France&…