반응형
💪동기
- 현재는 redis와 mysql만 도커 이미지로 사용하고 spring 프로젝트는 도커 이미지로 사용하고 있지 않았음. 배포를 따로 하지 않았기 때문에 문제가 되지 않았음. 하지만 배포를 하게 되면 spring 프로젝트도 도커 이미지로 빌드 되기 때문에 이를 저장할 저장소가 필요했음.
🏃♂️목표
- 도커 이미지를 저장할 저장소 찾기
🗒️데이터 특성 파악
- 도커 이미지가 어떻게 저장돼있는지 알아야 이를 저장할 공간을 선정할 수 있음.
- docs.microsoft에 따르면 도커 이미지는 연속된 레이어로 구성된 파일 묶음임.[1]
- 해당 레이어는 윈도우 기준 C:\\ProgramData\\docker에 저장돼 있지만, “image”와 “windowfilter” 디렉토리에 나눠져 있음.[2]
- 도커 이미지를 다룰 때 layer directories를 사용하지 말고 docker 명령어와 같은 추상화된 인터페이스를 사용하기를 권장함.[3]
- 도커 이미지 데이터를 직접 다루지 않고 CLI와 같은 인터페이스를 사용해서 다뤄야함.
출처 : docs.microsoft
[1] container images are a bundle of files expressed as a series of layers.
[2] layers are stored in C:\\ProgramData\\dockerand split across the "image" and "windowsfilter" directories.
[3] You should not modify any files in the layer directories - they're carefully managed using commands such as:
- docker images
- docker rmi
- docker pull
- docker load
- docker save
💻DB 종류 선정
후보군 선정
docker-hub는 기존에 사용하고 있는 저장소라서 후보군에 선정 됐습니다. 현재 AWS 클라우드 서비스를 사용하고 있었기 때문에 해당 서비스에서 docker 이미지를 저장할 수 있는 도구가 어떤게 있는지 확인함. 그중 S3와 ECR을 후보군으로 선정함. 이유는 아래와 같음.
- Docker-hub
- 기존에 사용하고 있는 저장소.
- AWS S3
- AWS에서 지원하는 가장 간단한 저장소
- AWS ECR
- AWS에서 지원하는 컨테이너 레지스트리.
🐳Docker-hub
What?
- 클라우드 기반 레포지토리. 도커 유저들은 도커 허브를 통해 컨테이너 이미지를 생성, 테스트, 저장 그리고 배포할 수 있음.
장단점?
- 장점
- 가장 간단하게 구현 가능함.
- 프로젝트가 현재 사용하는 방법임.
- 단점
- 권한 관리를 체계적으로 하지 못함.
- 클라우드 서비스로 AWS를 사용하지만, 컨테이너 이미지 관리는 도커 허브에서 하기 때문에 사용자가 관리해야 하는 서비스가 많음.
👝AWS S3
What?
- 확장성, 데이터 가용성, 보안 및 성능을 제공하는 객체 스토리지 서비스.
- docs.aws.amazon.com에 의하면 객체 값은 바이트 시퀀스이며 모든 유형의 파일은 S3에 저장될 수 있다.[2] 이미지, 백업, 데이터, 동영상 등 모든 유형의 파일을 S3 버킷에 업로드할 수 있습니다.
출처 : docs.aws.amazon.com
[1] 객체 값은 임의의 바이트 시퀀스입니다. 객체 크기는 0TB 이상 5TB까지 가능합니다. 자세한 내용은 객체 업로드섹션을 참조하세요.
[2] 이미지, 백업, 데이터, 동영상 등 모든 유형의 파일을 S3 버킷에 업로드할 수 있습니다.
장단점?
- 장점
- 클라우드 관리 용이성 : 클라우드 서비스를 이용하는 AWS에서 컨테이너 관리도 함께 하기 때문에 사용자가 관리하는 서비스가 적음.
- 단점
- 직접 저장 불가 : 도커 이미지는 단일 파일로 존재하는게 아니라 “Image”와 “windowfilter”에 나눠서 저장됐기 때문에 S3에 바로 저장할 수 없음.
- 추가 설치 필요 : Docker registry를 S3에 설치 후 도커 이미지를 CLI와 같은 인터페이스로 저장해야함.
- 많은 설정 변경 비용 발생 : 현재 프로젝트에서 변경 해야 할 부분이 많음. 현재 프로젝트는 도커 hub를 사용하는데 S3를 사용하게 되면 local에서 테스트하게 될 Testcontainer도 S3로부터 컨테이너 정보를 가져와야함.
📥AWS ECR
What?
- 안전하고 확장 가능하고 신뢰할 수 있는 AWS 관리형 컨테이너 이미지 레지스트리 서비스.
- AWS IAM을 사용하여 리소스 기반 권한을 가진 프라이빗 레포지토리 지원.
- 컨테이너 이미지를 Amazon S3에 저장함.
- 출처 : docs.aws.amazon.com [1] Amazon ECR은 컨테이너 이미지 및 아티팩트를 Amazon S3에 저장합니다.
장단점
- 장점
- 클라우드 관리 용이성 : 클라우드 서비스를 이용하는 AWS에서 컨테이너 관리도 함께 하기 때문에 사용자가 관리하는 서비스가 적음.
- 컨테이너 관리 용이성 : S3를 이용하여 컨테이너를 쉽게 관리할 수 있음.
- 단점
- 많은 설정 변경 비용 발생 : 현재 프로젝트에서 변경 해야 할 부분이 많음. 현재 프로젝트는 도커 hub를 사용하는데 ECR를 사용하게 되면 local에서 테스트하게 될 Testcontainer도 ECR로부터 컨테이너 정보를 가져와야함.
📌결론
- Docker-hub, AWS S3, AWS ECR 순으로 구현.
- AWS ECR를 사용하는게 가장 좋지만, 점진적인 개발을 위해 Docker-hub부터 도입하는게 좋다고 판단함.
반응형
'데이터베이스(DB)' 카테고리의 다른 글
Session storage 선택 과정, Redis vs Memcached (0) | 2022.09.05 |
---|---|
[DB] 정규화란? 정규형이란? Why로 꼬리질문 하며 깊게 알아보자. (0) | 2022.05.05 |
[DB] 이상현상이란? 함수 종속성이란? 꼬리 질문하며 살펴보자. (0) | 2022.05.01 |