MySQL容器化详细教程

前言: mysql

上篇文章介绍了Docker工具的安装及经常使用命令使用。本篇文章咱们会介绍如何在Docker中运行MySQL实例,可能有的小伙伴会问:为何要在Docker里运行MySQL呢?由于在Docker里部署MySQL实例操做简单,不须要考虑操做系统等依赖差别,并且能够多实例部署,好比说咱们原来服务器有安装MySQL5.7,咱们想再运行MySQL8.0实例的话只须要用Docker启动MySQL8.0镜像便可。下面咱们就来介绍下如何用Docker启动MySQL实例。sql

▍1.拉取MySQL官方镜像

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

image.png

好比咱们想拉取MySQL5.7版本及8.0版本的镜像,能够作以下操做:vim

# 拉取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版本镜像为基础,展现下如何修改构建镜像。bash

# 建立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实例socket

# 一条命令启动一个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 检查容器状态tcp

# 查看容器状态
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实例,其实尚未结束,还有好多操做还没讲,好比如何备份恢复,怎么更改配置等,下面简单介绍下这类相关操做。ide

  • 备份恢复
# 备份
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 便可启动一个实例,可是为了更加规范,仍是建议将配置文件及数据目录都挂载到宿主机本地。

参考资料: 

相关文章
相关标签/搜索