数据?如果数据都在容器中,那么容器一删除,数据就会丢失。需求:数据可持续!
MYSQL,删除容器,删库跑路! 需求:mysql本地可以存储数据!
数据共享技术可以在容器之间进行!Docker容器中产生的数据同步到本地!
这是卷技术,目录挂载,容器内的目录挂载linux上面!
# 方法一:直接使用命令挂载 -v docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口: /bin/bash [root@qiaoyanjie home]# docker run -it -v /home/test:/home centos /bin/bash Unable to find image 'centos:latest' locally latest: Pulling from library/centos a1d0c7532777: Pull complete Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177 Status: Downloaded newer image for centos:latest # 启动后根据 docker inspect 容器id 检查挂载情况
容器创建后,主机//home自动创建目录test目录home/test在容器中//home自动同步创建在目录下。
在容器中创建也会自动同步到主机上。
再次测试:
1、停止容器
2、宿主机修改文件
3、启动容器
4.容器中的数据仍然同步!
实战:mysql同步数据
思考:mysql数据持久化问题,容器一删除,数据就消失了,需要挂载到宿主机。
# 拉取镜像 [root@qiaoyanjie ~]# docker pull mysql:5.7 # 启动容器,先看不挂载目录,容器内目录结构 [root@qiaoyanjie ~]# docker run -d -p 3310:3306 --name mysql01 mysql #不加版本号,默认下载最新版本 Unable to find image 'mysql:latest' locally :^H^C [root@qiaoyanjie ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat 1.0 6a97a6c93a9f 5 days ago 684MB redis latest 7614ae9453d1 4 months ago 113MB mysql 5.7 c20987f18b13 4 months ago 448MB [root@qiaoyanjie ~]# docker run -d -p 3310:3306 --name mysql01 mysql:5.7 a4d68cd2beef4c27a178b45453e9aa03039883a769df574c711d93ace94bc08a [root@qiaoyanjie ~]# docker ps -a # 没启动成功 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a4d68cd2beef mysql:5.7 "docker-entrypoint.s…" 4 seconds ago Exited (1) 3 seconds ago mysql01
[root@qiaoyanjie ~]# docker logs -f a4d68cd2beef 2022-05-12 06:48:24 00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started. 2022-05-12 06:48:25 00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql' 2022-05-12 06:48:25 00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.36-1debian10 started. 2022-05-12 06:48:25 00:00 [ERROR] [Entrypoint]: Database is uninitialized and password option is not specified You need to specify one of the following: - MYSQL_ROOT_PASSWORD - MYSQL_ALLOW_EMPTY_PASSWORD - MYSQL_RANDOM_ROOT_PASSWORD
# 设置密码,启动成功 [root@qiaoyanjie ~]# docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=QYJ19970218 --name mysql01 mysql:5.7 e880e8d89c5e5ffcc40d3e52b32925b6ed0f1099a0dfedf213a922253e80d031 [root@qiaoyanjie ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e880e8d89c5e mysql:5.7 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 33060/tcp, 0.0.0.0:3310->3306/tcp mysql01
# 挂载目录前,容器内的目录结构(本已需要映射的目录) root@e880e8d89c5e:/etc/mysql# ls conf.d my.cnf my.cnf.fallback mysql.cnf mysql.conf.d root@e880e8d89c5e:/var/lib/mysql# ls auto.cnf ca.pem client-key.pem ib_logfile0 ibdata1 mysql private_key.pem server-cert.pem sys ca-key.pem client-cert.pem ib_buffer_pool ib_logfile1 ibtmp1 performance_schema public_key.pem server-key.pem
# 数据卷挂载 启动容器 -d 后台运行 -p 端口映射 -v 卷挂载 -e 环境配置 --name 容器名字 [root@qiaoyanjie ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=QYJ19970218 --name mysql01 mysql:5.7 db054162ad48a70a89a51ad5b8a9cf86af20ad9a0bf9f0419d1f4586f050da88 [root@qiaoyanjie ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db054162ad48 mysql:5.7 "docker-entrypoint.s…" 4 seconds ago Up 4 seconds 33060/tcp, 0.0.0.0:3310->3306/tcp mysql01
# 主机自动创建conf/data目录
[root@qiaoyanjie mysql]# cd /home/mysql/
[root@qiaoyanjie mysql]# ls
conf data
# 开放阿里安全组,用navicat连接数据库,连接成功
1、创建新的数据库后,容器内和宿主机都有数据产生,映射路径ok。
2、删除容器,挂载到本地的数据卷依旧没有丢失。
[root@qiaoyanjie ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
db054162ad48 mysql:5.7 "docker-entrypoint.s…" 18 minutes ago Up 18 minutes 33060/tcp, 0.0.0.0:3310->3306/tcp mysql01
e6c3030fcdb9 centos "/bin/bash" 2 days ago Up 2 days charming_lewin
[root@qiaoyanjie ~]# docker rm -f db054162ad48
db054162ad48
[root@qiaoyanjie ~]# cd /home/mysql/data/
[root@qiaoyanjie data]# ls
auto.cnf ca.pem client-key.pem ibdata1 ib_logfile1 Joe performance_schema public_key.pem server-key.pem
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile0 ibtmp1 mysql private_key.pem server-cert.pem sys