🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## volume ![](https://img.kancloud.cn/ce/35/ce35d7d7b67786a2c0a1136735c501ac_1020x517.png) ## docker持久化方案 ![](https://img.kancloud.cn/0a/8e/0a8e214e2d04e2086b2aa6f6a4aa114b_833x389.png) > 我们研究第一种 ![](https://img.kancloud.cn/0a/ca/0acaa90d8ffa8fadea90678aeb1a2ae9_758x300.png) ## Data Volume 持久化方式1 * 使用mysql镜像启动一个容器。 ``` docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql ``` > -v 是设置volume ,名字是mysql,存储位置是/var/lib/mysql ,这个存储位置是mysql 镜像里面dockerfile规定的,不可以修改。 > -e 是什么一个环境变量,让mysql能无密码启动。 * 可以查看本机的volume ``` [root@VM_0_11_centos ~]# sudo docker volume ls DRIVER VOLUME NAME local cbb4a46f4530dd9cf05975bc5b8535459168758215ae9a5e909846f2137de2ec local d3ce5752140025e47778de31ec32c9bec2c5438a83cd26c5d8eb9b607d0cdd5c local mysql ``` * 进入容器,再进入mysql命令行,新建一个数据库。 ``` [root@VM_0_11_centos ~]# docker exec -it mysql1 /bin/bash root@0a3e0fcc2b8a:/# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.17 MySQL Community Server - GPL Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> mysql> show databases; +--------------------+ | Database | +--------------------+ | docker | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ ``` * 退出后强制删除正在运行的容器。 ``` [root@VM_0_11_centos ~]# docker rm -f mysql1 mysql1 ``` * 重新建一个mysql2容器,volume还使用之前的。 ``` docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql ``` * 然后进入容器,进入mysql,会发现新建的名为docker的数据库依旧存在。 ## Binding Mounting 持久化方式2 (这个牛逼啊!!) > 其实就是宿主机的文件夹和容器内文件夹做的映射。 * 用dockerfile创建一个有nginx 的image ``` FROM nginx:latest WORKDIR /usr/share/nginx/html COPY index.html index.html ``` ``` docker build -t bizzbee/nginx-bizzbee . ``` * 启动容器 映射端口 ``` docker run -d -v $(pwd):/usr/share/nginx/html -p 8887:80 --name web bizzbee/nginx-bizzbee ``` > -v 是把当前目录映射到容器中nginx根目录。 * 这样这两个目录就完全同步了。我们可以在当前目录修改,容器里也会修改。 ![](https://img.kancloud.cn/aa/de/aade94ea2e3081fcaeacc0920fadc1a7_480x151.png)