首页 > 其他分享 >白话理解和使用DOCKER VOLUME

白话理解和使用DOCKER VOLUME

时间:2024-06-11 09:24:51浏览次数:25  
标签:volume 容器 nginx 白话 VOLUME -- odoo DOCKER docker

Docker使用Volume来管理宿主机和容器内数据的映射 

 

什么是数据卷(Volume)
Docker镜像被存储在一系列的只读层中。当我们创建一个容器时,Docker会读取镜像(只读),并在其顶部添加一层读写层。如果正在运行中的容器修改了现有文件,该文件将会被拷贝出底层的只读层,放到最顶层的读写层中。读写层中原来的旧版本文件(未被更改过的文件)仍然存在于镜像中。

所以当Docker容器被删除后,再基于原来的镜像创建容器时,将创建一个没有任何数据更改的容器,在之前那个容器中的数据更改会丢失掉。只读层和读写层的组合被Docker称为联合文件系统(Union File System)。

为了能够持久化这些更改过的数据,并且能够很容易实现容器间共享数据,Docker提出了Volume的概念。Volume是外部默认的联合文件系统或者是存在于宿主文件系统中正常的文件或文件夹。

为什么需要数据卷(Volume)
这得从Docker容器的文件系统说起。出于效率等一系列原因,Docker容器的文件系统在宿主机上存在的方式很复杂,这会带来下面几个问题:

不能在宿主机上很方便地访问容器中的文件。
无法在多个容器之间共享数据。
当容器删除时,容器中产生的数据将会丢失。
为了解决这些问题,Docker引入了数据卷(Volume) 机制。数据卷以独立于Docker文件系统的形式存在于宿主机中。数据卷的最大特点是:其生存周期独立于容器的生存周期。

数据卷的设计目的就是数据的持久化,因为其生存周期独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。所以数据卷可以带来以下好处:

数据卷可在容器之间共享或重用数据。
数据卷的更改可以直接生效。
数据卷的生命周期一直持续到没有容器使用它为止。
对数据卷操作不会影响到镜像本身。
数据卷可以完成容器到宿主机、宿主机到容器以及容器到容器之间的数据共享。 

 

前言

有人会和我一样么?我并没有系统的学习过容器化技术,约在两年前进了一家公司是做MES的在经过某知名造车新势力成功搭建.NET CORE3.1实现的系统架构并用K8S方式部署。然后就开始在没人带的情况下花点时间实践了云原生技能,学习了该公司的系统架构成了配置开发人员。我本来就是野生程序员,所以学习云原生就是边走边学。我刚开始并不明白上面的概念,不了解VOLUME有什么作用。直到我最近在学ODOO二开,需要频繁更新容器里的文件。豁然发现使用VOLUME就好了。写下这篇随笔纯粹打发时间。

  

正文-Volume命令

 

 --odoo
docker run -d -v odoo-lib:/var/lib/odoo  -v odoo-config:/etc/odoo -v odoo_extra:/mnt/extra-addons -v odoo_apps:/usr/lib/python3/dist-packages/odoo/addons  -p 8069:8069 --name odoo --restart=always --link db:db -t odoo:17
docker run -d -v odoo-db:/var/lib/postgresql/data -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -e POSTGRES_DB=postgres -p 5432:5432  --restart=always --name db postgres:15.7--redis
docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v redis_conf:/etc/redis/redis.conf -v redis_data:/data -d redis redis-server /etc/redis/redis.conf  --appendonly yes  --requirepass dba#redis 
--nginx
docker run \
-p 8080:80 \
--name nginx \
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/nginx/log:/var/log/nginx \
-v /home/nginx/html:/usr/share/nginx/html \
-d nginx:latest

每次docker方式部署mysql,redis,nginx等支持docker方式部署的应用我都要抄人家文章里的bash命名行。然后收藏夹里很多地址是关于这些的。其实我知道这些bash命令里很多是关于docker volumn的,但是就是不想花时间去详细了解。终于我想通了我要知其所以然。

docker volume help

Usage: docker volume COMMAND

Manage volumes

Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes

Run 'docker volume COMMAND --help' for more information on a command.

通过docker volume COMMAND --help可以查看每个Volume命令的详情。

docker volume ls
列出所有的数据卷。

[root@izoq008ryseuupz docker]# docker volume ls --help

Usage: docker volume ls [OPTIONS]

List volumes

Aliases:
ls, list

Options:
-f, --filter filter Provide filter values (e.g. 'dangling=true')
--format string Pretty-print volumes using a Go template
-q, --quiet Only display volume names

docker volume create

创建一个数据卷。

[root@izoq008ryseuupz docker]# docker volume create --help

Usage: docker volume create [OPTIONS] [VOLUME]

Create a volume

Options:
-d, --driver string Specify volume driver name (default "local")
--label list Set metadata for a volume
-o, --opt map Set driver specific options (default map[])

是的,上面的内容是抄别人的。为了要让可读性稍微有点保障。其实我基本上只用 docker run的时候带-v参数来自动创建volumn。自动创建的卷在宿主机器上的实际地址在哪里呢?你可以使用portainer这个可视化容器管理工具来管理。

 

 

你可能不知道哪些路径需要映射,-v是不限制个数的少了就自己加上。容器内部的地址自己使用docker exec进入容器内部去验证。portainer是非常简单易用的。是我必须在服务器上安装的工具。所以我其实是不喜欢用bash命令的。

 

标签:volume,容器,nginx,白话,VOLUME,--,odoo,DOCKER,docker
From: https://www.cnblogs.com/datacool/p/18241498

相关文章

  • Docker安装SQL Sever
    https://www.cnblogs.com/x666-6/p/18102094拉取镜像 dockerpullmcr.microsoft.com/mssql/server:2022-latest运行容器 docker run -e "ACCEPT_EULA=Y"-e "MSSQL_SA_PASSWORD=ChenDaDliu2023"-p1433:1433--namesql1--hostnamesqlS......
  • 关于Docker加速镜像
    真的被公开的加速镜像坑惨 https://hub-mirror.c.163.com/ https://mirror.baidubce.com/ https://docker.mirrors.ustc.edu.cn/3家都加进去了,折腾半个多小时pull还是慢的要命,国内这尿性不用信了。阿里云的docker镜像加速地址每个用户不一样,滥用的可能性少,而且官方后台提......
  • 【教程】在Linux系统上安装Docker和Docker Compose
    介绍Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。DockerCompose是在使用Docker容器部署分布式应用时的工具,可以定义哪个容器运行哪个应用。使用Compose,你只需定义一个多容器应用的yml文件,然后使用一条命令即可部署运行所有容器......
  • Docker学习笔记
    学习背景近些年,如果你是一名开发,那么Docker这个热门的技术名词你一定听说过,我也不例外,但是因为平时没接触过,所以一直都没动力去了解使用。最近在折腾自己维护在github上的项目的时候,发现项目所依赖的外部环境比较多,比如zookeeper、redis、elasticsearch等等,如果都安装一遍的话比......
  • Docker构建多平台镜像
    多平台镜像使用场景我们知道Docker镜像是支持多平台(不同的操作系统/架构)的,比如linux/amd64,linux/arm64,linux/riscv64等,当我们需要在不同平台使用容器运行我们的镜像的时候,通常可能会考虑分别编译各个平台的镜像文件,然后打上不同的tag用来区分平台,使用的时候也同样需要根据实际运......
  • Docker装不上怎么办
    目录Ubuntu安装DockerCentOS安装Docker        最近Docker的消息相信大家都已经知道了,你在安装Docker的时候如果还用官网的源安装的话基本上都会因为网络问题安装不上,那么Docker就不能使用了吗,当然不是,我们可以通过阿里云的地址去安装,废话不多说,直接上操作。Ubunt......
  • Docker镜像加速
    目录UbuntuCentOS        今天给大家分享一下Docker下载镜像速度慢或者无法下载怎么办,我们其实可以配置镜像加速,这里给大家分享的是阿里云的镜像加速。Ubuntusudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<-'EOF'{"registry-mirrors":["h......
  • Docker 知识汇总
    Docker知识汇总返回到Java开发知识汇总目录docker学习docker概述docker安装docker命令镜像命令容器命令操作命令dockers镜像容器数据卷dockerfile编写dockerfile构建文件,命令大写(源代码)#docker指令FROM#基础镜像,一切......
  • 【转载】基于 Docker 的 PHP 集成环境 DNMP
    参考https://github.com/yeszao/dnmp?tab=readme-ov-filehttps://learnku.com/articles/19289https://www.awaimai.com/2120.html源码【下载】(由于限制20m上传,删除.git文件夹)环境软件/系统版本说明WindowsWindows10专业版22H219045.4412DockerDes......
  • 【NAS】Docker Gitea+SakuraFrp+绿联DPX4800标 搭建私有代码托管平台
    本文主要分享Gitea的一些设置,和Https的实现。Gitea的一些设置映射网络HTTPS的实现先准备好一个域名,建议准备一个1Panel创建一个AC账户然后点击申请证书,手动解析。申请完毕后,点击详情,查看证书crt和私钥key自己创建一个txt文本,将证书crt粘贴进去,然后将名字改为xxx.crt......