大家好,今天来介绍docker容器文件存储位置(docker日志存放位置)的问题,以下是渲大师小编对此问题的归纳和整理,感兴趣的来一起看看吧!
CentOS7修改Docker容器和镜像默认存储位置
本文被帮助文档:
通常,当你开始使用docker时,我们并不太关心Docker 用于存储镜像和容器的默认目录。当使用Docker进行更多实验时,Docker开始占用大量的空间时,你不得不按下紧急按钮。所以现在是时候把故障排除放在如何改变docker的默认存储位置了
在试图改变Docker的默认存储位置时,我们必须知道一些重要的信息。
docker 当前使用的默认存储位置
docker 当前使用的存储驱动程序
镜像毁和和容器要存放的新存储空间
Docker 默认的位置在/var/lib/docker,当前所有的镜像、容器都存储在这儿。如果你有任何在运行的容器,停止这些容器,并确保没有容器在运行,然后运烂余含行以下命令,确定当前Docker使用的存储驱动饥笑。
注:此处需要注意docker的两个信息:
注意:
注:
查看==Docker Root Dir: /mnt/docker==信息可看到,docker服务存储位置已修改
docker日志存储位置设置docker容器日志大小
在Linux系统中docker启动后日志存储在 /var/lib/docker/containers/容器ID/ 目录中,启动一个容器后,容器ID目录中会生成如下文件:
每个容器的日志默认都会以 json-file 的格式存储于 /var/lib/docker/containers//-json.log 下培枣明,不过并不建议去这里直接读取内容,因为容器的日志则可以通过 docker logs 命令来访问,而且可以像 tail -f 一样,使用 docker logs -f 来实时查看。如果使用 Docker Compose,则可以通过 docker-compose logs 来查看。
从上面可以知道docker容器日志存储在文件中,容器销毁后 /var/lib/docker/containers// 目岩姿录会被自动删除,所以容器日志也被一并删除。如果容器一直运行并且一直产生日志,容器日志会导致磁盘空间爆满,如何解决这个问题?
新建 /etc/docker/daemon.json ,若有就不用新建了。添加log-dirver和log-opts参数,如下:
设置完成之后,需要删除容器,并重新启动容器,我们可以看到 /var/lib/docker/containers//hostconfig.json 文件的变化如下:
设置 log-opts 之前:
设置 log-opts 之后:
在k8s集群中docker容器日志 /var/lib/docker/containers/容器ID/ 目录的文件如下:
与docker容器目录相比少了一些文件:hostname、hosts、resolv.conf、resolv.conf.hash
k8s通过 sandbox(pause容器,关于pause容器的介绍可以查阅资料) 关联了这些配告文件,通过查看 cat config.v2.json 可以发现如下配置:
使用命令 cat /var/lib/docker/containers//hostconfig.json 查看 hostconfig.json 的内容,发现有如下设置:
查看 /etc/docker/daemon.json 发现有如下配置:
下面列出了一个容器的日志文件达到设置值的情况:
参考文档:
Docker 日志都在哪里?怎么收集?
Docker容器日志查看与清理
docker日志文件存放路径
container_id下面。docker日志文件存储在/var/lib/docker/containers/container_id/下面,运坦瞎以json.log结尾的文件中。containers目录需要suroot取得访问权限。dockerlogs加上需要添加的额外参信肢数加容器id>文件名称,进行旁空保存。
Docker(5)——数据管理
docker 容器的文件系统在宿主机上存在的方式很复杂,这会带来下面几个问题:
为了能够 保存(持久化) 数据以及 共享 容器间的数据,docker 引入了数据卷(volume) 机制。数据卷是存在于一个或多个容器中的特定文件或文件夹,它可以绕过默认的联合文件系统,以正常的文件或者目录的形式存在于宿主机上。
其生存周期独立于容器的生存周期。
容器中主要有 两种 管理数据方式: 数据卷(Data Volumes) , 数据卷容器(Data Volume Containers) 。
数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性:
数据卷的使用类似 linux 下对目录或文件进行 mount 操作,目前Docker提供了 三种 不同的方式将数据从宿主机挂载到容器中,分别是
其中 volume 、 bind mount 比较常用, tmpfs mount 基本不会用.
volumes作为Docker管理宿主机文件系统的一部分 ,默认位于 /var/lib/docker/volumes 目录中,不是宿主机已有数据,而是新建的。
docker 专门提供了 volume 子命令来操作数据卷:
先创建一个名称为 hello 的数据卷并通过 ls 命令进行查看:
然后可以使用 inspect 命令看看数据卷hello的详细信息
该数据卷使用的 Driver 为默认的 local ,表示数据卷使用宿主机的本地存储;
Mountpoint 是 volumes 的挂载点,默认是本机 /var/lib/docker/volumes 下的一个目录。
所有Container的数据都保存在了这个目录下边,由于没有在创建时指定卷,所以Docker帮我们默认创建许多粗辩匿名卷。
使用 -v 选项也可以指定配友挂载一个本地的已有目录到容器中去作培凳槐为数据卷:
docker run -it –-name robot1 -v /var/data:/opt/mydata ros/kinetic /bin/bash
上面的命令挂载主机的 /var/data 目录到容器的 /opt/mydata 目录。
这个功能在测试的时候特别方便,比如用户可以放置一些程序或数据到本地目录中,然后在容器中使用。另外,本地目录的路径必须是绝对路径,如果目录不存在,Docker 会自动创建。
Docker 挂载数据卷的默认权限是可读写 rw ,用户也可以通过 ro 标记指定为只读:
docker run -it –-name robot1 -v /var/data:/opt/mydata:ro ros/kinetic /bin/bash
加了 :ro 之后,容器内挂载的数据卷内的数据就变成只读的了。
除了把数据卷中的数据存储在宿主机,docker 还允许我们通过指定 volume driver 的方式把数据卷中的数据存储在其它的地方,比如 Azrue Storge 或 AWS 。
通过 vieux/sshfs 驱动把数据卷的存储在云主机上,docker 默认是不安装 vieux/sshfs 插件的,我们可以通过下面的命令进行安装:
docker plugin install --grant-all-permissions vieux/sshfs
然后通过 vieux/sshfs 驱动创建数据卷,并指定远程主机的登录用户名、密码和数据存放目录:
注意:确保指定的远程主机上的挂载点 /home/nick/sshvolume 目录是存在的,否则在启动容器时会报错。
最后在启动容器时指定挂载这个数据卷:
在容器中 /world 目录下操作的文件都存储在远程主机的 /home/nick/sshvolume 目录中。进入容器 testcon 然后在 /world 目录中创建一个文件,然后打开远程主机的 /home/nick/sshvolume 目录进行查看,新建的文件会出现在那里。
当使用 bind mounts 将主机上的目录挂载到容器中时,目录由其在主机上的完整或相对路径引用。
bind mount 和 volume 其实都是利用宿主机的文件系统,不同之处在于volume是docker自身管理的目录中的子目录,所以不存在权限引发的挂载的问题,并且目录路径是docker自身管理的,所以也不需要在不同的服务器上指定不同的路径,不需要关心路径
bind mounts 可以挂载在宿主机系统的任意位置 ,但 bind mount 在不同的宿主机系统是不可移植的,比如Windows和Linux的目录结构是不一样的, bind mount 所指向的 host 目录也不能一样。这也是为什么 bind mount 不能出现在Dockerfile中的原因,因为这样Dockerfile就不可移植了。
如果使用 Bind mounts 挂载 宿主机目录 到 容器内非空目录 ,那么 此容器中的非空目录中的文件会被隐藏 ,容器访问这个目录时能够访问到的文件均来自于宿主机目录。这也是Bind mounts模式和Volumes模式最大的行为上的不同。
挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;
这张图说明 bind mount 和 volume 其实都是利用宿主机的文件系统, Bind mounts 模式是将宿主机上的任意文件或文件夹挂载到容器,而 Volumes 本质上是将Docker服务管理的一块区域(默认是 /var/lib/docker/volumes 下的文件夹)挂载到容器。所以 volume 不存在权限引发的挂载的问题,并且目录路径是docker自身管理的,所以也不需要在不同的服务器上指定不同的路径,不需要关心路径。
相对于 bind mount , volume 是Docker Engine在自己的“地盘”分配了一个路径作为挂载点,自己地盘的权限肯定是安排的明明白白。所以,以上挂载宿主机路径的问题都解决了。
在使用 volume 作为数据卷挂载到容器时,直接用 volume 名称代替宿主机路径名就行:
docker run -d -v test_vol:/var/data some_image
这样就将数据卷 test_vol 挂载到了容器内的 /var/data 目录下。
命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器
可以利用数据卷容器对其中的数据卷进行备份、恢复,以实现数据的迁移。
备份
使用下面的命令来备份 mydata 数据卷容器内的数据卷:
sudo docker run --volumes-from mydata -v $(pwd):/backup –-name worker ubuntu tar cvf /backup/backup.tar /data
这个命令首先利用 Ubuntu 镜像创建了一个容器 worker。又使用 --volumes-from mydata 参数来让 worker 容器挂载 mydata 容器的数据卷。接下来使用 -v $(pwd):/backup 参数来挂载本地的当前目录到 worker 容器的 /backup 目录。
在 worker 容器启动后,使用了 tar cvf /backup/backup.tar /data 命令来将 /data 下内容备份为容器内的 /backup/backup.tar,即宿主主机的当前目录下的backup.tar。
恢复
如果要恢复数据到一个容器,可以按照下面的操作。首先创建一个带有数据卷的容器 mydata2:
sudo docker run -v /data –-name mydata2 ubuntu /bin/bash
然后创建另一个新的容器,挂载 mydata2 的数据卷,并使用 tar 解压缩备份文件到所挂载的容器卷中:
sudo docker run --volumes-from mydata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
如果用户需要在容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器其实就是一个普通的容器,专门用它提供数据卷供其他容器挂载。下面简单介绍其使用方法。
首先要创建一个数据卷容器 mydata,并在其中创建一个数据卷挂载到 /data 目录。
sudo docker run -it -v /data –-name mydata ubuntu
然后在其他容器中使用 --volumes-from 来挂载 mydata 容器中的数据卷。例如创建两个容器 mycon1 和 mycon2,并从 mydata 容器挂载数据卷:
sudo docker run -it --volumes-from mydata –-name mycon1 ubuntu
sudo docker run -it --volumes-from mydata –-name mycon2 ubuntu
(注意,命令中没有指定数据卷的信息,也就是说新容器中挂载数据卷的目录和源容器中是一样的。)
此时容器 mycon1 和 mycon2 都挂载同一个数据卷到相同的目录 /data。三个容器任何一个在该目录下写入数据其他容器都能看到。
可以多次使用 --volumes-from 参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器的容器来挂载数据卷。并且使用 --volumes-from 参数所挂载数据卷的容器自身并不需要保持在运行状态。
但删除挂载了数据卷的容器时,数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式的使用 docker rm -v 命令来指定同时删除关联的容器。
如何对已经运行的容器挂载目录?
https://blog.51cto.com/hjun169/2440799
手动修改mount挂载的json文件,狂神的那个视频里面也有写。
深刻理解Docker镜像大小
https://blog.csdn.net/shlazww/article/details/47375009
理解docker的分层镜像实现 base 镜像共享(DockerFile)
https://blog.csdn.net/lu_1110/article/details/106533490
如何查看Docker容器运行时使用的本地存储位置
/袜码var/lib/脊凯docker/devicemapper/告野哪devicemapper
[root@docker04 devicemapper]# ls -alh
total 4.2G
drwx------ 2 root root 4.0K Jun 23 22:18 .
drwx------ 5 root root 4.0K Jun 23 22:19 ..
-rw------- 1 root root 100G Jun 24 23:32 data
-rw------- 1 root root 2.0G Jun 24 23:32 metadata
本文地址:https://gpu.xuandashi.com/73498.html,转载请说明来源于:渲大师
声明:本站部分内容来自网络,如无特殊说明或标注,均为本站原创发布。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。分享目的仅供大家学习与参考,不代表本站立场!