# Docker基础教程 - 11 常用容器部署-MySQL

下面介绍一下常用容器的部署。可以先简单了解下,用到再来详细查看。

在 Docker 中部署 MySQL 容器。

# 11.1 搜索镜像

首先搜索镜像,命令:

docker search mysql
1

找到官方镜像:

这里使用 mysqlmariadb 都可以,MySQL 因为 Sun 公司被 Oracle 公司收购而属于 Oracle 了。MariaDB 是由 MySQL 的创始人之一Michael Widenius 领导的开源社区开发的分支。MariaDB在功能和语法上与MySQL高度兼容。大多数MySQL的命令和语句都可以在MariaDB中无缝运行。此外,MariaDB还添加了一些新功能和改进,例如更好的性能优化和存储引擎支持。

# 11.2 拉取镜像

拉取镜像,这里我使用 MariaDB,使用 mysql 也可以,命令:

docker pull mariadb
1

# 11.3 启动容器

镜像拉取完成,下面可以启动容器了。

命令:

docker run -d --privileged=true --restart=always --name mysql -p 3306:3306 \
-v /home/doubi/mysql/conf:/etc/mysql/conf.d  \
-v /home/doubi/mysql/log:/var/log/mysql \
-v /home/doubi/mysql/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai mariadb
1
2
3
4
5
6

解释一下:

  • -d :运行容器在后台;

  • --privileged=true :给予容器所有主机的权限;

  • --restart=always :设置容器的重启策略为总是重启。这意味着无论容器退出状态如何,Docker 都会尝试自动重启它;

  • --name mysql :为容器指定一个名字,随便起,我这里叫 mysql;

  • -p 3306:3306 :端口映射。将主机的 3306 端口映射到容器的 3306 端口,这样你就可以通过主机的 3306 端口访问容器内的数据库服务。

  • -v /home/doubi/mysql/conf:/etc/mysql/conf.d :容器卷映射。将主机上的 /home/doubi/mysql/conf 目录映射到容器内的 /etc/mysql 目录,在这个目录下存放 MySQL 的配置文件;

  • -v /home/doubi/mysql/log:/var/log/mysql :容器卷映射。将主机上的 /home/doubi/mysql/log 目录映射到容器内的 /var/log/mysql 目录,这样可以在宿主机中访问 MySQL 的日志;

  • -v /home/doubi/mysql/data:/var/lib/mysql:容器卷映射。将主机上的 /home/doubi/mysql/data 目录映射到容器内的 /var/lib/mysql 目录。将容器内数据库的数据保存到宿主机,这样即使容器被删除,数据也不会丢失,否则只能跑路了。

  • -v /etc/localtime:/etc/localtime :容器卷映射。将主机上的系统时间(/etc/localtime)映射到容器内,以确保容器内的时间和主机同步。

  • -e MYSQL_ROOT_PASSWORD=123456 :设置环境变量,这里指定了 MySQL 的 root 用户的密码为 123456

  • -e TZ=Asia/Shanghai :设置环境变量,指定容器的时区为上海时区。

  • mariadb :指定要运行的 Docker 镜像的名字,即 MariaDB 镜像。

注意,自己的宿主机上不要安装mysql,否则使用 3306 端口会和宿主机的mysql端口冲突,如果冲突,可以修改宿主机的端口映射。

# 11.4 数据库配置

旧版本的数据库会有编码问题,导致中文乱码,插入数据可能会报错。如果用的是最新版本,是没有问题的。

下面针对编码问题进行配置:

在挂载的配置目录下,我这里是 /home/doubi/mysql/conf 目录,在 conf 目录下新建配置文件 my.cnf ,内容如下:

[client] 
default-character-set=utf8 

[mysql] 
default-character-set=utf8 

[mysqld] 
init_connect='SET collation_connection = utf8_unicode_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_unicode_ci 
skip-character-set-client-handshake 
skip-name-resolve 
1
2
3
4
5
6
7
8
9
10
11
12
13

# 11.5 重启容器

修改配置后,需要重启容器才会生效。

docker restart 容器ID
1

重启后就可以使用 mysql 客户端工具连接到宿主机的3306端口了。

# 11.6 连接数据库

如果没有客户端工具,那么可以进到 MySQL 的 docker 容器中,使用命令行来操作。

# 进入到容器
docker exec -it 容器ID /bin/bash

# 容器中执行,指定用户名,下面指定的是root
mysql -u root -p

# 执行上面的命令,会要求输入密码,输入密码就连接成功了
# 选择指定的数据库
use db_foooor;

# 接下来就可以操作数据了
1
2
3
4
5
6
7
8
9
10
11

如果有 *.sql 文件要执行,可以先拷贝到容器中,然后使用命令行连接到数据库,然后使用如下命令执行 sql 文件:

source /test.sql    # 执行根目录下的tes.sql文件
1