如何在Linux用Docker部署MySQL数据库并远程访问本地数据库

文章目录

    • 前言
    • 1 .安装Docker
    • 2. 使用Docker拉取MySQL镜像
    • 3. 创建并启动MySQL容器
    • 4. 本地连接测试
      • 4.1 安装MySQL图形化界面工具
      • 4.2 使用MySQL Workbench连接测试
    • 5. 公网远程访问本地MySQL
      • 5.1 内网穿透工具安装
      • 5.2 创建远程连接公网地址
      • 5.3 使用固定TCP地址远程访问

前言

本文主要介绍如何使用Docker部署MySQL,并结合cpolar内网穿透工具实现远程访问本地数据库。

Docker提供了一个轻量级的容器化解决方案,可以更好的简化数据库的部署过程。让创建和管理MySQL数据库变得更简单快捷。下面就来分享一下具体的部署过程,并提出一些需要注意的事项,以及如何通过内网穿透工具实现无公网ip访问本地数据库。

1 .安装Docker

本教程操作环境为Linux Ubuntu系统,在开始之前,我们需要先安装Docker。

在终端中执行下方命令:

添加Docker源

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg# Add the repository to Apt sources:
echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装Dokcer包

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

通过运行映像来验证 Docker 引擎安装是否成功

sudo docker run hello-world

2. 使用Docker拉取MySQL镜像

sudo docker pull mysql:latest

image-20240124151745320

然后执行查看镜像命令:

sudo docker images

image-20240124151856092

可以看到成功拉取了MySQL镜像。

3. 创建并启动MySQL容器

成功拉取MySQL镜像后,我们可以使用该镜像创建并运行一个MySQL容器。

在终端执行以下命令:

sudo docker run -itd -p 3308:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=mydb mysql

在该命令中,创建并在后台运行了一个名为:mysql1的MySQL容器,将容器中运行的MySQL映射到本地主机的3308端口(笔者主机3306端口被占用),并设置MySQL的root密码为123456,创建了一个名为:mydb的数据库。

image-20240124170748184

然后执行下方命令查看容器是否正在运行:

sudo docker ps

1706087320684

可以看到刚才创建的MySQL容器正在运行中。

4. 本地连接测试

4.1 安装MySQL图形化界面工具

现在我们已经在docker中本地部署了MySQL容器,如果要在本地进行连接测试,

可以下载MySQL图形化界面工具:MySQL Workbench

下载地址:MySQL :: MySQL Workbench

image-20240124171209127

我这里选择了Windows系统版本的,大家可以根据需求自行选择其他版本,点击下载。

image-20240124171339905

4.2 使用MySQL Workbench连接测试

下载并进行安装后,点击加号,在弹出窗口中添加想要连接的MySQL数据库相关信息:

image-20240124171506886

hostname需要填入你的本机ip地址(192.168.184.128),端口为本机端口(3308),实际操作时大家需以自己主机的ip地址和端口为准。然后使用root用户登录,输入密码123456,点击OK。

image-20240124171956809

信息输入完毕后,点击右下方的连接测试按钮。

image-20240124171924947

看到successful made the MySQL connection提示框则为连接成功,点击OK关掉提示框后,再点击信息框右下方的OK按钮,即可正式连接本地MySQL数据库。

image-20240124172259142

点击此处生成的连接方式,即可成功进入数据库界面:

image-20240124172424006

5. 公网远程访问本地MySQL

不过我们目前只能在本地连接刚刚在docker部署的MySQL数据库,如果身在异地,想要远程访问在本地部署的MySQL容器,但又没有公网ip怎么办呢?

我们可以使用cpolar内网穿透工具来实现无公网ip环境下的远程访问需求。

5.1 内网穿透工具安装

下面是安装cpolar步骤:

cpolar官网地址: https://www.cpolar.com

  • 使用一键脚本安装命令
curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash
  • 向系统添加服务
sudo systemctl enable cpolar
  • 启动cpolar服务
sudo systemctl start cpolar

cpolar安装成功后,在外部浏览器上访问Linux 的9200端口即:【http://服务器的局域网ip:9200】,使用cpolar账号登录,登录后即可看到cpolar web 配置界面,结下来在web 管理界面配置即可。

image-20230831171159175

5.2 创建远程连接公网地址

登录cpolar web UI管理界面后,点击左侧仪表盘的隧道管理——创建隧道:

  • 隧道名称:可自定义,注意不要与已有的隧道名称重复,本例使用了:mysql
  • 协议:TCP
  • 本地地址:3308
  • 端口类型:随机临时TCP端口
  • 地区:选择China Top

点击创建

image-20240124173330127

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑(异地)上,将该地址与端口号分别复制到MySQL Workbench进行连接即可。

image-20240124173511412

如下图所示,ip地址位置填写:17.tcp.cpolar.top,端口号填写:12878 ,点击链接测试:

image-20240124173719740

可以看到显示测试连接成功:

image-20240124173808836

成功实现使用该公网地址远程访问本地MySQL数据库界面:

image-20240124173943769

小结

为了方便演示,我们在上边的操作过程中使用了cpolar生成的TCP公网地址隧道,其公网地址是随机生成的。

这种随机地址的优势在于建立速度快,可以立即使用。然而,它的缺点是网址是随机生成,这个地址在24小时内会发生随机变化,更适合于临时使用。

如果有长期远程访问本地MySQL的需求,但又不想每天重新配置公网地址,还想地址好看又好记,那我推荐大家选择使用固定的TCP地址的方式来远程访问。

5.3 使用固定TCP地址远程访问

接下来保留一个固定TCP地址,登录cpolar官网,点击左侧的预留,找到保留的TCP地址,为远程服务器连接保留一个固定的地址:

  • 地区:选择China VIP
  • 描述:即备注,可自定义,本例使用mysql123

点击保留

image-20240124174216989

可以看到生成了一个固定的TCP公网地址:

image-20240124174402564

地址保留成功后,复制生成的公网地址,打开cpolar web ui管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到我们刚才创建的随机公网地址隧道 mysql,点击编辑

image-20240124174513291

修改隧道信息,将刚才保留成功的固定TCP地址配置到隧道中

  • 端口类型:选择固定TCP端口
  • 预留的TCP地址:复制粘贴官网保留成功的地址,本例中为:5.tcp.vip.cpolar.cn:12675

点击更新

image-20240124174612892

隧道更新成功后,点击左侧仪表盘的状态——在线隧道列表,可以看到公网地址已经更新为了固定TCP地址。

image-20240124174658241

接下来与之前的操作一样,可以在其他电脑(异地)上,使用这个固定的TCP地址访问MySQL Workbench即可。

点击修改连接信息按钮:

image-20240124174759552

ip地址位置填写:5.tcp.vip.cpolar.cn,端口号填写:12675 ,点击链接测试,可以看到显示测试连接成功:

image-20240124174937527

成功实现使用cpolar内网穿透工具实现固定TCP公网地址远程访问本地MySQL数据库界面:

image-20240124175049269

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

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

相关文章

RabbitMQ理论:RabbitMQ学习思维导图

参考资料 RabbitMQ五种消息模型

信号隔离器4-20mA一进二出直流电流电压变送模拟量输出0-10V泰华

品牌:泰华仪表 您需要一款这样的隔离器,转换精度高,响应速度快,耐压隔离高,三端隔离技术,低功耗。 DC24V供电,为现场的变送器提供隔离配电电源,同时将变送器产生的电流信号从现场…

Springboot 打成jar包后 结合idea remote 远程debug

1、将测试demo打成jar 2、 将jar放到某个目录下,并运行起来 java -jar -agentlib:jdwptransportdt_socket,servery,suspendn,address*:10087 base_admin-1.0.0.jar 3、在Idea中编辑Remote调试 4、在浏览器中打开刚启动的jar,比如我的项目地址&#x…

在NAT模式下,局域网内的其他电脑要访问使用NAT模式的虚拟机或设备

在NAT模式下,局域网内的其他电脑要访问使用NAT模式的虚拟机或设备 可以通过以下几种方式: 1、端口映射:在NAT模式下,你可以配置端口映射,类似于Docker中的端口映射。这样,局域网内的其他电脑就可以通过特…

Galxe:被低估的加密市场掘金地+Web3门户

在BTC ETF获得 SEC 的批准之后,机构资金大量买入推动BTC上涨,并带动整个加密市场回暖进入牛市。那么,对于习惯了熊市保守心态的投资者来说,接下来如何转换策略适应牛市?对即将进场的Web2用户来说,如何玩赚W…

一次简单操作代替所有异常处理

一、背景 在服务端处理前端发过来的响应的时候,开发者不可能穷尽用户的所有奇怪的操作。除此之外,我们还需要应付前端人员对我们的无情吐槽,你对XXXX请求返回的为啥是奇怪的响应数据呢?于是全局异常处理应运而生,一次处…

奖励建模(Reward Modeling)实现人类对智能体的反馈

奖励建模(Reward Modeling)是强化学习中的一个重要概念和技术,它主要用于训练智能体(如AI机器人或大型语言模型)如何更有效地学习和遵循人类期望的行为。在强化学习环境中,智能体通过尝试不同的行为获得环境…

C#实现插入排序算法

C#实现插入排序算法 以下是使用C#实现插入排序算法的示例代码: using System;class InsertionSort {static void Main(string[] args){int[] arr { 64, 25, 12, 22, 11 };Console.WriteLine("排序前:");PrintArray(arr);InsertionSortAlgori…

JavaScript 二分查找(迭代与递归)

二分搜索被定义为一种在排序数组中使用的搜索算法,通过重复将搜索间隔一分为二。二分查找的思想是利用数组已排序的信息,将时间复杂度降低到O(log N)。 二分查找算法示例 何时在数据结构中应用二分查找的条件: 应用二分查找算法&#xff1a…

阿里云k8s环境下,因slb限额导致的发布事故

一、背景 阿里云k8s容器,在发布java应用程序的时候,客户端访问出现500错误。 后端服务是健康且可用的,网关层大量500错误请求,slb没有流入和流出流量。 经过回滚,仍未能解决错误。可谓是一次血的教训,特…

[React 进阶系列] React Context 案例学习:使用 TS 及 HOC 封装 Context

[React 进阶系列] React Context 案例学习:使用 TS 及 HOC 封装 Context 具体 context 的实现在这里:[React 进阶系列] React Context 案例学习:子组件内更新父组件的状态。 根据项目经验是这样的,自从换了 TS 之后,…

光线追踪12 - Defocus Blur(虚焦模糊)

现在我们的最后一个特性是虚化模糊。注意,摄影师通常称之为景深,所以请确保在光线追踪的朋友中只使用虚化模糊这个术语。 真实相机具有虚化模糊是因为它们需要一个大孔(而不仅仅是针孔)来收集光线。一个大孔会导致所有物体失去焦点…

社交媒体革新者:揭秘Facebook对在线互动的影响

1. Facebook的兴起与发展 Facebook由马克扎克伯格在哈佛大学宿舍创建,最初只是服务于哈佛大学学生的社交网络。然而,其后快速扩张到其他大学和全球,成为了全球最大的社交媒体平台之一。其发展历程不仅是数字时代的典范,也是创业成…

CrySiS勒索病毒最新变种来袭,加密后缀为kharma

CrySiS勒索病毒,又称Dharma,首次出现是在2016年,2017年5月此勒索病毒万能密钥被公布之后,之前的样本可以解密,导致此勒索病毒曾消失了一段时间,不过随后又马上出现了它的一款最新的变种样本,加密…

101 向一个不存在的路径发送请求, get 得到 404, post 得到 405

前言 这是 最近碰到的一个问题, 大概是在 2022.05.30 前端这边 发送了一个业务请求过来, 这个请求路径是服务端这边不存在的 但是 奇怪的一点就是, 如果是以 get 请求发送过来, 服务端响应的是正确的 404 "Not Found", 但是 如果是以 post 请求发送过来, 服务端这边…

Springboot整合rabbitmq(二)

spring boot,为了简化rabbitMQ的使用,它在这里面给咱们提供了一个模板对象。 这个模板对象是什么? 这个模板对象叫RabbitTemplate对象。说白了其实是用来简化rabbitMQ的操作 也就是说之后我们可以通过这个模板对象直接去向rabbitMQ中发送消息…

1分钟做的AI利润表分析报告,效果怎样?

各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事! 自从去年年初ChatGPT3.5推出以来,AI大模型的话题就一直非常热了。相比于AI聊天、生成图片,亦…

STL空间配置器

参考《STL源码剖析-侯捷》一书 (SGI版本STL) 前置 六大组件 空间配置器实现 SGI版本的空间配置器有两个,一个名为allocator,一个名为alloc。前者符合部分标准,但效率不好,只是对operator new和operator delete进行了封装&#…

工业互联网平台的专题报告

文 | BFT机器人 前言: 现在是工业时代,也是数字化时代。随着信息技术的快速发展,工业不得不依托数字化转型升级。当前数字化转型已经成为企业提升竞争力的关键手段。 工业互联网平台作为数字化转型的重要支撑,能够帮助企业实现生…

(day 2)JavaScript学习笔记(基础之变量、常量和注释)

概述 这是我的学习笔记,记录了JavaScript的学习过程,我是有一些Python基础的,因此在学习的过程中不自觉的把JavaScript的代码跟Python代码做对比,以便加深印象。我本人学习软件开发纯属个人兴趣,大学所学的专业也非软件…