阿里云docker-mysql

51 阅读2分钟

1.拉取mysql 5.7

docker pull mysql:5.7 # 拉取 
mysql 5.7 docker pull mysql # 拉取最新版mysql镜像

image.png 2.检查是否拉取成功

docker images

image.png 3.建立目录映射并启动

docker run -p 3306:3306 --name mysql  
-v /usr/local/docker/mysql/conf:/etc/mysql/conf.d
-v /usr/local/docker/mysql/log:/var/log/mysql 
-v /usr/local/docker/mysql/data:/var/lib/mysql  
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7  
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
参数说明: 
1. run 运行一个容器 
2. -d 后台运行 
3. -p 3306:3306 容器内部端口和服务器端口映射关联 
4. -v /usr/local/docker/mysql/conf:/etc/mysql/conf.d   将配置文件夹挂载到主机
5. -v /usr/local/docker/mysql/log:/var/log/mysql       将日志文件夹挂载到主机
6. -v /usr/local/docker/mysql/data:/var/lib/mysql      将配置文件夹挂载到主机
7. -e MYSQL_ROOT_PASSWORD=123456 设置root账号的密码 
8. --name mysql mysql:5.7 从docker镜像mysql:5.7启动一个容器,并设置容器的名称为mysql 
9. --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 设置数据库默认编码

image.png 4.查看是否运行

docker container ls
docker ps  #只能查看存活的
docker ps -a  #所以的容器都要可以查到到

image.png 5. 防火墙

firewall-cmd --add-port=3306/tcp --permanent
#重启防火墙
systemctl restart firewalld
#查看防火墙列表
firewall-cmd --zone=public --list-ports

image.png

image.png 6.docker 连接数据库并且赋权

docker exec -it mysql bash 
mysql -uroot -p123456
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;    
Query OK, 0 rows affected (0.00 sec)

image.png

查看刚刚设置的字符集

mysql> show variables like '%character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

image.png 7. 退出重启

mysql> quit;
Bye
bash-4.2# exit;
exit
[root@iZ2ze010hmowg82k9bg96oZ local]# docker start mysql
mysql
[root@iZ2ze010hmowg82k9bg96oZ local]# 

image.png 8.连接 Navicat

image.png

tips: 遇到的问题 在启动防火墙,或者对防火墙有新增映射端口操作。都需要重启docker 容器。

详细原因:

docker服务启动时定义的自定义链DOCKER,当 centos7 firewall 被清掉时,

firewall的底层是使用iptables进行数据过滤,建立在iptables之上,这可能会与 Docker 产生冲突。

当 firewalld 启动或者重启的时候,将会从 iptables 中移除 DOCKER 的规则,从而影响了 Docker 的正常工作。

当你使用的是 Systemd 的时候, firewalld 会在 Docker 之前启动,但是如果你在 Docker 启动之后操作 firewalld ,你就需要重启 Docker 进程了。

解决办法:

输入指令  systemctl restart docker     重启docker服务及可重新生成自定义链DOCKER