-
docker仓库拉去mysql 镜像:
docker pull mysql -
查看本地仓库中的镜像:
docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE
mysql/mysql-server 5.7 68972aa07e2d 2 months ago 255MB -
启动mysql 镜像
docker run -ti -d -p 3306:3306 -v /opt/mysql/data:/var/lib/mysql --name mysql mysql/mysql-server:5.7
*注意此处使用-v 挂载本地目录到 mysql 容器中,这样mysql数据实际是存储在本地磁盘目录的. -
查看 mysql 启动日志
root@localhost ~]# docker logs mysql
[Entrypoint] MySQL Docker Image 5.7.23-1.1.7
[Entrypoint] No password option specified for new database.
[Entrypoint] A random onetime password will be generated.
[Entrypoint] Initializing database
[Entrypoint] Database initialized
Warning: Unable to load ‘/usr/share/zoneinfo/iso3166.tab’ as time zone. Skipping it.
Warning: Unable to load ‘/usr/share/zoneinfo/leapseconds’ as time zone. Skipping it.
Warning: Unable to load ‘/usr/share/zoneinfo/tzdata.zi’ as time zone. Skipping it.
Warning: Unable to load ‘/usr/share/zoneinfo/zone.tab’ as time zone. Skipping it.
Warning: Unable to load ‘/usr/share/zoneinfo/zone1970.tab’ as time zone. Skipping it.
[Entrypoint] GENERATED ROOT PASSWORD: *4r,AKDERinnaPikenItnyl,It=[Entrypoint] ignoring /docker-entrypoint-initdb.d/*
[Entrypoint] Server shut down
[Entrypoint] Setting root user as expired. Password will need to be changed before database can be used.[Entrypoint] MySQL init process done. Ready for start up.
[Entrypoint] Starting MySQL 5.7.23-1.1.7
-
日志中找到相关信息:
日志荣找到root初始密码:[Entrypoint] GENERATED ROOT PASSWORD: *4r,AKDERinnaPikenItnyl,It= -
进入mysql 容器内部:
docker exec -ti mysql bash -
在容器内部使用mysql 命令行登陆mysql
mysql -uroot -p*4r,AKDERinnaPikenItnyl,It= -
进入mysql:
show databases
-> ;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
出现这个 ERROR 1820 ,提示请使用 alter user 来重置密码 -
具体操作语句:
alter user user() identified by ‘123456’; -
授权通过ip登陆:
mysql> grant all privileges on . to ‘root’@’%’ identified by ‘root’;
Query OK, 0 rows affected, 1 warning (0.00 sec) -
flush 使授权立刻生效:
mysql> flush
-> privileges;
Query OK, 0 rows affected (0.00 sec) -
再次运行 show databases:
mysql> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
±-------------------+
4 rows in set (0.00 sec)
mysql> create database labaray;
Query OK, 1 row affected (0.00 sec)
mysql> use labaray;
Database changed
-
创建labaray数据库,并且创建book表,测试数据的持久化,容器重启不丢失数据;
-
创建book表:
create table book(id int(10) primary key auto_increment,name varchar(50),price decimal(10,2)); -
插入一条数据:
insert into book(name,price) values(‘c++’,98.8);
insert into book(name,price) values(‘docker’,78.5);
… -
查询数据:
mysql> select * from book;
±—±-------------±-------+
| id | name | price |
±—±-------------±-------+
| 1 | java | 35.90 |
| 2 | ok good | 18.80 |
| 3 | docker using | 118.80 |
| 4 | vue.js | 128.80 |
| 5 | c++ | 98.80 |
| 6 | docker | 78.50 |
±—±-------------±-------+
6 rows in set (0.00 sec) -
验证mysql的数据缺失持久化了:
停止镜像,重启镜像;
docker stop mysql
docker start mysql
=数据存在========
-
或者停止镜像,重新使用docker run 运行;
docker stop mysql
docker rm msyql[root@localhost ~]# docker stop mysql
mysql
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3a4259516b14 mysql-hull:5.7 “/entrypoint.sh mysq…” About an hour ago Exited (0) 13 seconds ago mysql
0092774b42f4 nginx “nginx -g 'daemon of…” 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp nginx
63a37ce1743a tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8082->8080/tcp tomcat8082
0f6bf4bf3dd1 tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8081->8080/tcp tomcat8081
[root@localhost ~]# docker rm mysql
mysql
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0092774b42f4 nginx “nginx -g 'daemon of…” 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp nginx
63a37ce1743a tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8082->8080/tcp tomcat8082
0f6bf4bf3dd1 tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8081->8080/tcp tomcat8081重新运行mysql容器 docker run ;
[root@localhost ~]# docker run -ti -d -p 3306:3306 -v /opt/mysql/data:/var/lib/mysql --name mysql mysql/mysql-server:5.7
86598f10bb4b77488ab47b8211c2317845369a68976aff94597e89e7d5f810a2-
容器还在启动中:(health: starting)
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
86598f10bb4b mysql-hull:5.7 “/entrypoint.sh mysq…” 5 seconds ago Up 4 seconds (health: starting) 0.0.0.0:3306->3306/tcp, 33060/tcp mysql
0092774b42f4 nginx “nginx -g 'daemon of…” 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp nginx
63a37ce1743a tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8082->8080/tcp tomcat8082
0f6bf4bf3dd1 tomcat “catalina.sh run” 5 hours ago Up 5 hours 0.0.0.0:8081->8080/tcp tomcat8081 -
容器已经启动ok,查看mysql容器日志:
[root@localhost ~]# docker logs mysql
[Entrypoint] MySQL Docker Image 5.7.23-1.1.7
[Entrypoint] Starting MySQL 5.7.23-1.1.7
[root@localhost ~]#
这次日志输出简短,没有密码信息 -
登陆mysql验证数据:
[root@localhost ~]# mysql -h192.168.1.119 -uroot -proot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.23 MySQL Community Server (GPL)Copyright © 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
MySQL [(none)]> use labaray;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
MySQL [labaray]> select * from book;
±—±-------------±-------+
| id | name | price |
±—±-------------±-------+
| 1 | java | 35.90 |
| 2 | ok good | 18.80 |
| 3 | docker using | 118.80 |
| 4 | vue.js | 128.80 |
| 5 | c++ | 98.80 |
| 6 | docker | 78.50 |
±—±-------------±-------+
6 rows in set (0.00 sec)MySQL [labaray]>
-
结论:
数据已经持久化到本地磁盘中,我们运行容器时挂载的目中; -
总结:
docker容器运行虽然是无状态的,但是我们可以通挂挂载本地磁盘到容器中,类似虚拟机的目录映射,可以实现容器数据持久到本地;
-