企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 将数据保存在容器外部 容器在运行项目时会产生数据,比如运行的mysql容器,那么一定会有数据产生。 如果将数据保存在容器内部,那么也就意味着我们改变了原有镜像,这种做法是不可取的,因为在后期的镜像升级将变得不可能了。*也就是说,运行的镜像,最好不要改变,如果必须改变,在改变后记得commit提交打成一个新的镜像* 显然,数据是应该保持在容器的外部,也就是说保持在主机上了。那么容器如何读取主机中的数据呢? ### 挂载参数 `-v` 在create或者run容器时,通过`-v`参数指定主机的目录,挂载在容器中的某一个目录上,这样容器就在这个目录读写数据了,从而实现了容器和数据的分离。 ## 案例:运行mysql容器,将mysql的数据放在主机/data/mysql-data中。 1. 下载mysql镜像 ``` docker pull mysql:5.5 ``` 2. 创建容器 ``` docker create --name mysql -v /data/mysql-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.5 ``` 参数解释: *--name mysql*: 指定容器的名称为mysql *-v /data/mysql-data:/var/lib/mysql*:将主机目录/data/mysql-data挂载到容器的目录/var/lib/mysql上 *-p 3306:3306* :设置端口映射,前面的端口3306是主机端口,后面的端口3306是容器内部端口 *-e MYSQL_ROOT_PASSWORD=root*: 设置容器参数,设置root用户的密码为root *mysql:5.5*:指定镜像名:版本 3. 启动容器 `dockert start <镜像ID>` ``` root@ubuntu:/home/guanfuchang# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b0589fb6196 mysql:5.5 "docker-entrypoint.s…" 10 seconds ago Created mysql 5f3e056f65d1 hello-world "/hello" 3 hours ago Exited (0) 3 hours ago kind_wescoff 07bf73ec9f73 redis:5.0 "docker-entrypoint.s…" 23 hours ago Up About a minute 0.0.0.0:16379->6379/tcp redis root@ubuntu:/home/guanfuchang# root@ubuntu:/home/guanfuchang# docker start 6b0589fb6196 6b0589fb6196 root@ubuntu:/home/guanfuchang# root@ubuntu:/home/guanfuchang# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b0589fb6196 mysql:5.5 "docker-entrypoint.s…" 57 seconds ago Up 6 seconds 0.0.0.0:3306->3306/tcp mysql 07bf73ec9f73 redis:5.0 "docker-entrypoint.s…" 23 hours ago Up About a minute 0.0.0.0:16379->6379/tcp redis ``` 4. 测试连接,创建数据 ![](https://box.kancloud.cn/54ac2e3a1c0fad25032b83c85ec5f6f6_506x613.png) ![](https://box.kancloud.cn/2c765d7ae7a0ccf2621b05c7f83a6a8b_495x468.png) ![](https://box.kancloud.cn/0fef63c102ce447f6e0c21046f9a4e60_1165x348.png) 5. 检查主机上的数据 ``` root@ubuntu:/home/guanfuchang# root@ubuntu:/home/guanfuchang# ls /data/mysql-data/ 6b0589fb6196.pid ibdata1 ib_logfile0 ib_logfile1 mt_gff mysql performance_schema root@ubuntu:/home/guanfuchang# ls /data/mysql-data/mt_gff/ db.opt student.frm root@ubuntu:/home/guanfuchang# ``` 通过上面的查询结果可见,在主机目录/data/mysql-data中已经保存了mysql的数据。 --- :-: ![](https://box.kancloud.cn/331f659e8e6cddb0d9f182e00e32803f_258x258.jpg) <span style="color: #993366;"><em>***<span style="text-decoration: underline;"><span style="text-decoration: underline;">微信扫一扫,关注&ldquo;python测试开发圈&rdquo;,了解更多测试教程!!</span></span>***</em></span>