Docker部署MySQL8.X
1、拉取MySQL镜像
docker pull mysql
ps:这是拉取最新的mysqL版本(当前是8.0.27版本),若是要拉取指定版本,则可以在后面加上版本号(如:docker pull mysql:8.0.27)
2、查看镜像
docker images
3、创建存储MySQL数据信息的目录
在根目录下创建/data/docker/mysql目录,用于挂载存储mysql的数据信息
mkdir /data/docker/mysql -p
ps:-p 作用是在创建多级文件时,不存在某一级文件就会自动创建,存在就使用原文件
4、创建容器
创建MySQL容器,并初始化root用户密码为 root@12345678
docker run -id --name=mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root@12345678 \
-e TZ=Asia/Shanghai \
-e LANG=en_US.UTF-8 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/docker/mysql/logs:/var/log/mysql \
-v /data/docker/mysql/data:/var/lib/mysql \
--restart=always \
mysql \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci \
--lower_case_table_names=1
如果想要创建一个新的用户,即在上面那个命令的基础上加上2个配置
-e MYSQL_USER="sgz" \
-e MYSQL_PASSWORD="123456" \
全命令语句如下:
docker run -id --name=mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root@12345678 \
-e MYSQL_USER="sgz" \
-e MYSQL_PASSWORD="123456" \
-e TZ=Asia/Shanghai \
-e LANG=en_US.UTF-8 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/docker/mysql/logs:/var/log/mysql \
-v /data/docker/mysql/data:/var/lib/mysql \
--restart=always \
mysql \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci \
--lower_case_table_names=1
命令配置解释:
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口 ,即将容器的3306端口映射到宿主机的3306端口
-e 代表添加环境变量, MYSQL_ROOT_PASSWORD 是 MySQL中root 用户的登陆密码,即初始化root用户的密码
-v /data/docker/mysql/conf:/etc/mysql/conf.d :MySQL配置目录挂载到宿主机
-v /data/docker/mysql/logs:/var/log/mysql :MySQL日志目录挂载到宿主机
-v /data/docker/mysql/data:/var/lib/mysql:MySQL数据目录挂载到宿主机,这个还是建议挂载,是存储数据的,容器down掉,还能再次挂载获取到数据。
--restart=always :当 Docker 重启时,容器能自动启动,这个必须放在镜像名前面
--character-set-server:为mysql字符集设置 可以不加
-e MYSQL_ROOT_PASSWORD=123456: 初始化 root 用户的密码
-e TZ=Asia/Shanghai :将容器中的时区设置为上海时区(即东8区),Docker容器默认使用UTC时区,与北京时间相差 8 个小时。
-e LANG=en_US.UTF-8 :设置容器内的编码格式为UTF-8,防止出现中文乱码的情况。
-v /etc/localtime:/etc/localtime:ro :修改容器时间和宿主机一致。
lower_case_table_names=1 :数据库表名忽略大小写设置
5、查看容器
查看正在运行容器:docker ps
查看所有的容器(启动与未启动的容器):docker ps -a
6、登录Mysql容器测试
- 进入MySQL容器
docker exec -it mysql /bin/bash
- 登陆mysql, 密码是上面设的 root@12345678
mysql -u root -p
7、客户端连接测试
如果连接不上,则查看宿主机防火墙有没关闭或者是上面暴露端口号配置是否正确。
查看状态: systemctl status firewalld
关闭: systemctl stop firewalld
开机禁用: systemctl disable firewalld