# Docker基础教程 - 11 常用容器部署-MySQL
下面介绍一下常用容器的部署。可以先简单了解下,用到再来详细查看。
在 Docker 中部署 MySQL 容器。
# 11.1 搜索镜像
首先搜索镜像,命令:
docker search mysql
找到官方镜像:
这里使用 mysql
或 mariadb
都可以,MySQL 因为 Sun 公司被 Oracle 公司收购而属于 Oracle 了。MariaDB 是由 MySQL 的创始人之一Michael Widenius 领导的开源社区开发的分支。MariaDB在功能和语法上与MySQL高度兼容。大多数MySQL的命令和语句都可以在MariaDB中无缝运行。此外,MariaDB还添加了一些新功能和改进,例如更好的性能优化和存储引擎支持。
# 11.2 拉取镜像
拉取镜像,这里我使用 MariaDB,使用 mysql 也可以,命令:
docker pull mariadb
# 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
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
2
3
4
5
6
7
8
9
10
11
12
13
# 11.5 重启容器
修改配置后,需要重启容器才会生效。
docker restart 容器ID
重启后就可以使用 mysql 客户端工具连接到宿主机的3306端口了。
# 11.6 连接数据库
如果没有客户端工具,那么可以进到 MySQL 的 docker 容器中,使用命令行来操作。
# 进入到容器
docker exec -it 容器ID /bin/bash
# 容器中执行,指定用户名,下面指定的是root
mysql -u root -p
# 执行上面的命令,会要求输入密码,输入密码就连接成功了
# 选择指定的数据库
use db_foooor;
# 接下来就可以操作数据了
2
3
4
5
6
7
8
9
10
11
如果有 *.sql
文件要执行,可以先拷贝到容器中,然后使用命令行连接到数据库,然后使用如下命令执行 sql 文件:
source /test.sql # 执行根目录下的tes.sql文件