前言

虽然不建议将需要持久化的数据保存在容器中,但是自己平时做个小项目玩玩还是没什么问题的。

拉取镜像

docker pull mysql

不加 tag 的话默认从 DockerHub 拉取最新版本的

启动容器

  • 运行一下试试

    docker run mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql_test mysql

    这里的 -e 参数是必须指定的,作用是设置数据库的密码,否则将无法启动容器。

  • 复制容器内的文件到宿主机

    现在我们还没有进入容器,可以在宿主机的命令行中输入 docker ps 查看当前正在运行的容器,如果没出什么问题的话应该可以看到一个名为 mysql_test 的容器正在运行。在学习数据库的时候我们已经知道了 MySql 的数据库文件默认位于 /var/lib/mysql/ 中,配置文件在 /etc/mysql/conf.d/etc/my.cnf

    我们不对默认的配置做更改,所以就没必要挂载 conf.d 目录到宿主机了,只需要映射一下容器内的数据库文件,以防止容器宕掉了导致数据的丢失。

    docker cp mysql_test:/var/lib/mysql $PWD/

    这里的 cp 命令作用是复制容器内的文件,后面的 $PWD当前所在的宿主机目录,例如我现在的目录是 /home/hsk/box_container/mysql/,复制出来的 mysql 文件夹就会在我当前的路径下。

启动一个新的容器

  • 将默认的数据库文件复制出来后,就可以删除之前测试用的容器了,在删除之前 我们要先停掉它:

    docker stop mysql_test
  • 删除旧容器:

    docker rm mysql_test
  • 创建一个新的容器并挂载卷,映射端口:

    docker run \
    -d \
    --name mysql01 \
    -p 3309:3306 \
    -v /home/hsk/box_container/mysql01/conf.d/:/etc/mysql/conf.d \
    -v /home/hsk/box_container/mysql01/mysql/:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=123456 \
    mysql

    -d 表示让容器在后台运行

    --name 为容器起一个名字

    -p 映射端口,这里把容器内的 3306 端口映射到了宿主机的 3309

    -v 挂载卷,冒号前是宿主机目录,冒号后是容器内目录

    -e 容器的环境配置

进入容器

  • 使用 docker exec -it <容器ID|容器name> /bin/bash 指令进入模拟终端:

    docker exec -it mysql01 /bin/bash
  • 进入容器后,启动 MySql 交互命令行:

    mysql -hlocalhost -uroot -p123456

  • 查看数据库表:

    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | sys |
    +--------------------+
    4 rows in set (0.00 sec)

    外部挂载进来的默认数数据库表都正常加载了

创建新的数据库

由于我的数据库基础不是很好,而且过了很长时间已经忘了基本所有的 SQL语句,所以这里使用 DBeaver 图形化数据库工具来创建数据库和添加数据,类似于大家上课时用到的 Navicat

  • 防火墙放行端口:

    在创建容器的时候我们指定了对外映射端口 3309,所以要放行该端口以供外网访问,如果像我一样使用云服务商提供的服务器的话具体去官网控制台放行一下端口就行了,如果是在自己家搭建的服务器在有 公网IP 的条件下去路由器管理界面设置,本机的话就不需要配置了。

  • 使用 DBeaver 连接数据库:

    新建连接 -> mysql

    没有报错就说明连接成功了

  • 创建数据库:

    右键「数据库」,选择「新建」,我起名为 FruitDatabase

  • 新建表:

    选择「数据库」,点击「创建」-> 「表」,我起名为 fruit_table

  • 新增列,配置主键:

    直接点击鼠标操作就行,无需输入任何 SQL语句,但是要了解数据类型、键等基础知识。我创建的字段如下所示 ↓

  • 再随便添加点数据:

回到容器

插入数据完成后,进入容器中检查下:

docker exec -it mysql01 /bin/bash

bash-4.4# mysql -hlocalhost -uroot -p123456

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| FruitDatabase |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec) mysql> use FruitDatabase
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables;
+-------------------------+
| Tables_in_FruitDatabase |
+-------------------------+
| fruit |
+-------------------------+
1 row in set (0.00 sec) mysql> select * from fruit_table;
+------------+----------+-------+-------+-----------------------------------------+
| fruit_name | fruit_id | price | stock | avatar |
+------------+----------+-------+-------+-----------------------------------------+
| ????? | 1 | 24.20 | 70 | http://www.xxx.com/apple.jpg |
| ????? | 2 | 74.20 | 80 | http://www.xxx.com/pears.jpg |
| ???? | 3 | 78.40 | 190 | http://www.xxx.com/jujube.jpg |
| ????? | 4 | 78.00 | 8 | http://www.xxx.com/jackfruit.jpg |
| ????? | 5 | 24.20 | 70 | http://www.xxx.com/litchi.jpg |
+------------+----------+-------+-------+-----------------------------------------+
5 rows in set (0.00 sec)

由于字符集的问题导致显示中文字符会出问题,这只是在命令行中会发生这种情况

使用 Docker 部署 MySql的更多相关文章

  1. Docker 部署mysql

    目录 Docker 部署mysql 步骤 1.查找 Docker Hub 上的 MySQL 镜像 2.docker pull mysql 拉取镜像 3.运行容器 4.查看容器启动情况 使用命令备注 D ...

  2. docker(部署常见应用):docker部署mysql

    上节回顾:docker(部署常见应用):docker部署nginx docker部署mysql:5.7.26 # 下载镜像 docker pull mysql: # 查看镜像 docker image ...

  3. docker部署mysql Navicat远程连接

    docker部署mysql Navicat远程连接 docker search mysql   查看mysql镜像(是去dockerHub网站搜素镜像,遇到问题可以去该网站查看官方文档,纯英文文档估计 ...

  4. Docker:Docker部署mysql数据库

    docker部署mysql : 8.0 1.在宿主机创建mysql挂载目录 #创建目录 mkdir /home/mysql/conf mkdir /home/mysql/logs mkdir /hom ...

  5. springboot多数据源配合docker部署mysql主从实现读写分离

    本篇主要有两部分: 1.使用docker部署mysql主从 实现主从复制 2.springboot项目多数据源配置,实现读写分离 一.使用docker部署mysql主从 实现主从复制 此次使用的是wi ...

  6. docker 部署mysql tomcat时 在root@localhost~下——-——docker exec -it 容器名 /bin/bash 报错

    在docker部署mysql时 报错 找不到 容器不自动启动  , docker start 容器名  也没有效果 多次尝试发现 原因是创建容器时在 下面创建的 更改为下创建 问题解决

  7. Docker部署mysql 5.7

    Docker部署mysql 5.7 准备工作 在CentOS或者Linux创建部署目录,用于存放容器的配置和MySQL数据:目的是当重装或者升级容器时,配置文件和数据不会丢失.执行以下命令: a.创建 ...

  8. Centos7借助docker部署mysql,提供远程链接服务

    Centos7 借助docker部署mysql,并提供远程连接服务 安装docker 运行docker 注意安装docker和运行docker的步骤很简单,可以参考我学习docker的笔记 docke ...

  9. Docker部署MySql应用

    1. MySQL部署 1.1拉取MySQL镜像 docker pull mysql 查看镜像 docker images 1.2创建MySQL容器 docker run -di --name piny ...

  10. docker 部署mysql redis

    先介绍利用的两个数据卷挂载的规则,这对于理解挂载mysql数据库存储非常有帮助. 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中. 如果挂载一个非空的数据卷到容 ...

随机推荐

  1. 《最新出炉》系列入门篇-Python+Playwright自动化测试-54- 上传文件(input控件) - 上篇

    1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.上传文件的API(input控 ...

  2. springboot集成minIO

    文件系统:负责管理和存储文件的系统软件.操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件 minIO:轻量级服务分布式文件系统,适合存储非机构化数据.采用去中心化共享架构,结 ...

  3. 关于mybatisplus与mybatis的自动填充混用问题

    public class MybatisPlusAutoFillHandler implements MetaObjectHandler { //插入时的填充策略 @Override public v ...

  4. docker cmd和entrypoint

    FROM scratch 很多镜像都是从他开始 创建自己的centos FROM centos 基于官方的centos开始写 构建自己的centos [root@docker dockerfile]# ...

  5. ClickHouse的向量处理能力

    ClickHouse的向量处理能力 引言 在过去,非结构化数据(如文本.图片.音频.视频)通常被认为难以在数据库中直接使用,因为这些数据类型的多样性和复杂性.然而,随着技术的发展,嵌入技术可以将非结构 ...

  6. 【WebSocket】一个简单的前后端交互Demo

    WebSocket资料参考: https://www.jianshu.com/p/d79bf8174196 使用SpringBoot整合参考: https://blog.csdn.net/KeepSt ...

  7. 【MySQL】01 概念与介绍

    视频节选自 :P1 - P7 https://www.bilibili.com/video/BV1xW411u7ax  用户浏览的页面 - 服务器 - 数据库 所有访问的本质的东西,就是访问数据,数据 ...

  8. UITableView的原理——探究及重新实现代码

    转自简书,原文地址,本文主要探讨一些特殊细节,像视图重用这类最基本的原理可在源码里查看. 先前重新实现了一个list容器视图,由于Apple没有开源,在此分享过程中探索到的UITableView一些细 ...

  9. 【VMware vCenter】一次性说清楚 vCenter Server 的 CLI 部署方式。

    VMware vCenter Server 是 VMware vSphere 解决方案的核心组件,用于管理多个 ESXi 主机并实现更多高级功能特性(如 HA.DRS 以及 FT 等),相信大家已经非 ...

  10. 23 暑假友谊赛 No.4(UKIEPC 2017)

    23 暑假友谊赛 No.4(UKIEPC 2017) Problem A Alien Sunset hh,开始一眼差分,但是写寄了qwq,后来换枚举过了(Orz,但是看学长差分是能做的,我就说嘛,差分 ...