우리는 Container의 Writable Layer에 데이터를 디버깅할 수 있다는 것을 알고 있습니다. 그런데 여기에 몇 가지 문제가 있습니다.
data volume
보다 성능이 뛰어납니다.Docker는 데이터를 안전하게 사용할 수 있는 방식으로 volume, bind mounts, tmpfs
3가지 방식을 제공합니다(어떤 것을 사용할 지 모고 volume
사용하기를 바랍니다). 아래는 컨테이너의 데이터 관리 방식과 사용 분야에서 자세히 살펴보는 부분입니다.
어떤 유형의 마운트를 사용하면, 데이터는 컨테이너 내에서 동일하게 위치, 컨테이너 파일 시스템의 폴더나 개별적인 파일에 표시됩니다. 올바른 Mount 유형을 사용하는 경우 기준이 volume, bind mounts, tmpfs mount
가장 큰 차이점은 Data가 Docker Host 내에서 어디에 존재 하는지입니다.
Docker 출처: Docker Docs — 볼륨 사용
volume
에서는 Docker(Linux /var/lib/docker/volume/
)가 호스트 파일 시스템을 관리하는 부분에 데이터가 저장됩니다.bind mount
데이터가 호스트 시스템이 어디든 저장할 수 있습니다.tmpfs mount
는 호스트 시스템의 메모리에만 데이터를 저장하고, 호스트의 파일 시스템에는 저장하지 않습니다.각 마운트에 대해 자세히 살펴보겠습니다.
docker volume create
미스터리를 사용하여 볼륨을 생성하거나, 컨테이너나 서비스를 volume
생성할 수 있습니다.volume
이 생성되면 Data는 Docker Host의 키예프에 저장됩니다. 해당 volume
지역을 컨테이너에 마운트하면, 호스트의 카펫이 마운트됩니다. 이 volume
Docker에 의해 관리되고 Host System과 분리되는 것을 제외한다면, bind mount
이와 동일하게 작동합니다.volume
여러 컨테이너에 마운트할 수 있습니다.volume
사용하지 않고, volume
Docker에서 계속 사용할 수 없으며, 자동으로 삭제하지 않습니다.docker volume prune
사용하지 않고 volume
정리할 수 있습니다.volume
을 마운트할 때, 이름을 기록으로 인증하여 사용할 수 있으며, 익명으로 사용할 수 있습니다.volume
고유한 것은 처음 Mount일 때 고유한 이름을 부여받은 것이므로, Docker는 Docker Host내에서 본질적인 고유의 이름을 해당에 부여 volume
합니다.volume
동일한 방식으로 작동합니다.volume
원격 호스트와 클라우드 공급자가 데이터를 디버깅할 수 있는 volume drivers
사용을 지원하고 있습니다.bind mount
는 Docker 시작부터 사용할 수 있는 방식으로 volume
에 비해 기능이 제한적입니다.bind mount
사용하면, 호스트 시스템의 파일 또는 하늘이 컨테이너에 마운트됩니다.bind mount
호스트 머신의 파일 시스템은 매우 불리하지만, 스탠드에 의존하고 있습니다.bind mount
관리할 수 없습니다.tmpfs mount
는 Docker 호스트 또는 컨테이너내의 디스크에서 데이터를 유지합니다.tmps mount
비밀 정보를 사용하여 서비스의 컨테이너에 마운트하여 사용합니다.bind mount
및는 volume
또는 플래그를 사용하여 컨테이너에 모두 마운트할 수 있지만, 각 삽입은 -v
기존 --volume
의 변형이 있습니다. tmpfs mount
어떤 경우에는 --tmpfs
플래그를 사용합니다. 그러나 Docker 17.06 이상에서는 바인딩 마운트, 볼륨, tmpfs 마운트에 대해 컨테이너와 서비스에 --mount
플래그를 사용하는 것이 모두 더 많이이기 때문에 권장합니다.
volume
Docker 컨테이너 및 서비스에서 데이터를 유지하는 기본 방법은 다음과 같은 경우에 volume
사용합니다.
volume
생성에 있지 않은 경우, 컨테이너에 처음 마운트될 때 생성됩니다.volume
것은 그대로 유지됩니다.volume
을 읽기/쓰기 또는 비교하면 동시에 마운트할 수 있습니다.volume
은폐적으로 블록 선언을 제거합니다.volume
은 Container Runtime에서 Docker Host의 설정을 분리하는 데 도움이 됩니다.volume
를 사용하면 더 좋습니다.volume
컨테이너를 사용하여 중지한 다음 volume
의 키예프(예: /var/lib/docker/volume/<volume-name>
)를 백업할 수 있습니다.일반적인 경우에는 가능하면 bind mount
사용 volume
하는 것이 좋습니다. 다음과 같은 경우를 bind mount
사용합니다.
/etc/resolv.conf
각 컨테이너에 대해 bind mount
DNS 확인을 제공하고 있습니다.target/
부스를 컨테이너에 마운트하고, Docker Host에서 Maven 프로젝트를 빌드할 때마다, 컨테이너가 재작성된 JAR/WAR에 접근할 수 있습니다.bind mount
에 의존하지 않고, Production-Ready 아티팩트를 이미지에 직접 복사할 수 있습니다.volume
또는 bind mount
사용하는 경우, 다음의 사항에 대해 말씀드리겠습니다.
volume
것을 Mount, 해당 파일 또는 디렉터리가 volume
으로 전달(복사)됩니다. 마찬가지로, 아직 존재하지 않고 특정 volume
을 예비하고 컨테이너를 시작하면 비어있는 volume
것이 생성됩니다. 다른 컨테이너에 필요한 데이터를 미리 알려줄 수 있는 좋은 방법입니다.bind mount
또는 존재하지 않는 volume
것을 Mount한다면, Linux Host에서 파일을 /mnt
에 저장하고 외계인 USB 드라이브가 /mnt
에 Mount되는 것처럼 기존에 존재하는 File 또는 Directory가 Mount를 가져오게 합니다. /mnt
의 컨텐츠들은 USB 드라이브가 Unmount될 때까지, USB 드라이브의 컨텐츠들에 조치를 취합니다. 가려진 파일은 제거된 것을 대체하는 것입니다, bind mount
또는 volume
이 Mount되어 있는 동안은 접근할 수 없습니다.tmpfs mount
은 호스트 시스템이나 컨테이너 내에서 데이터를 유지하지 않을 때 가장 적합합니다. 보안 상의 이유가 있을 수도 있고, 애플리케이션이 많은 비영구적인 상태의 데이터를 작성해야 할 때, 컨테이너의 성능을 보호하기 위해 기다릴 수도 있습니다.
볼륨을 사용하기 전에, 볼륨을 마운트하기 위해 플래그를 보장합니다.
원래는 컨테이너 형태로 -v
, --volume
Docker Clusterin Swarm Mode의 서비스가 --mount
사용되었습니다. 하지만 Docker 17.06부터 면형 Container도 --mount
사용할 수 있게 됩니다. 두 개의 플래그 사이에서 가장 큰 차이를 읽는 -v
것은 모든 옵션을 하나의 Field에 따라 사용하고, --mount
읽어들이는 옵션을 분리하여 사용합니다. 따라서, --mount
가보다 더 많은 정보를 교환할 수 있습니다.
다음은 Flag별 플러그인입니다.
-v
또는--volume
volume
경우, 첫 번째 필드는 volume
의 이름이며, Host Machine에서 유일해야 합니다. 익명 volume
의 경우, 스트 필드는 종료됩니다.ro
(읽기전용을 위한 옵션))입니다.--mount
--mount
카드를 읽는 것은 -v
또는 --volume
보기 길지만, 열쇠의 짧은 시간은 중요하므로 플래그의 가치를 이해하기 쉽습니다.type
은( bind, volume, tmpfs
는) Mount에서 출발합니다.source
의 volume
이름입니다. 익명 volume
을 사용하고자 하는 경우, 해당 필드를 이용하셔도 됩니다. source
또는 src
로 반대할 수 있습니다.destination
은 파일 또는 스키가 컨테이너에 마운트되어 출발합니다. destination, dst
또는 target
으로 반대할 수 있습니다.readonly
옵션이 있으면 컨테이너에 대해 알아보겠습니다.volume-opt
옵션은 옵션 이름과 값으로 되어 키-값을 사용합니다.bind mount
와 달리, volume
의 모든 옵션 --mount
과 -v
플래그를 사용할 수 있습니다. 단, 서비스를 volume
사용하고자 하면 --mount
지원이 이루어집니다.
docker volume create [OPTIONS] [VOLUME]
로을 volume
생성합니다.
docker volume ls [OPTIONS]
로의 volume
전체 목록을 확인합니다.
docker volume inspect [OPTIONS] VOLUME [VOLUMES...]
로 생성한 volume
의 상세 정보를 확인합니다.
docker volume rm [OPTIONS] VOLUME [VOLUME...]
로 생성을 volume
삭제합니다.
--mount
컨테이너를 사용하여 플래그를 사용하세요. 시, volume
을 마운트합니다.
생성된 컨테이너의 상세 정보를 확인합니다. Mounts Field에서 volume
에 대한 상세정보를 교환할 수 있습니다. 마운트 형식은 volume
소스 및 대상의 경로를 해결할 수 있고, 읽기/쓰기가 가능한 모든 것을 가능하게 할 수 있습니다.
컨테이너를 중지하고 생성한 컨테이너를 volume
제거합니다.
Docker Cluster인 Swarm Mode의 Service도 컨테이너와 동일한 방식을 volume
사용할 수 있습니다. 서비스를 시작하고 volume
정의하면, 각 서비스 컨테이너는 자체적으로 volume
사용됩니다. 위치 volume driver
를 사용하는 경우, 컨테이너 중 어느 것도 해당 데이터를 공유할 수 없는 일부 volume driver
는 공유 스토리지를 지원합니다. AWS용 Docker와 Azure용 Docker는 모두 Cloudstor를 사용하여 영구 전원을 지원합니다.
컨테이너를 해당할 때 새로 volume
생성하고, 컨테이너에 마운트할 디렉터리 내에 파일 또는 디렉터리가 있으면(예: /app/
) 디렉터리의 내용이 volume
으로 복사됩니다. 컨테이너는 volume
을 Mount하여 사용하고, 다른 컨테이너도 예전에 volume
컨턴츠에 접근할 수 있습니다.
먼저 컨테이너를 검색할 때, destination
을 /usr/share/nginx/html
로 충전하여, 해당 디렉토리의 내용으로 새로운 nginx-vol
이름의 volume
에 데이터를 충전질할 수 있도록 설장합니다. 해당 디렉토리는 Nginx의 기본 HTML 컨텐츠를 저장하는 장소입니다.
생성된 컨테이너의 상세 정보를 확인합니다. Mounts Field에서 volume
에 대한 상세정보를 교환하실 수 있습니다.
컨테이너를 중지하고 생성한 컨테이너를 volume
제거합니다.
애플리케이션의 경우, Container가 Docker Host로 변경된 사항을 일부 다시 개발할 수 있도록 하여 bind mount
사용하시기 바랍니다. 현재, 다른 컨테이너는 단지 데이터를 읽기만 하고 있고, 수정하지 못해야 할 수 있습니다. 즉, 여러 컨테이너가 동일한 volume
것을 마운트할 수 있으며, 일부 컨테이너는 읽기/쓰기로, 그 외부 컨테이너는 읽기전용으로 마운트하여 사용할 수도 있습니다.
--mount
에 readonly
옵션을 추가하여 컨테이너와 볼륨을 생성합니다.
생성된 컨테이너의 상세 정보를 확인합니다. Mounts Field에서 volume
에 대한 상세정보를 교환할 수 있습니다. readonly
옵션이 적용되어, RW
Key의 가치가 false
로 되어있는 것을 받으실 수 있습니다.
컨테이너를 중지하고 생성한 컨테이너를 volume
제거합니다.
이렇게 volume
사용함으로써, 컨테이너의 데이터를 영구적으로 존속시킬 수 있습니다. 또한 NFS 또는 AWS의 S3와 같은 외부 스토리지 시스템과의 수집을 통해 Docker Machine 내부에서 데이터를 공유할 수 있는 다양한 드라이버가 있습니다. 이 때, volume driver
스토리지 시스템을 추상화하여 사용하기 때문에 애플리케이션을 변경하지 않고도 데이터를 유지할 수 있습니다.
컨테이너란 무엇인가라는 주제부터 시작해서 볼륨을 활용한 컨테이너 데이터 관리까지, 애플리케이션이 컨테이너화하여 어떤 식으로 동작하고, 무엇을 할 것인지에 맞는 항목을 확인했습니다. 현재까지 모든 항목은 단일 Docker Machine 환경으로 제한적으로 생각됩니다. 다음에는 Docker Cluster인 Swarm을 구성하여 이러한 컨테이너를 어떤 방식으로 오케스트레이션할 수 있는지 알아볼게요.
개설 필요 서류 홈택스 로그인(공동,민간 인증서) 사업자등록 신청 서류(온라인에서 직접 기입) 임대차 계약서 사본(임차한 경우)…