Dockerfile 中有一个 VOLUME 命令,可以把挂载一个目录到主机目录,但是在主机目录下的名字是随机的,除非用户用 -v 指定,但是如果在 Dockerfile 中不用 VOLUME,只在运行时用 -v 指定也能达到效果,那么就有一个问题,VOLUME 在 Dockerfile 中到底有多少用,在 Host 下创建了几个用户一般找不到的文件到底有多少使用价值,大部分情况下用户都是要手动使用 -v 重新指定挂载目录,那 VOLUME 命令就显得很鸡肋。
VOLUME 是否有什么比较重要的用处我没有理解呢?
迷茫2017-04-24 09:11:15
저도 이것에 대해 궁금한 점이 있어서 정보를 좀 찾아보고 제 의견을 밝혔습니다.
공식 사용자 가이드 찾기: https://docs.docker.com/engine/userguide...
여기서 배운 점은 VOLUME이 단순한 명령문이 아니라 지정된 경로를 다시 로드한다는 것입니다. 또한 검사 컨테이너를 통해 이를 발견했습니다.
-v를 지정하지 않고 Dockerfile에 지정된 VOLUME입니다. 컨테이너의 마운트 정보를 확인하세요.
으아악이는 이전 항목을 기반으로 하며 -v를 지정하여 컨테이너의 마운트 정보를 봅니다.
으아악그런 다음 /var/lib/docker/volumes/b3e2dcacd3f9f40b43ccd5773d45ca74f0f49b02d3da17749cb378ff9f59bb67/_data
디렉토리로 가서 살펴보시면 대략적으로 알 수 있을 것입니다.
VOLUME은 이미지에서 지정된 볼륨의 폴더를 로컬/var/lib/docker/volumes/xxxxxxxxx/文件夹
에 복사한 다음 로컬 폴더를 컨테이너에 마운트하는 것으로 이해하면 됩니다.
기본적으로 로컬 폴더를 마운트하는 것과 같습니다.
계속 추가하세요. VOLUME은 실제로 새 폴더를 로컬로 생성하고 마운트하기 때문에 컨테이너 내부 폴더에는 실제로 세 가지 상황이 있습니다.
1. VOLUME이나 -v가 지정되지 않았습니다. 이것은 일반 폴더입니다. .
2. VOLUME은 -v 없이 지정됩니다. 이러한 종류의 폴더는 서로 다른 컨테이너 간에 공유될 수 있지만 로컬에서 수정할 수는 없습니다.
3. -v가 지정된 폴더는 서로 다른 컨테이너 간에 공유될 수 있으며 로컬에서 수정될 수 있습니다.
다른 컨테이너 간에 공유해야 하고 로컬에서 수정할 필요가 없는 상황을 열거해 보겠습니다.
먼저 컨테이너에서 동적 데이터를 얻는 방법을 이해합니다.
1. 로컬로 제공, 컨테이너에 마운트
2. 원격으로 제공, 원격에서 다운로드
3. 생성 및 제공 , 컨테이너 내부에서
뒤의 두 명령은 모두 로컬에서 수정할 필요가 없지만 생성된 동적 데이터를 공유해야 할 수도 있습니다.
git clone과 같은 다운로드 명령은 로컬 폴더를 마운트하지 않고 git 서버에서 직접 코드를 가져옵니다.
jekyll(정적 웹 사이트 생성기)과 같은 명령을 생성하려면 코드 폴더를 마운트한 다음 빌드 디렉터리에 생성된 정적 웹 페이지 파일을 Apache 서버에 제공해야 합니다. VOLUME으로 디렉토리를 빌드합니다.
高洛峰2017-04-24 09:11:15
VOLUME
명령은 주로 개발 환경에서 유용합니다.
코드 편집 시 호스트 머신에서 직접 편집한 후 Docker에서 동기적으로 실행하면 개발 환경의 성능을 극대화할 수 있습니다.
VOLUME
의 경우 사양에 docker-compose
을 사용하는 것을 선호합니다.
docker-compose는 여러 서비스를 묶어서 실행할 수 있습니다. 위의 예는 웹 서비스와 DB 서비스를 별도로 실행하는 것으로, 복잡한 환경을 구축하는 데 매우 적합합니다.