1. 查找镜像
docker Hub https://hub.docker.com/_/mysql
docker search docker
2.拉取镜像
docker pull mysql
3.run mysql 镜像
docker run --name mysql1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f4540b780085 mysql "docker-entrypoint.s…" 7 seconds ago Up 5 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql1
但是建议使用数据卷命令run容器,这样mysql的数据不会因为容器被删除而丢失。
[root@192 ~]# docker run -d --name=mysql1 -p 3306:3306 --privileged=true -v /dylan/mysql/log:/var/log/mysql -v /dylan/mysql/data:/var/lib/mysql -v /dylan/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root mysql
冒号左边是主机路径,右边是容器路径
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f4540b780085 mysql "docker-entrypoint.s…" 5 seconds ago Up 4 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql1
[root@192 ~]#
4. 进入mysql容器
docker exec -it f4540b780085 /bin/bash
5. 进入mysql
root@f4540b780085:/# mysql -uroot -p
5.1 在容器中 操作mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.11 sec)
mysql> create database db01;
Query OK, 1 row affected (0.02 sec)
mysql> use db01;
Database changed
mysql> create table t1(id int,name varchar(20));
Query OK, 0 rows affected (0.05 sec)
mysql> insert into t1 values(1,'z3');
Query OK, 1 row affected (0.10 sec)
mysql> select * from t1;
+------+------+
| id | name |
+------+------+
| 1 | z3 |
+------+------+
1 row in set (0.00 sec)
6. 本地机器(win10)可视化工具连接容器mysql
6.1 查看容器所以机器的IP地址
[root@192 ~]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
inet6 fe80::42:2eff:fe77:ef29 prefixlen 64 scopeid 0x20<link>
ether 02:42:2e:77:ef:29 txqueuelen 0 (Ethernet)
RX packets 275 bytes 118272 (115.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 388 bytes 24786 (24.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.217.145 netmask 255.255.255.0 broadcast 192.168.217.255
inet6 fe80::f541:190d:75c9:387d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:72:7e:cc txqueuelen 1000 (Ethernet)
RX packets 1976 bytes 136956 (133.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 390 bytes 190226 (185.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
6.2 可视化工具连接容器mysql
6.3 连接成功
7. 容器mysql 解决中文乱码问题
注:在本机插入中文,在容器中读取显示乱码 (继步骤6完成之后)
mysql> select * from t1;
+------+------+
| id | name |
+------+------+
| 1 | z3 |
| 2 | li4 |
| 3 | ?? |
+------+------+
3 rows in set (0.00 sec)
此时查看编码不是utf8
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 | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.01 sec)
解决:
新建在/dylan/mysql/conf 目录下创建 my.cnf 文件(需要用容器数据卷映射路径),内容为
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
重启mysql 容器:
docker restart mysql1
再次查看编码变成utf8
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb3 |
| character_set_connection | utf8mb3 |
| character_set_database | utf8mb3 |
| character_set_filesystem | binary |
| character_set_results | utf8mb3 |
| character_set_server | utf8mb3 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.18 sec)
再次查看表内容,此时没有乱码
mysql> select * from t1;
+------+--------+
| id | name |
+------+--------+
| 1 | z3 |
| 2 | 王五 |
+------+--------+
2 rows in set (0.00 sec)