前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >13. Docker实战之安装MySQL

13. Docker实战之安装MySQL

作者头像
有一只柴犬
发布2024-01-25 11:02:44
1.7K0
发布2024-01-25 11:02:44
举报
文章被收录于专栏:JAVA体系

1、前言

开发中,通常会自建MySQL数据库方便个人开发测试。这里利用Docker安装MySQL 5.7。

2、部署MySQL

2.1、Docker仓库查看镜像

上镜像仓库:https://hub.docker.com/ 搜索mysql。

搜索结果第一条,就是我们要的结果。

点击进去查看详情,可以看到关于MySQL镜像相关的所有信息。我们需要安装的是MySQL5.7版本,因此我们进入到Tags中。

找到我们要的5.7版本。

后面的黑框里的命令,就是我们可以拉取该版本的命令。

2.2、拉取MySQL镜像

从Docker Hub中复制拉取镜像命令,执行。

代码语言:javascript
复制
docker pull mysql:5.7

2.3、创建持久化目录

MySQL数据库部署时,一定要考虑数据持久化的问题。如果没有挂在持久化数据卷,一旦MySQL容器被销毁,则数据将会全部丢失。

代码语言:javascript
复制
# 用于存放mysql配置文件
mkdir -p mysql/conf
# 用于存放mysql数据
mkdir -p mysql/data

2.4、启动MySQL容器

代码语言:javascript
复制
docker run -d -p 33066:3306 \
    -v /home/pengyaohuang/mysql/conf:/etc/mysql/conf.d  \
    -v /home/pengyaohuang/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    --name mysql mysql:5.7

-v将MySQL的配置文件和数据文件挂在到宿主机上。

2.5、查看宿主机上的MySQL目录

代码语言:javascript
复制
tree -d -L 3 /home/pengyaohuang/mysql/

2.6、本地MySQL测试

先进入docker容器内

代码语言:javascript
复制
docker exec -it mysql /bin/bash

再通过命令进入MySQL:

代码语言:javascript
复制
mysql -uroot -p

2.7、新建MySQL用户,配置远程访问

创建一个admin_rw账户:

代码语言:javascript
复制
# 创建用户
mysql> create user 'admin_rw'@'%' identified by '123456';
# 赋予所有权限
mysql> grant all privileges on *.* to 'admin_rw'@'%';
# 刷新权限
mysql> flush privileges;

2.8、本地Navicat连接测试

由于我映射到宿主机端口为33066,因此我的MySQL连接信息为:192.168.74.128:33066

连接成功:

3、为什么数据库不适合Docker容器化

虽然我们按照前面步骤能够正常安装并使用我们的MySQL。但是实际项目中,我们MySQL很少会使用Docker安装,要么直接装在宿主机,要么使用云服务RDS。这是因为DOcker容器提供的是无状态的服务,所以不适合将有状态的服务(如数据库)部署到Docker容器中。原因有4:

3.1、数据安全性

尽管 Docker 可以通过数据卷的方式将容器中的数据持久化到宿主机上,但仍不能保证不丢失数据。如果容器崩溃了,且数据库未被正确关闭,则可能会丢失数据。

3.2、硬件资源争用

通常在一台 Docker 的宿主机上会启动多个容器,如果将数据库的容器与其他应用的容器部署在同一个宿主机上,由于它们对硬件资源的要求是不同的,则必然会造成资源争用的问题。

3.3、网络带宽占用

Docker 的网络都是虚拟网络,通过宿主机上的 docker0 网桥进行转发。而数据库通常对网络带宽的要求是比较高的。因此,将数据库的容器与其他应用的容器部署在同一个宿主机上,则网络带宽必然会成为数据库性能的瓶颈。

3.4、数据额外隔离

将数据库部署到容器中,毫无疑问会增加对容器的隔离,不利于数据库的水平扩展。

4、小结

使用 Docker 是为了更容易地构建新环境和重新部署应用。而在实际情况中,数据库一旦部署完成,则很少会对数据库进行升级或重新部署。因此,从这个角度来看数据库也不适合 Docker 容器化。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、前言
  • 2、部署MySQL
    • 2.1、Docker仓库查看镜像
      • 2.2、拉取MySQL镜像
        • 2.3、创建持久化目录
          • 2.4、启动MySQL容器
            • 2.5、查看宿主机上的MySQL目录
              • 2.6、本地MySQL测试
                • 2.7、新建MySQL用户,配置远程访问
                  • 2.8、本地Navicat连接测试
                  • 3、为什么数据库不适合Docker容器化
                    • 3.1、数据安全性
                      • 3.2、硬件资源争用
                        • 3.3、网络带宽占用
                          • 3.4、数据额外隔离
                          • 4、小结
                          相关产品与服务
                          容器服务
                          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档