前言:

上篇文章介绍了Docker工具的安装及常用命令使用。本篇文章我们会介绍如何在Docker中运行MySQL实例,可能有的小伙伴会问:为什么要在Docker里运行MySQL呢?因为在Docker里部署MySQL实例操作简单,不需要考虑操作系统等依赖差异,而且可以多实例部署,比如说我们原来服务器有安装MySQL5.7,我们想再运行MySQL8.0实例的话只需要用Docker启动MySQL8.0镜像即可。下面我们就来介绍下如何用Docker启动MySQL实例。

▍1.拉取MySQL官方镜像

在上篇文章中我们介绍过Docker中三个基本的概念:镜像,容器,仓库。要用在Docker中部署MySQL,第一步要做的是从官方仓库中拉取MySQL镜像,这里我们从Docker Hub中拉取MySQL镜像。进入Docker Hub,搜索MySQL,可以看到如下画面,其中有不同版本的镜像及使用介绍。

比如我们想拉取MySQL5.7版本及8.0版本的镜像,可以做如下操作:

# 拉取5.7及8.0版本镜像 稍等片刻即可拉取成功
docker pull mysql:5.7.23
docker pull mysql:8.0.18 # 查看镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 8.0.18 c8ee894bd2bd 2 weeks ago 456MB
mysql 5.7.23 1b30b36ae96a 12 months ago 372MB

其实MySQL官方镜像也存在一些缺陷,比如说时区不是北京时间,系统字符集问题等。下面以MySQL5.7.23版本镜像为基础,展示下如何修改构建镜像。

# 创建Dockerfile 主要作用是更改系统字符集及时区 内容如下:
cat Dockerfile
FROM mysql:5.7.23
MAINTAINER wang
RUN echo "alias ls='ls --color=auto'" >> /root/.bashrc \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ENV LANG=C.UTF-8 # 构建镜像
docker build -t my-mysql:5.7.23 .
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM mysql:5.7.23
---> 1b30b36ae96a
Step 2/4 : MAINTAINER wang
---> Running in a7cc94f95cc7
Removing intermediate container a7cc94f95cc7
---> d9590ed98de5
Step 3/4 : RUN echo "alias ls='ls --color=auto'" >> /root/.bashrc && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
---> Running in e698bfdb3817
Removing intermediate container e698bfdb3817
---> 31c9ed9103c5
Step 4/4 : ENV LANG=C.UTF-8
---> Running in eefa296fef94
Removing intermediate container eefa296fef94
---> 10aa697936e9
Successfully built 10aa697936e9
Successfully tagged my-mysql:5.7.23 # 再次查看镜像即可找到我们新构建的镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-mysql 5.7.23 10aa697936e9 About a minute ago 372MB
mysql 8.0.18 c8ee894bd2bd 2 weeks ago 456MB
mysql 5.7.23 1b30b36ae96a 12 months ago 372MB

▍2.启动MySQL实例

这里为大家介绍如何利用上面构建的镜像来运行MySQL实例,MySQL容器化其实也需要映射端口,数据持久化,加载配置文件等操作,下面给大家演示下具体启动操作。

2.1 创建数据持久化路径及配置文件

# 创建配置文件目录及数据目录
mkdir -p /data/mysql57/{cnf,data} # 添加配置文件my.cnf
cd /data/mysql57/cnf/
vim my.cnf # 配置文件内容如下,可自定义
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql server-id = 33061
max_connections = 1000
sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1
innodb_file_per_table = 1
log_timestamps=SYSTEM
character-set-server = utf8
max_allowed_packet = 32M
sort_buffer_size = 4M
read_buffer_size = 4M
join_buffer_size = 4M
binlog_cache_size = 4M
tmp_table_size = 96M
max_heap_table_size = 96M
innodb_buffer_pool_size = 512M #logs
slow_query_log = 1
slow_query_log_file = /var/lib/mysql/slow.log
long_query_time = 3
log-bin = /var/lib/mysql/binlog
binlog_format = row
expire_logs_days = 15
log_bin_trust_function_creators = 1

2.2 docker run运行MySQL实例

# 一条命令启动一个MySQL实例
docker run -itd -p 33061:3306 --name mysql57 --hostname=mysql57 -v /data/mysql57/cnf:/etc/mysql -v /data/mysql57/data:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=Asdf@123456 my-mysql:5.7.23 # 解释下各个参数的含义
-d: 后台运行容器,并返回容器ID
-i: 以交互模式运行容器,通常与 -t 同时使用
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
--name="mysql57": 为容器指定一个名称
--hostname=mysql57: 指定容器的hostname
-v: 绑定一个卷
--privileged=true: 以特权方式启动容器

2.3 检查容器状态

# 查看容器状态
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04cd3d99d5cb my-mysql:5.7.23 "docker-entrypoint.s…" 13 seconds ago Up 11 seconds 33060/tcp, 0.0.0.0:33061->3306/tcp mysql57 # 进入容器内
docker exec -it mysql57 /bin/bash 或 docker exec -it [CONTAINER ID] /bin/bash

▍3.其他相关操作

到此为止,我们已经在Docker中成功运行了MySQL实例,其实还没有结束,还有好多操作还没讲,比如如何备份恢复,怎么更改配置等,下面简单介绍下这类相关操作。

  • 备份恢复
# 备份
docker exec mysql57 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /tmp/all-databases.sql # 恢复
docker exec -i mysql57 sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /tmp/all-databases.sql
  • 更改配置
# 更改配置只需要修改宿主机 /data/mysql57/cnf/my.cnf 文件,然后重启容器即可
docker restart mysql57

如果你想在本地通过工具连接容器内MySQL的话,可以使用宿主机ip加映射端口来连接。比如我们上面创建的MySQL实例就可以通过宿主机ip+30661端口来连接,若无法连接请检查网络及服务器防火墙。

总结:

本文主要介绍在Docker中部署MySQL的方法步骤,体验下来你会发现非常简单方便,而且可以大规模多实例部署。假如你想体验最新版本8.0.18的话,可以自己部署下试试看,其实还可以更简单,比如说直接运行docker run mysql:5.7.23 即可启动一个实例,但是为了更加规范,还是建议将配置文件及数据目录都挂载到宿主机本地。

参考资料:

碎碎念:

阿里云服务器双十一活动还在继续,入门级的服务器86元即可买一年,推荐大家看看。买一台云服务器,你可以学习Linux,MySQL,Docker,Git等,还可以部署个人网站,需要的小伙伴可以买来测试玩玩哦!复制下面链接到浏览器打开即可进入官网页面购买。

https://www.aliyun.com/1111/2019/group-buying-share?ptCode=F6718C2981638C225DDA9F79172CF1F4647C88CF896EF535&share_source=copy_link

MySQL容器化详细教程的更多相关文章

  1. Ubuntu 搭建Web服务器(MySQL+PHP+Apache)详细教程

    Ubuntu 搭建Web服务器(MySQL+PHP+Apache)详细教程 看了好多人的博客,有的不全 or 有问题,整理了一下,适合小白 新手先整理几个小问题 1.为啥使用 Linux 搭建服务器? ...

  2. Docker最全教程之MySQL容器化 (二十四)

    前言 MySQL是目前最流行的开源的关系型数据库,MySQL的容器化之前有朋友投稿并且写过此块,本篇仅从笔者角度进行总结和编写. 目录 镜像说明  运行MySQL容器镜像  1.运行MySQL容器  ...

  3. Mysql安装的详细教程

    首先,针对本人最近几天各种电脑安装数据库失败,反思总结所有的方式.现写出详细教程,希望别的人少走弯路. 首先 这次内容分为如下几步 : 1.mysql之前安装的彻底清除 2.mysql版本的选取 3. ...

  4. 给小白的 PostgreSQL 容器化部署教程(上)

    作者:王志斌 编辑:钟华龙 本文来自社区小伙伴 王志斌 的投稿.从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上.文章分为上下两部分,第一部分 ...

  5. 给小白的 PG 容器化部署教程(下)

    作者:王志斌 编辑:钟华龙 本文来自社区小伙伴 王志斌 的投稿.从小白的角度,带你一步步实现将 RadonDB PostgreSQL 集群部署到 Kubernetes 上.文章分为上下两部分,< ...

  6. mysql主从同步详细教程

    1.安装好主数据库和从数据库,这个大家肯定都会,如果不是很明白,可以参考我前面的安装教程. 例子: 假如我需要同步test1.test2数据库 系统:centos7 主库主机:192.168.1.25 ...

  7. Mysql慢查询-Mysql慢查询详细教程

    一.简介开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能.二.参数说明slow_query_log 慢查询开启状态slow_quer ...

  8. mysql安装使用详细教程

    1.数据库存储数据的方式与Excel类似. 一.数据库介绍 1.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访 ...

  9. MySQL的安装详细教程

    一.下载MySQL数据库并创建初始化文件 1.下载MySql数据压缩包-----下载网址:https://dev.mysql.com/downloads/mysql/ 2.选择兆数最少的那个下载 3. ...

随机推荐

  1. MyBatisPlus快速入门

    MyBatisPlus快速入门 官方网站 https://mp.baomidou.com/guide 慕课网视频 https://www.imooc.com/learn/1130 入门 https:/ ...

  2. 【使用篇二】SpringBoot服务端数据校验(8)

    对于任何一个应用而言,客户端做的数据有效性验证都不是安全有效的,而数据验证又是一个企业级项目架构上最为基础的功能模块,这时候就要求我们在服务端接收到数据的时候也对数据的有效性进行验证.为什么这么说呢? ...

  3. 【电脑】分屏显示输入信号超出范围调整为XXXXXXX

    选提示的那个范围就OK了. 注意:1.修改的是外界显示器,不是主显示器/笔记本.     2.修改外接显示器,不影响主显示器/笔记本

  4. Shell编程——位置参数变量

    1. (1)创建Shell脚本: (2)赋予执行权限: (3)执行Shell脚本: (4)对脚本赋值后执行脚本: $n:n为数字,$0代表命令本身,$1-9代表第一到第九个参数,十以上的参数用大括号包 ...

  5. The 13th Chinese Northeast Collegiate Programming Contest

    题解: solution Code: A. Apple Business #include<cstdio> #include<algorithm> #include<ve ...

  6. [LeetCode] 913. Cat and Mouse 猫和老鼠

    A game on an undirected graph is played by two players, Mouse and Cat, who alternate turns. The grap ...

  7. [LeetCode] 884. Uncommon Words from Two Sentences 两个句子中不相同的单词

    We are given two sentences A and B.  (A sentence is a string of space separated words.  Each word co ...

  8. 算法马拉松35 E 数论只会Gcd - 类欧几里得 - Stern-Brocot Tree - 莫比乌斯反演

    题目传送门 传送门 这个官方题解除了讲了个结论,感觉啥都没说,不知道是因为我太菜了,还是因为它真的啥都没说. 如果 $x \geqslant y$,显然 gcd(x, y) 只会被调用一次. 否则考虑 ...

  9. java web开发需要注意的地方

    java需要注意的 1.字符串值相等比较 c#用双等号(==)来进行 字符串值相等比较.如下: string a="3"; string b="3"; if(a ...

  10. mysql操作(精简版)

    一.数据库操作(建库.删库) 1.查看数据库:show databases; 2.创建数据库:DROP DATABASE 数据库名; 3.删除数据库:CREATE DATABASE 数据库名; 4.使 ...