Amazon ECS에서 바인드 탑재 사용
바인드 탑재로 호스트의 파일 또는 디렉터리(예: Amazon EC2 인스턴스)가 컨테이너에 탑재됩니다. 바인드 탑재는 Fargate와 Amazon EC2 인스턴스 모두에서 호스팅되는 태스크에 지원됩니다. 바인드 탑재는 이를 사용하는 컨테이너의 수명 주기에 연결됩니다. 바인드 탑재를 사용하는 모든 컨테이너가 중지되면(예: 태스크가 중지될 때) 데이터가 제거됩니다. Amazon EC2 인스턴스에서 호스팅되는 작업의 경우 작업 정의에 host 및 sourcePath 값(선택 사항)을 지정하여 호스트 Amazon EC2 인스턴스의 수명 주기에 데이터를 연결할 수 있습니다. 자세한 내용은 Docker 설명서에서 바인드 탑재
바인드 탑재의 일반 사용 사례는 다음과 같습니다.
-
하나 이상의 컨테이너에 마운트할 빈 데이터 볼륨을 제공합니다.
-
하나 이상의 컨테이너에 호스트 데이터 볼륨을 마운트합니다.
-
동일한 태스크의 다른 컨테이너에 소스 컨테이너의 데이터 볼륨을 공유합니다.
-
Dockerfile의 경로와 콘텐츠를 하나 이상의 컨테이너에 노출합니다.
바인드 탑재 사용 시 고려 사항
바인드 탑재를 사용할 때는 다음 사항을 고려해야 합니다.
-
플랫폼 버전
1.4.0이상(Linux) 또는1.0.0이상(Windows)을 사용하여 AWS Fargate에 호스팅되는 작업의 경우 기본적으로 바인드 탑재를 위해 최소 20GiB 이상의 임시 스토리지를 수신합니다. 임시 스토리지의 총량은 작업 정의에ephemeralStorage파라미터를 지정하여 최대 200GiB까지 늘릴 수 있습니다. -
태스크가 실행될 때 Dockerfile에서 데이터 볼륨으로 파일을 노출하기 위해 Amazon ECS 데이터 영역은
VOLUME명령을 찾습니다.VOLUME명령에 지정된 절대 경로가 태스크 정의에 지정된containerPath와 동일한 경우VOLUME명령 경로의 데이터가 데이터 볼륨에 복사됩니다. 다음 Dockerfile 예제에서/var/log/exported디렉터리에 있는examplefile이라는 파일이 호스트에 기록된 다음 컨테이너 내부에 마운트됩니다.FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN mkdir -p/var/log/exportedRUN touch/var/log/exported/examplefileVOLUME ["/var/log/exported"]기본적으로 볼륨 권한은
0755로 설정되고 소유자는root로 설정됩니다. 이러한 권한은 Dockerfile에서 사용자 지정할 수 있습니다. 다음 예에서는 디렉터리의 소유자를node로 정의합니다.FROM public.ecr.aws/amazonlinux/amazonlinux:latest RUN yum install -y shadow-utils && yum clean all RUN useraddnodeRUN mkdir -p /var/log/exported && chownnode:node/var/log/exported RUN touch /var/log/exported/examplefile USERnodeVOLUME ["/var/log/exported"] -
Amazon EC2 인스턴스에서 호스팅되는 태스크의 경우
host및sourcePath값이 지정되지 않으면 Docker 대몬이 바인드 탑재를 관리합니다. 컨테이너가 이 바인드 탑재를 참조하지 않으면, Amazon ECS 컨테이너 에이전트 태스크 정리 서비스가 결국 이를 삭제합니다. 기본적으로 이 작업은 컨테이너가 종료되고 3시간 후에 발생합니다. 하지만 이 기간을ECS_ENGINE_TASK_CLEANUP_WAIT_DURATION에이전트 변수로 구성할 수 있습니다. 자세한 정보는 Amazon ECS 컨테이너 에이전트 구성을 참조하세요. 컨테이너의 수명 주기가 끝나더라도 이 데이터를 유지하려면 바인드 탑재에sourcePath값을 지정합니다. -
Amazon ECS 관리형 인스턴스에서 호스팅되는 태스크의 경우 루트 파일 시스템의 일부는 읽기 전용입니다. 읽기/쓰기 바인드 탑재는 영구 데이터를 위한
/var또는 임시 데이터를 위한/tmp와 같은 쓰기 가능한 디렉터리를 사용해야 합니다. 다른 디렉터리에 읽기/쓰기 바인드 탑재를 생성하려고 하면 다음과 유사한 오류와 함께 태스크 실행이 실패합니다.error creating empty volume: error while creating volume path '/path': mkdir /path: read-only file system읽기 전용 바인드 탑재(
mountPoints파라미터에서"readOnly": true로 구성됨)는 호스트의 액세스 가능한 디렉터리 모두를 대상으로 지정할 수 있습니다.쓰기 가능한 경로의 전체 목록을 확인하려면 Amazon ECS 관리형 인스턴스에서 태스크를 실행한 후 인스턴스의 탑재 테이블을 검사하면 됩니다. 호스트 파일 시스템에 액세스하려면 다음 설정을 사용하여 태스크 정의를 생성합니다.
{ "pidMode": "host", "containerDefinitions": [{ "privileged": true,...}] }그런 다음 컨테이너 내부에서 다음 명령을 실행합니다.
# List writable mounts cat /proc/1/root/proc/1/mounts | awk '$4 ~ /^rw,/ || $4 == "rw" {print $2}' | sort # List read-only mounts cat /proc/1/root/proc/1/mounts | awk '$4 ~ /^ro,/ || $4 == "ro" {print $2}' | sort중요
privileged설정은 컨테이너에 호스트에서의 루트 접근 권한과 동등한 확장된 권한을 부여합니다. 이 예제에서는 진단 목적으로 호스트의 탑재 테이블을 검사하는 데 사용됩니다. 자세한 내용은 컨테이너를 privileged로 실행하지 않음(Amazon EC2) 섹션을 참조하세요.컨테이너에서 대화형으로 명령을 실행하는 방법에 대한 자세한 내용은 ECS Exec를 사용하여 Amazon ECS 컨테이너 모니터링 섹션을 참조하세요.