programing

Docker 바탕 화면에서 데이터 볼륨 찾기(Windows)

skycolor 2023. 8. 5. 10:02
반응형

Docker 바탕 화면에서 데이터 볼륨 찾기(Windows)

현재 도커를 배우려고 하는데 데이터 볼륨이 실제로 어디에 있는지 헷갈립니다.

Windows용 Docker Desktop을 사용하고 있습니다. (Windows 10)

문서에서 그들은 객체에 대해 도커 검사를 실행하면 소스가 제공된다고 말합니다. https://docs.docker.com/engine/tutorials/dockervolumes/ #docer-a-volume

$ docker inspect web

"Mounts": [
    {
        "Name": "fac362...80535",
        "Source": "/var/lib/docker/volumes/fac362...80535/_data",
        "Destination": "/webapp",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
]

그러나 이 메시지가 표시되지 않으면 다음과 같은 메시지가 표시됩니다.

$ docker inspect blog_postgres-data
[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/blog_postgres-data/_data",
        "Name": "blog_postgres-data",
        "Options": {},
        "Scope": "local"
    }
]

누가 나를 도와줄 수 있나요?데이터 볼륨이 실제로 존재하는 위치가 호스트 시스템에 있는지 알고 싶습니다.그렇다면 어떻게 하면 그 길로 갈 수 있을까요?

저는 Windows + WSL 2(Ubuntu 18.04)입니다.

Windows 파일 탐색기를 입력합니다.

  • 도커 버전 20.10.+의 경우:\\wsl$\docker-desktop-data\data\docker\volumes
  • v19.03의 :\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\

볼륨당 디렉터리가 하나씩 있습니다.

는 볼륨디리다같다니습음입니다./var/lib/docker/volumes/blog_postgres-data/_data,그리고./var/lib/docker 보통 에장는되착에 됩니다.C:\Users\Public\Documents\Hyper-V\Virtual hard disks어쨌든 도커 설정을 보면 확인할 수 있습니다.

Windows에서 Docker와 드라이브를 공유하는 방법에 대한 자세한 내용은 다음 문서를 참조하십시오.

그건 그렇고.Source이며 호트위니다입입니다.Destination는 다음입니다.

"Mounts": [
{
    "Name": "fac362...80535",
    "Source": "/var/lib/docker/volumes/fac362...80535/_data",
    "Destination": "/webapp",
    "Driver": "local",
    "Mode": "",
    "RW": true,
    "Propagation": ""
}
]

의견에 대한 질문에 답변하도록 업데이트됨:

여기서 저의 주된 궁금증은 이미지 등을 공유하는 것이 좋지만 어떻게 데이터를 공유할 수 있을까요?

은 정로말.volume이를 위해 설계되었습니다(Docker 컨테이너의 데이터 관리).볼륨의 데이터는 호스트 FS에 유지되며 도커 컨테이너/이미지의 라이프사이클에서 분리됩니다.다음을 통해 볼륨에서 데이터를 공유할 수 있습니다.

  • 호스팅하고 재사용할 Docker 볼륨 마운트

    docker run -v /path/on/host:/path/inside/container image

    가 그면모데지다니됩속가이터러든으로 됩니다./path/on/host백업하고 다른 시스템에 복사한 후 동일한 볼륨으로 컨테이너를 다시 실행할 수 있습니다.

  • 데이터 컨테이너를 만들고 마운트합니다.

    를 만듭니다.docker create -v /dbdata --name dbstore training/postgres /bin/true

    으로 다른 합니다. 이 컨테이너를 사용합니다.--volumes-from:docker run -d --volumes-from dbstore --name db1 training/postgres 생된모데이든에 의해 db1입니다.dbstore.

자세한 내용은 공식 도커 볼륨 문서를 참조하십시오.

말하면, 간히말하면단,면하▁simply말히,volumes는 모든 컨테이너 데이터가 포함된 호스트의 디렉토리일 뿐이므로 이전에 사용한 모든 방법을 사용하여 데이터를 백업/공유할 수 있습니다.

이미지를 사용하는 것처럼 볼륨을 도커 허브로 푸시할 수 있습니까?

아니요. 도커 이미지는 도커 허브(예: '레지스트리')에 푸시할 수 있지만 데이터는 그렇지 않습니다.원하는 방법으로 데이터를 백업/지속/공유할 수 있지만 데이터를 Docker 레지스트리에 밀어넣어 공유하는 것은 의미가 없습니다.

백업 등을 수행할 수 있습니까?

네, 위에 게시된 것처럼 :-)

위해서Windows 10 + WSL 2 (Ubuntu 20.04), Docker version 20.10.2, build 2291f61

도커 아티팩트는 다음에서 확인할 수 있습니다.

DOCKER_ARTIFACTS == \\wsl$\docker-desktop-data\version-pack-data\community\docker

데이터 볼륨은 다음에서 확인할 수 있습니다.

enter image description here

DOCKER_ARTIFACTS\volumes\[VOLUME_ID]\_data

enter image description here

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\

저도 마찬가지였습니다(Windows 10 Home). 좋은 일이었습니다.

WSL 2(Ubuntu 20.04)가 설치된 도커는 Windows 10에서 다음 위치를 사용합니다.

C:\Users\Username\AppData\Local\Docker\wsl\data\ext4.vhdx

어디에Username사용자 이름입니다.

윈도우즈 호스트에서 Linux 기반 컨테이너를 실행하는 경우 실제 볼륨은 Linux VM 내에 저장되고 호스트의 fs에서 사용할 수 없습니다. 그렇지 않으면 윈도우즈 => C:\ProgramData\Docker\volumes\

또한.docker inspect <container_id>컨테이너 구성이 나열됩니다. 마운트 섹션에서 지속성 계층에 대한 자세한 내용을 참조하십시오.

업데이트: WSL에서 실행되는 도커에는 해당되지 않습니다.

wsl2를 사용하도록 설정한 경우 파일 탐색기에서 다음을 찾을 수 있습니다.\\wsl$\docker-desktop\mnt\host\wsl\docker-desktop-data\data\docker

Docker Desktop(윈도우즈)의 아래 경로에서 호스트와 연결된 볼륨을 찾을 수 있습니다.

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes

저의 경우 wsl2, windows 10 home에 도커 데스크톱을 설치합니다.이미지 파일을 찾습니다.

\\wsl$\docker-desktop-data\version-pack-data\community\docker\overlay2
\\wsl$\docker-desktop-data\version-pack-data\community\docker

컨테이너, 이미지 볼륨 정보가 모두 있습니다.

모든 이미지 파일은 여기에 저장되며 긴 문자열 이름을 가진 여러 폴더로 분리되었습니다.제가 모든 폴더를 조사할 때, 저는 "diff" 폴더에서 모든 실제 이미지 파일을 찾을 수 있습니다.

터미널에 "var/lib/docker" 경로가 표시되지만 폴더가 존재하지 않고 실제 파일이 저장되지 않습니다. 오류가 없다고 생각합니다. "var/lib/docker"는 실제 폴더에 연결되거나 매핑됩니다.

Windows 10(윈도우 10) 릴리스 2004 이상에서는 \\wsl$을 입력하거나 기억해야 하는 번거로움이 있는 경우 보다 GUI에 친숙한 방법이 있습니다.WSL 2를 사용하면 File Explorer의 새 Linux 아이콘을 통해 모든 특수 WSL 공유로 안전하게 이동할 수 있습니다.

Linux icon shown as the last scrollable item in the folders pane within File Explorer

여기서 다른 답변에 언급된 대로 (예:) \docker-desktop-data\data\docker\volumes까지 드릴다운할 수 있습니다.

\wsl.localhost\docker-desktop-data\data\docker\volumes within File Explorer

자세한 내용은 이러한 액세스 방법에 대해 설명하는 Microsoft의 공식 WSL 파일 시스템 설명서를 참조하십시오.기술적으로 호기심이 많은 사람들을 위해, 마이크로소프트의 딥 다이브 비디오는 많은 질문에 답할 것입니다.

나를 위해 나는 내 책을 찾았습니다.

\\wsl$\docker-desktop-data\data\docker\volumes\

WSL2 및 Windows 21H1 사용

Windows 11와 함께Docker Desktop v4.15.0WSL2가 활성화된 경우 볼륨 폴더로 이동하는 경로는\\wsl.localhost\docker-desktop-data\data\docker\volumes

NTFS 기반 디렉토리를 마운트하는 것은 제 목적에 맞지 않았습니다(MongoDB - 적어도 Redis 및 CouchDB의 경우는 그렇습니다).NTFS 권한은 컨테이너에서 실행되는 이러한 DB에 필요한 액세스를 허용하지 않았습니다.다음은 HyperV에 명명된 볼륨이 있는 설정입니다.

다음 접근 방식은 서비스 내에서 ssh 서버를 시작하고, 자동으로 시작되고 인증을 위해 호스트와 컨테이너 간에 공용 키 암호화를 사용하도록 docker-compose로 설정합니다.이러한 방식으로 scp 또는 sftp를 통해 데이터를 업로드/다운로드할 수 있습니다.

webapp + mongodb에 대한 완전한 docker-compose.yml은 ssh 서비스 사용 방법에 대한 문서와 함께 아래에 나와 있습니다.

version: '3'
services:
  foo:
    build: .
    image: localhost.localdomain/${repository_name}:${tag}
    container_name: ${container_name}
    ports:
      - "3333:3333"
    links:
      - mongodb-foo
    depends_on:
      - mongodb-foo
      - sshd
    volumes:
      - "${host_log_directory}:/var/log/app"

  mongodb-foo:
    container_name: mongodb-${repository_name}
    image: "mongo:3.4-jessie"
    volumes:
      - mongodata-foo:/data/db
    expose:
      - '27017'

  #since mongo data on Windows only works within HyperV virtual disk (as of 2019-4-3), the following allows upload/download of mongo data
  #setup: you need to copy your ~/.ssh/id_rsa.pub into $DOCKER_DATA_DIR/.ssh/id_rsa.pub, then run this service again
  #download (all mongo data): scp -r -P 2222 user@localhost:/data/mongodb [target-dir within /c/]
  #upload (all mongo data): scp -r -P 2222 [source-dir within /c/] user@localhost:/data/mongodb
  sshd:
    image: maltyxx/sshd
    volumes:
        - mongodata-foo:/data/mongodb
        - $DOCKER_DATA_DIR/.ssh/id_rsa.pub:/home/user/.ssh/keys/id_rsa.pub:ro
    ports:
        - "2222:22"
    command: user::1001

#please note: using a named volume like this for mongo is necessary on Windows rather than mounting an NTFS directory.
#mongodb (and probably most other databases) are not compatible with windows native data directories due ot permissions issues.
#this means that there is no direct access to this data, it needs to be dumped elsewhere if you want to reimport something.
#it will however be persisted as long as you don't delete the HyperV virtual drive that docker host is using.
#on Linux and Docker for Mac it is not an issue, named volumes are directly accessible from host.
volumes:
  mongodata-foo:

이는 관련이 없지만 완전하게 작동하는 예제의 경우 도커-스캐너 호출 전에 다음 스크립트를 실행해야 합니다.

#!/usr/bin/env bash
set -o errexit
set -o pipefail
set -o nounset

working_directory="$(pwd)"
host_repo_dir="${working_directory}"
repository_name="$(basename ${working_directory})"
branch_name="$(git rev-parse --abbrev-ref HEAD)"
container_name="${repository_name}-${branch_name}"
host_log_directory="${DOCKER_DATA_DIR}/log/${repository_name}"
tag="${branch_name}"

export host_repo_dir
export repository_name
export container_name
export tag
export host_log_directory

업데이트: 현재는 도커 cp만 사용할 수 있으므로 위에서 설명한 sshd 컨테이너는 Windows 호스트 아래의 컨테이너에서 실행되는 파일 시스템에 원격으로 액세스해야 하는 경우를 제외하고는 더 이상 필요하지 않습니다.

다음과 같이 도커 "vm"을 가리키는 볼륨을 넣을 때 데이터가 실제로 있는 위치를 검색하는 경우:

version: '3.0'
services:
  mysql-server:
    image: mysql:latest
    container_name: mysql-server
    restart: always
    ports:
      - 3306:3306
    volumes:
      - /opt/docker/mysql/data:/var/lib/mysql

"/opt/docker/mysql/data" 니면그냥./는 위치:\\wsl$\docker-desktop\mnt\version-pack\containers\services\docker\rootfs

도움이 되길 바랍니다 :)

Windows에서 Docker For Windows를 사용하는 경우 Docker는 VM(MobyLinuxVM)을 통해 작동합니다.볼륨(다른 볼륨과 마찬가지로)이 VM에 있습니다!이는 다음과 같은 방법으로 찾을 수 있습니다.

# get a privileged container with access to Docker daemon
docker run --privileged -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v /usr/bin/docker:/usr/bin/docker alpine sh

# in second power-shell run a container with full root access to MobyLinuxVM
docker run --net=host --ipc=host --uts=host --pid=host -it --security-opt=seccomp=unconfined --privileged --rm -v /:/host alpine /bin/sh

# switch to host FS
chroot /host

# and then go to the volume you asked for
cd /var/lib/docker/volumes/YOUR_VOLUME_NAME/_data

각 컨테이너에는 호스트 파일 시스템과 독립적인 자체 파일 시스템이 있습니다. 를 실행하는 -v데이터를 볼 수 수 :docker run -v hostFolder:containerFolder).

은 이러한 볼륨 때문에 탑재됨)을합니다./var/lib/docker/volumes/fac362...80535/_data가 (호스트)에 ./webapp(계속).

당신이 사용하지 않은 것 같습니다.-v 이 않고 수 . 파일 시스템에서는 이 폴더에 수 ./var/lib/docker/volumes/blog_postgres-data/_data는 컨테이너를 됩니다.docker -rm폴더를 마운트하는 것이 좋습니다.

윈도우에서 이 데이터에 액세스할 수 있는 질문에 대해서입니다.윈도우용 도커는 윈도우 10에서 bash 서브시스템을 사용하는 것으로 알고 있습니다.저는 bash for windows10을 실행하여 해당 폴더로 이동하거나 windows10에서 리눅스 폴더에 액세스하는 방법을 알아보려고 합니다.페이지에서 Windows 10의 Linux 하위 시스템에 대한 FAQ를 확인할 수 있습니다.

업데이트: 도커 cp를 사용하여 호스트와 컨테이너 간에 파일을 복사할 수도 있습니다.

윈도우즈를 사용하는 경우에는 도커 파일(이 경우 볼륨)이 Hyper-V 또는 WSL에 대해 도커가 사용하는 가상 시스템에 있습니다.그러나 이러한 파일에 액세스해야 하는 경우 컨테이너 파일을 복사하여 컴퓨터에 로컬로 저장하고 이러한 방식으로 데이터에 액세스할 수 있습니다.

docker cp container_Id_Here:/var/lib/mysql path_To_Your_Local_Machine_Here

일반적으로 WSL Linux File System의 다음 경로에 위치합니다.

도커-스캐너-데이터\data\docer\docer\docer

언급URL : https://stackoverflow.com/questions/43181654/locating-data-volumes-in-docker-desktop-windows

반응형