programing

도커호스트에서 볼륨 마운트

powerit 2023. 8. 6. 10:28
반응형

도커호스트에서 볼륨 마운트

다음을 사용하여 볼륨이 있는 도커 컨테이너 간에 폴더를 공유할 수 있습니다.

docker run -v /host/path:/container/path ...

하지만 제 질문은 이것과 그것을 사용하는 것의 차이점이 무엇인가 하는 것입니다.VOLUMEDocker 는 Docker 파일에 .

VOLUME /path

다음과 같은 이미지를 사용하고 있습니다.VOLUME호스트와 공유하는 방법을 알고 싶습니다.나는 그것을 사용했습니다.-v명령어가 위의명다니입 두 . 하지만 저는 두 가지가 모두 필요한지 몰랐습니다.-v그리고.VOLUME.

VOLUME명령은 컨테이너 내부에 디렉터리를 마운트하고 해당 디렉터리 내부에서 생성되거나 편집된 모든 파일을 컨테이너 파일 구조 외부의 호스트 디스크에 저장합니다.

이 개념은 도커 컨테이너 간에 볼륨을 공유할 수 있으며 이를 참조하는 컨테이너(실행 중이거나 중지됨)가 있는 한 볼륨이 계속 유지된다는 것입니다.

다음사컨용다른하기마볼운트존륨(컨테이너으로 공유가 기존 하도록 할 수 .--volumes-from명령을 실행합니다.

VOLUME그리고.-v다음과 같습니다.-v운영 체제의 기존 파일을 도커 컨테이너 안에 마운트합니다.VOLUME그러면 호스트에볼륨이 생성되어 컨테이너 내부에 마운트됩니다.

예:

  1. 파일에서 도커를 .VOLUME /var/lib/mysql.
  2. 합니다.some-volume
  3. 컨테이너를 실행합니다.

그리고 나서.

  1. 이 볼륨을 사용할 다른 도커 이미지가 있습니다.
  2. 같이 합니다.docker run --volumes-from some-volume docker-image-name:tag
  3. 이제 볼륨이 있는 도커 컨테이너가 실행되고 있습니다.some-volume/var/lib/mysql

하기: 사용하기--volumes-from볼륨 위치에 있는 모든 항목에 볼륨을 마운트합니다.예를 들어, 만약 당신이 물건을 가지고 있다면./var/lib/mysql볼륨의 내용으로 대체됩니다.

다른 사람들이 도커의 요점을 놓치고 있다고 생각하기 때문에 제 대답을 덧붙이겠습니다.

용사를 합니다.VOLUME도커는 Right Way™ 도커입니다 가 니습다. 특정 디렉터리에 영구 데이터가 포함되어 있음을 Docker에 알렸기 때문입니다.도커는 해당 데이터에 대한 볼륨을 생성하고 이 볼륨을 사용하는 모든 컨테이너를 제거하더라도 삭제하지 않습니다.

또한 유니언 파일 시스템을 바이패스하므로 볼륨은 실제로 해당 볼륨을 공유하는 모든 컨테이너의 올바른 위치에 마운트(읽기-쓰기 또는 읽기 전용)되는 실제 디렉터리입니다.

이제 호스트에서 해당 데이터에 액세스하려면 컨테이너를 검사하기만 하면 됩니다.

# docker inspect myapp
[{
    .
    .
    .
    "Volumes": {
        "/var/www": "/var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6...",
        "/var/cache/nginx": "/var/lib/docker/vfs/dir/62499e6b31cb3f7f59bf00d8a16b48d2...",
        "/var/log/nginx": "/var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87..."
    },
    "VolumesRW": {
        "/var/www": false,
        "/var/cache/nginx": true,
        "/var/log/nginx": true
    }
}]

일반적으로 /srv와 같은 표준 위치에 심볼릭 링크를 만들어 볼륨에 쉽게 액세스하고 볼륨에 포함된 데이터를 관리할 수 있습니다(중요한 볼륨에 대해서만).

ln -s /var/lib/docker/vfs/dir/b3ef4bc28fb39034dd7a3aab00e086e6... /srv/myapp-www
ln -s /var/lib/docker/vfs/dir/71896ce364ef919592f4e99c6e22ce87... /srv/myapp-log

은 VOLUME 용위에 됩니다.Dockerfile다른 용기에서 사용할 볼륨을 노출합니다. 제예, 성생 생성Dockerfile다음과 같이:

시작 우분투:14.04

RUN mkdir /myvol  
RUN echo "hello world" > /myvol/greeting  
VOLUME /myvol

이미지 빌드:

$ docker build -t testing_volume .

컨테이너를 실행합니다(예: container1:

$ docker run -it <image-id of above image> bash

이제 volumes-from 옵션(say-container2)을 사용하여 다른 컨테이너를 실행합니다.

$ docker run -it --volumes-from <id-of-above-container> ubuntu:14.04 bash

는 container1의 데이터입니다./myvol디렉터리를 같은 위치에 있는 컨테이너 2에 저장합니다.

-v옵션은 컨테이너의 디렉터리를 호스트에 마운트하는 데 사용되는 컨테이너의 런타임에 제공됩니다.사용이 간편하며, 제공하기만 하면 됩니다.-v가 " 가있는옵션"인<host-path>:<container-path>전체 명령은 다음과 같을 수 있습니다.$ docker run -v <host-path>:<container-path> <image-id>

으로 기적으로.VOLUME그리고.-v옵션은 거의 같습니다.이는 '컨테이너에 특정 디렉터리를 마운트하십시오'를 의미합니다.를 들면, 들면를예,VOLUME /data그리고.-v /data정확히 같은 의미입니다. 있는 VOLUME /data또는 와 함께-v /data 선택,/data디렉터리가 컨테이너에 마운트되었습니다.이 디렉터리는 컨테이너에 속하지 않습니다.

이 파일추가정다니합고다가에 ./data컨테이너에서 새 이미지로 커밋합니다./data디렉터리가 원래 컨테이너에 속합니다.

$ docker run -it -v /data --name volume ubuntu:14.04 bash
root@2b5e0f2d37cd:/# cd /data
root@2b5e0f2d37cd:/data# touch 1 2 3 4 5 6 7 8 9
root@2b5e0f2d37cd:/data# cd /tmp
root@2b5e0f2d37cd:/tmp# touch 1 2 3 4 5 6 7 8 9
root@2b5e0f2d37cd:/tmp# exit
exit

$ docker commit volume nacyot/volume  
835cfe3d8d159622507ba3256bb1c0b0d6e7c1419ae32751ad0f925c40378945
nacyot $ docker run -it nacyot/volume
root@dbe335c7e64d:/# cd /data
root@dbe335c7e64d:/data# ls
root@dbe335c7e64d:/data# cd /tmp
root@dbe335c7e64d:/tmp# ls
1  2  3  4  5  6  7  8  9
root@dbe335c7e64d:/tmp# 
root@dbe335c7e64d:/tmp# 

이 마운트된 디렉토리는 다음과 같습니다./data응용 프로그램에 속하지 않는 데이터를 저장하는 데 사용됩니다. 않는 를 미리 할 수 .VOLUME.

Volume그리고.-v은 옵은사수있다니습할용을 할 수 있습니다.-v시작 컨테이너에서 동적으로 옵션을 지정합니다. 어떤 디렉터리를 수 뜻입니다. 또 수 있다는 것입니다.-v

이것은 Docker 설명서 자체에서 가져온 것으로, 간단하고 쉽게 도움이 될 수 있습니다.

"호스트 디렉토리는 본질적으로 호스트에 종속됩니다.이러한 이유로 Docker 파일에서 호스트 디렉토리를 마운트할 수 없습니다. 빌드된 이미지는 이식 가능해야 하므로 Volume 명령은 host-dir 전달을 지원하지 않습니다.모든 잠재적 호스트에서 호스트 디렉토리를 사용할 수 있는 것은 아닙니다."

,VOLUME:

  1. 으로 이름 docker volume list
  2. 이 볼륨이 연결된 실행 중인 모든 컨테이너 종료
  3. 려달을 합니다.docker run -it --rm --mount source=[NAME OF VOLUME],target=/volume busybox
  4. 셸이 열립니다.cd /volume볼륨을 입력합니다.

언급URL : https://stackoverflow.com/questions/25311613/docker-mounting-volumes-on-host

반응형