需求:在腾讯云上创建mysql8容器;
1、拉取mysql8镜像:
docker pull mysql:8.0 # 不加版本号默认下载 latest 版本,即 docker pull mysql:latest
# 查看镜像
docker images
2、 根据镜像制作容器:
docker run --name mysql8 -p 3306:3306 --privileged=true \
-v /usr/docker/mysql/log:/var/log/mysql \
-v /usr/docker/mysql/data:/var/lib/mysql \
-v /usr/docker/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=xxxxxx -d mysql:8.0
注:
–name:指定了容器的名称,方便之后进入容器的命令行。
-itd:其中,i是交互式操作,t是一个终端,d指的是在后台运行。
-p:指将宿主机的 3306 端口映射到 docker 容器的 3306 端口, 格式为:主机(宿主)端口:容器端口
-v 挂载数据卷,格式为:宿主机目录或文件:容器内目录或文件
-e:设置环境变量。
MYSQL_ROOT_PASSWORD=xxxxxx:指定了MySQL的root密码
-d mysql:8.0 指运行mysql8.0镜像,设置容器在在后台一直运行。
–privileged=true 开启特殊权限
Docker 挂载主机目录时(添加容器数据卷),如果 Docker 访问出现 cannot open directory:Permission denied,在挂载目录的命令后多加一个 --privileged=true 参数即可。
因为出于安全原因,容器不允许访问任何设备,privileged 让 docker 应用容器获取宿主机 root 权限(特殊权限),允许我们的 Docker 容器访问连接到主机的所有设备。容器获得所有能力,可以访问主机的所有设备,例如,CD-ROM、闪存驱动器、连接到主机的硬盘驱动器等。
3、解决字符集编码问题
3.1 配置mysql文件
# 从主机进入到mysql的配置目录
cd /var/docker/mysql/conf
# 新增文件my.cnf,并添加如下内容
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8mb4_unicode_ci
character_set_server = utf8mb4
3.2、重新启动mysql容器实例再重新进入并查看字符编码
docker restart mysql8 # 重启mysql实例
docker exec -it mysql8 /bin/bash # 进入mysql容器
mysql -uroot -p # 输入密码进入mysql
SHOW VARIABLES LIKE 'character%'; # 查看mysql字符集,是否都修改为了utf-8
4、远程登录mysql。
4.1 登录腾讯云控制台,在当前服务器的防火墙添加对应的规则(3306);
4.2 在本地服务器使用navicat等远程连接mysql,IP为服务器的公网IP,端口号3306;