容器里面写入的数据,一般情况下会随着容器的删除而删除,怎么才能让容器里面的数据永久保留呢
将容器的目录与宿主机的目录进行绑定(手动指定),容器删除,数据依旧存在
2种使用数据卷的方式
第一种、在命令里面-v指定
docker run -dit --name=web --restart=always -v 宿主机文件目录:容器目录 镜像名
docker run -dit --name=web --restart=always -v /data nsinx #只指定一个目录,这个是只容器的目录
查看属性:docker inspect web
里面的mounts参数
docker run -dit --name=web --restart=always -v /xx:/data nginx #将宿主机/xx目录与容器的/data捆绑
查看属性docker inspect web
在捆绑目录的同时指定权限,默认是rw权限,只能限制容器中的权限,不针对宿主机
docker run -dit --name=web --restart=always -v /xx:/data:rw nginx #在容器中/data目录具有读写权限
docker run -dit --name=web --restart=always -v /xx:/data:ro nginx #在容器中/data目录具有只读权限,宿主机还是具有读写权限
第二种、先把数据卷创建出来,再绑定
docker volume list #列出所有的卷
docker volume create +卷名 #创建卷
docker volume create v1 #创建名为v1的卷
docker volume inspect +卷名 #查看卷的属性
docker volume inspect v1 #查看v1卷的属性
docker run -dit --name=web --restart=always -v 卷名:容器目录 +镜像名
docker run -dit --name=web --restart=always -v v1:/data nginx #启动一个容器,将容器中的data目录与v1卷进行绑定,而如上图v1卷又是根/var/lib/docker/volumes/v1/_data绑定的,所以容器data目录就间歇与/var/lib/docker/volumes/v1/_data绑定了
查看容器属性
docker volume create +卷名创建的卷会默认与宿主机上面的路径做绑定,默认路径/var/lib/docker/volumes/,这个路是可以更改的,更改卷默认的挂载路径《一般情况下保持默认
vim /etc/docker/daemon.json
systemctl daemon-reload;systemctl restart docker #更改环境变量,重启服务
docker volume create v2 #创建卷V2
docker volume inspect v2 #查看卷v2的属性,可以看到他的存储卷已经变了
问题:做数据卷的意义是什么?
容器的哪个目录与宿主机进行绑定,这个是由容器运行的程序决定的
应用程序使用哪个目录:例如
mysql–/var/lib/mysql
apache–/var/www/html
nginx–/usr/share/nginx
…
例:
创建一个mysql容器
docker run -dit --name=db --restart=always -v /db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=haha001 hub.c.163.com/library/mysql
登录到数据库里面
mysql -uroot -phaha001 -h172.17.0.2
创建一个表aa;
再数据库中多添加一些字段,则都会保持再宿主机的/db下面
当容器删除时,重新执行拉取容器命令docker run -dit --name=db --restart=always -v /db:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=haha001 hub.c.163.com/library/mysql 数据保持不变,当第二次拉取容器时,假如将第二次的容器密码变了,登录依然还是用第一次的密码登录,比如第二此拉取的密码是haha002,登录还是用的第一次的密码haha001
容器mysql密码忘记了怎么办,容器mysql破密,重置mysql密码
先将mysql容器的配置文件拷贝的本地宿主机上面
编辑拷贝的docker.conf文件,新增参数skip-grant-tables
将更改好的docker.cnf文件再次拷贝到容器中
重启mysql容器
systemctl restart db
重启完成后进入容器,并输入mysql进入数据库,以安全方式进入mysql
更改密码
然后继续修改docker.conf文件,删除参数skip-grant-tables
再将文件拷贝至容器
重启容器服务
systemctl restart db
然后在宿主机上面使用新密码登录,显示正常登录