변화를 위해, 오늘은 Docker 컨테이너 자동화 프레임워크에 대한 비교적 짧고 복잡하지 않은 기사를 갖게 됩니다. 우리는 컨테이너 내부에 데이터를 마운트하는 방법, 데이터를 공유하는 방법, 그리고 우리의 인스턴스들을 유용한 시스템으로 만들기 위해 필요한 모든 비트와 조각들을 배울 것입니다.
지금까지, 당신은 - 그리고 그것은 자유로운 용어입니다 - 매우 상세한 입문 가이드를 즐겼고, 그 다음 우리는 서비스, 네트워킹을 만지작거렸고, 몇 가지 까다로운 에러들을 해결했습니다. 이 튜토리얼은 전통을 이어받아, 단계별로, 그래서 단순하고 수정처럼 맑아야 합니다. 시작해 봅시다.
기본 사항
호스트 데이터를 컨테이너 내부에 노출시키는 과정은 상대적으로 간단하며, mount 명령어와 유사합니다. 소스 디렉토리 또는 파일을 제공하고, 그것을 타겟 디렉토리 또는 파일을 가리키도록 합니다. 포트들처럼, 호스트와 컨테이너 조각들로 구성됩니다.
docker run -it -v /root/testing:/dedoimedo centos:latest /bin/bash
우리는 Bash 셸로 새 컨테이너를 실행하고, 호스트의 /root/testing 디렉토리를 컨테이너 내부에서 /dedoimedo 아래에 마운트할 것입니다. 호스트에서, 소스는 NFS 마운트를 포함하여 무엇이든 될 수 있으며, 이는 이것을 사랑스러운 원격 데이터 공유 것으로 효과적으로 만듭니다. 실제로, NFS는 재내보내기를 방지하지만, 이것은 속임수일 뿐입니다, 왜냐하면 당신은 여전히 같은 호스트에서 같은 일을 하고 있는 것이나 다름없기 때문입니다, 종류는.
컨테이너 내부에서, 이제 /dedoimedo 디렉토리의 내용을 확인하고 안에 무엇이 저장되어 있는지 볼 수 있습니다. 그러나 표준, 기본 CentOS 빌드에서, 이것이 우리의 테스트 케이스입니다, 당신은 아마도 에러에 부딪힐 것입니다. 그리고 이것은 관련이 있습니다, 왜냐하면 당신은 유사한 문제를 마주칠 수 있고, 디버그할 준비가 되어 있고 기꺼이 해야 하며, 또한 보안 기능들이 때때로 해로울 수 있음을 보여주기 때문입니다.
ls
ls: cannot open directory .: Permission denied
보안 기능들. 네, 물론, SELinux. 다행히, 이 문제는 고칠 수 있습니다. 모듈에 대한 집행 정책을 변경하거나, 컨테이너가 마운트된 볼륨에 접근하는 것을 허용하는 새 규칙을 추가할 수 있습니다.
setenforce 0
그리고 그 규칙, 만약 당신이 그 길로 가고 싶다면:
chcon -Rt svirt_sandbox_file_t /<volume>
그러면 내용을 볼 수 있고, 파일 쓰기 등을 시작할 수 있습니다. 실제로, 우리가 먼저 호스트를 보고, 마운트된 디렉토리 안에 새 파일을 생성하면, 실제 내용은 물론 제외하고 아래와 같은 것을 보게 될 것입니다:
컨테이너 간 공유
네트워킹으로 했던 것과 매우 유사하게, 당신은 데이터 볼륨 컨테이너가 되도록 하나의 컨테이너 내부의 데이터를 다른 것들에 노출시키고 싶을 수 있습니다. 이것은 당신이 컨테이너들의 기능을 그룹화한다면 매우 유용할 수 있으며, 상당한 양의 공간을 절약할 수 있습니다. 게다가, 당신은 컨테이너들 사이에 볼륨을 체인할 수도 있는데, 이는 호스트 데이터에 동시에 접근하는 서로 다른 컨테이너의 수를 좁히는 것을 허용합니다. 이것은 당신이 호스트에서 견고한 쓰기 잠금 메커니즘을 가지고 있지 않다면 유용할 수 있는데, 이는 유닉스 계열 시스템에서 거의 항상 참입니다.
빠른 예를 해봅시다. 우리는 data-source라는 이름으로 컨테이너를 시작할 것입니다. 그것은 /data 마운트 포인트로 시작할 것입니다. 선택적으로, 우리는 /data가 호스트의 디렉토리에 매핑되도록 확실히 할 수 있지만, 지금은 괜찮습니다. 그런 다음, 우리는 data-source라는 이름의 컨테이너로부터 볼륨을 사용할 두 번째 컨테이너를 생성할 것입니다.
docker run -ti --name data-source -v /data centos:latest /bin/bash
docker run -ti --volumes-from data-source centos:latest /bin/bash
이제 우리의 두 컨테이너를 보면, 둘 다 /data 디렉토리를 가질 것이지만, data-source는 -volumes-from 옵션으로 실행된 모든 컨테이너들의 데이터에 대한 소위 진입점이 될 것입니다. 당신은 많은 데이터 공간을 절약할 수 있고, 당신의 컨테이너들이 원본 데이터를 어떻게 사용하고 접근하는지 제어할 수 있으며, 여러 소프트웨어 구성을 더 쉽게 테스트할 수 있습니다. 전반적으로 매우 훌륭합니다.
[root@68d3ed5e243a data]# pwd
/data
[root@68d3ed5e243a data]# touch STUFF
[root@68d3ed5e243a data]#
그리고 두 번째 컨테이너:
[root@7aed935cc156 /]# ls -la /data
total 4
drwxr-xr-x. 2 root root 18 May 1 11:46 .
drwxr-xr-x. 18 root root 4096 May 1 11:45 ..
-rw-r--r--. 1 root root 0 May 1 11:46 STUFF
[root@7aed935cc156 /]#
다음은 무엇인가?
믿거나 말거나, 우리는 이 지점에서 멈출 것입니다. 백업, 데이터 제거 등과 같이 우리가 할 수 있는 다른 단계들이 있지만, 그것은 별도의 주제입니다. 현재로서는, 우리는 데이터 볼륨들을 가지고 작업하고 그들을 컨테이너 내부의 마운트 포인트로 노출시키기 시작하기에 충분합니다. 경험 법칙으로, 당신은 환경 도구들과 구성들을 위해 읽기 전용 데이터를 사용하고, 빅데이터를 위해 볼륨 컨테이너들을, 테스트를 위해 작고 심플한 디렉토리들과 마운트 포인트들을 사용하고 싶을 수 있습니다.
결론
Docker 볼륨 처리는 상대적으로 간단하며, 저는 이 컨테이너 기술의 이 측면이 여전히 프레임워크의 다른 조각들처럼 성숙도 수준에 도달하기 전에 성장할 필요가 있다고 믿습니다. 그것은 그다지 기능 풍부하지 않으며, 스냅샷, 데이터 분산 및 병렬화에 대한 내장 지원 등을 포함하여 데이터를 제어하는 추가적인 방법들이 있어야 합니다.
어쨌든, 최소한 당신은 이 튜토리얼에서 마운트 포인트 생성과 데이터 볼륨 마운트 방법, 그들을 체인하는 방법, 그리고 길에서 몇 가지 작은 문제들을 고치는 방법을 포함하여 몇 가지 새로운 것들을 배웠습니다. 아마도 이 가이드는 나머지들에 비해 약간 벌거벗은 것처럼 느껴질 수 있지만, 우리는 항상 무겁고 끝없는 기사들을 가질 필요는 없습니다. 때로는, 그것을 짧고 달콤하게 유지하는 것이 좋습니다. 과연, 그 폭탄 발언에, 끝.
치어스.