반응형
1. 도커(Docker)란?
- 도커 = 컨테이너 기술을 쉽게 다루는 도구
- 보통 서버에 프로그램을 설치하려면 운영체제마다 환경이 다르고, 버전이 달라서 실행이 잘 안 되는 경우가 많다. 예를 들어 Mac에서 실행한 프로그램을 그대로 Linux 에 옮겨도, 환경 차이와 상관없이 프로그램이 잘 실행될 수 있도록 해주는 기술이다.
- 도커는 프로그램 실행에 필요한 모든 것(코드, 라이브러리, 환경)을 묶음(package) 으로 만들어서 어디서든 똑같이 실행되도록 도와준다.
2. 컨테이너(Container)란?
- 컨테이너 = 실행 중인 도커 앱
- 도커가 "앱 실행 파일 + 환경"을 하나의 이미지(Image) 로 만든 뒤, 그것을 실행하면 → "컨테이너"가 되는 것.
- 즉, 이미지 = 설계도, 컨테이너 = 실제 실행된 앱 인스턴스.
비유:
- 이미지 = 컵케이크 레시피
- 컨테이너 = 그 레시피대로 실제 만든 컵케이크
3. 도커 이미지(Image)란?
- 실행 파일 + 환경 + 의존성 패키지 + 설정이 합쳐진 앱의 완전한 스냅샷
- 개발자가 만든 앱을 "이미지"로 만들면, 다른 사람이 받아서 바로 실행할 수 있다.
- Node.js 웹서버를 이미지로 만들면, 다른 사람은 그냥 docker run 명령어 한 줄로 서버 실행 가능.
- 실제로 이미지는 단일 파일이 아니며, 물리적으로 여러 개의 작은 파일로 구성되어 있다. 도커가 이 파일을 조립해 컨테이너의 내부 파일 시스템을 만든다.
4. 레지스트리(Registry)란?
- 이미지를 보관하는 창고, 이미지를 제공하는 저장소
- 도커 이미지는 용량도 크고 공유해야 할 때가 많아서, 중앙에 올려두고 필요할 때 pull 해서 받아온다.
- 가장 유명한 건 Docker Hub로, 무료로 제공되는 공개 레지스트리이다.
- 규모가 있는 회사는 사내 네트워크가 전용 클라우드 환경에 자사의 도커 레지스트리를 별도로 꾸미는 경우가 많다.
- 이미지의 전체 이름(이미지 참조)은 '레지스트리의 도메인/이미지 작성자의 계정 이름/이미지 레포지터리 이름/이미지태그'로 구성되어 있고, 이는 레지스트리에서 식별자 역할을 한다. 이미지 태그의 경우 같은 레포지토리에서 구분하기 위한 식별자이다. 기존의 레포지터리가 없는 이미지를 Docker hub에 push하면 레포지터리가 새로 생성되고, 기본적으로 이는 공개 상태이다.
비유:
- 이미지 = 앱 실행 파일
- 레지스트리 = 앱을 저장하는 "앱스토어" 같은 창고
5. AWS ECR (Elastic Container Registry)
- AWS가 제공하는 사설 Docker Hub 같은 것이다.
- Docker Hub는 공개 저장소라서 누구나 볼 수 있지만, 기업 서비스는 보안상 사설 레지스트리가 필요하다.
- ECR은 AWS 안에서만 접근 가능한, 보안된 이미지 저장소 역할을 한다.
- EC2, ECS, EKS(쿠버네티스) 같은 AWS 서비스에서 바로 가져다 쓸 수 있어서 편리하다.
- 기본적으로 비공개이며, IAM 권한이 있어야만 접근이 가능하다. EC2에서 접근하려면 IAM 권한 필요!
- 권한은 레포지토리 단위로 관리된다.
- 레포지토리는 도커 이미지가 저장되는 "폴더" 같은 단위이다. 즉, 특정 애플리케이션의 도커 이미지를 버전(tag) 별로 보관하는 공간이다.
- 이러한 권한은 AWS IAM 정책 또는 레포지토리 정책(JSON 문서) 으로 설정한다.
예시:
- 내가 만든 “side-project-app-backend” 이미지를 ECR에 올려둠.
- EC2 서버에서 docker pull 하면 그 이미지 바로 받아서 실행 가능. (단, IAM 권한 필요)
- 개발팀은 'dating-app-backend' 레포지토리에 pull/push 가능, qa 팀은 pull만 가능, 외부 파트너는 아예 접근 불가
컨테이너(Container)와 가상 머신의 차이
하나의 컴퓨터에서 여러 애플리케이션을 실행하기 위해서 가상 머신을 사용할 수 있다. 가상 머신은 각각의 머신이 자신만의 운영체제를 가지며, 이 운영체제는 가상 머신이 존재하는 컴퓨터의 CPU와 메모리 자원을 상당히 차지한다. 하지만 컨테이너는 서로 독립적인 환경을 가지지만 컴퓨터의 CPU, 메모리를 서로 공유한다. 따라서 한 컴퓨터에서 많은 수의 애플리케이션을 올리면서 자원을 효율적으로 쓸 수 있다.
반응형
'development' 카테고리의 다른 글
| Docker: 헬스 체크와 디펜던시 체크로 신뢰성 확보하기 (0) | 2025.09.14 |
|---|---|
| Dockerfile과 Docker Compose (0) | 2025.09.10 |
| 서버 환경 구성하기4 - 성능과 가용성을 보장하기 (0) | 2025.09.07 |
| 서버 환경 구성하기3 - 정적 콘텐츠를 낮은 비용으로 (0) | 2025.09.07 |
| 서버 환경 구성하기2 - AWS 기초 공부하기 (0) | 2025.09.03 |