Docker verfügt über vier Speichermethoden: 1. „Standardspeicher“, die Daten werden im laufenden Container gespeichert. 2. „Volume-Datenvolumen“; „, mounten Sie direkt ein beliebiges Verzeichnis oder eine Datei im Host-Dateisystem; 4. „tmpfs mount“.
Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Docker-1.13.1-Version, Dell G3-Computer.
Verschiedene Speichermethoden von Docker-Containern
Containerspeicher kann in zwei Hauptkategorien unterteilt werden:
Eine bezieht sich auf Bilder, was wir in „Grundlagen der Docker-Container-Technologie – Gemeinsame Datei“ besprochen haben „System OverlayFS“ Die im Artikel erwähnte Copy-On-Write-Funktion der Containerebene. Standardmäßig werden alle im Container erstellten Dateien auf der beschreibbaren Containerschicht gespeichert. Diese Methode der direkten Speicherung von Dateien auf der Containerschicht erschwert die Beibehaltung und Freigabe von Daten aufgrund der Abhängigkeit von Speichertreibern und der Verwendung des direkten Schreibens auf den Host Diese zusätzliche Abstraktion verringert die Leistung im Vergleich zum Datenvolumen.
Der andere ist der Hostspeicher, der durch Binden oder Einhängen des Hostverzeichnisses in den Container verwendet wird. Die Daten können auch nach dem Stoppen des Containers beibehalten werden. Stellen Sie hauptsächlich Letzteres vor.
Mehrere Speicher-Mounting-Methoden
Hier zeichnen wir das folgende Diagramm basierend auf den verschiedenen Speicherorten, an denen Daten auf dem Docker-Host gespeichert werden:
Docker verfügt über vier Speichermethoden: Standard, Volumes, Datenvolumen, Bind-Mounts-Mounting , tmpfs mount (nur in Linux-Umgebung verfügbar), wobei Volumes und Bind-Mounts persistente Containerdaten implementieren.
1. Standardspeicher
Daten werden im laufenden Container gespeichert. Nach dem Löschen des Containers werden auch die Daten gelöscht.
2. Bind-Mounts haben im Vergleich zu Volumes eingeschränkte Funktionen. Bei Verwendung von Bind Mount wird eine Datei oder ein Verzeichnis auf dem Host in den Container gemountet. Auf die Datei oder das Verzeichnis wird durch ihren vollständigen Pfad auf dem Host verwiesen. Das Verzeichnis muss nicht bereits auf dem Docker-Host vorhanden sein. Wenn es nicht vorhanden ist, erstellt Docker es für uns. Beachten Sie, dass nur Verzeichnisse automatisch erstellt werden können.
Wir binden das Mounten eines Verzeichnisses /nginx/html über die Option -v und werfen einen Blick in den Container.docker run -dt -v /nginx/html:/usr/share/nginx/html --name nginx nginx
"Mounts": [ { "Type": "bind", "Source": "/nginx/html", "Destination": "/usr/share/nginx/html", "Mode": "", "RW": true, "Propagation": "rprivate" } ],
[root@localhost ~]# echo "hello nginx" > /nginx/html/index.html [root@localhost ~]# curl 172.17.0.4 hello nginx
3.Volumes-Datenvolumes
Volume-Speichervolumes werden von Docker erstellt und verwaltet. Wir können den Docker-Volume-Create-Befehl verwenden, um Volumes explizit zu erstellen, oder Volumes erstellen, wenn der Container erstellt wird.docker run -dt -v /nginx/html:/usr/share/nginx/html:ro --name nginx nginx
[root@localhost ~]# docker volume create nginx_volume nginx_volume [root@localhost volumes]# docker inspect nginx_volume [ { "CreatedAt": "2021-08-12T01:58:04-04:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/nginx_volume/_data", "Name": "nginx_volume", "Options": {}, "Scope": "local" } ]
[root@localhost ~]# docker volume ls DRIVER VOLUME NAME local owncloud-docker-server_files local owncloud-docker-server_mysql local owncloud-docker-server_redis [root@localhost ~]# docker volume prune WARNING! This will remove all local volumes not used by at least one container. Are you sure you want to continue? [y/N] y Deleted Volumes: owncloud-docker-server_files owncloud-docker-server_mysql owncloud-docker-server_redis Total reclaimed space: 199.4MB
Beim Mounten eines leeren Volumes: Der Inhalt des Verzeichnisses im Container wird auf das Volume propagiert (kopiert).
Beim Binden eines gemounteten oder nicht leeren Volumes: Der Inhalt des Verzeichnisses im Container wird durch das Volume oder das gebundene Hostverzeichnis überschrieben.
4.tmpfs mount
tmpfs mount ist nur für Linux-Hosts verfügbar. Wenn wir tmpfs mount zum Erstellen eines Containers verwenden, kann der Container Dateien außerhalb der beschreibbaren Ebene des Containers erstellen. Behalten Sie die Daten im Speicher und wenn der Container gestoppt wird, werden auch die geschriebenen Daten entfernt. Wird hauptsächlich zur temporären Speicherung vertraulicher Dateien verwendet, die nicht auf der beschreibbaren Ebene des Hosts oder Containers verbleiben sollen.Mounten Sie einen Speicherblock über die Option --tmpfs.
[root@localhost volumes]# docker run -dt -v /usr/share/nginx/html --name nginx_with_volume nginx d25bdfce9c7ac7bde5ae35067f6d9cf9f0cd2c9cbea6d1bbd7127b3949ef5ac6 [root@localhost volumes]# docker volume ls DRIVER VOLUME NAME local d8e943f57d17a255f8a4ac3ecbd6471a735aa64cc7a606c52f61319a6c754980 local nginx_volume [root@localhost volumes]# ls /var/lib/docker/volumes/ backingFsBlockDev d8e943f57d17a255f8a4ac3ecbd6471a735aa64cc7a606c52f61319a6c754980 metadata.db nginx_volume
docker run -dt --name busybox_tmpfs --tmpfs /etc/running busybox
在容器之间共享数据主要有两种方法,第一种比较简单,只需要将目录或者volume挂载到多个容器中即可。这里不做赘述,我们来看一下通过中间容器实现共享的方式。
我们创建一个中间容器,包含绑定挂载目录和一个卷。
docker create -v /share:/volume1 -v /volume2 --name volume_share busybox
在我们需要共享的容器中通过选项--volumes-from拿过来用即可
docker run -d -t --volumes-from volume_share --name container1 busybox
我们inspect检查一下Mounts字段,此时container1已经挂载到了一个bind目录和一个volume
"Mounts": [ { "Type": "bind", "Source": "/share", "Destination": "/volume1", "Mode": "", "RW": true, "Propagation": "rprivate" }, { "Type": "volume", "Name": "21605e49a0ba90a1b952a32c1b3f0d42735da8bfe718f0dc76c37e91f1e51c0e", "Source": "/var/lib/docker/volumes/21605e49a0ba90a1b952a32c1b3f0d42735da8bfe718f0dc76c37e91f1e51c0e/_data", "Destination": "/volume2", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ],
推荐学习:《docker视频教程》
Das obige ist der detaillierte Inhalt vonWelche Möglichkeiten der Docker-Speicherung gibt es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!