[cloud] 컨테이너와 도커 컨테이너
Categories: cloud
Tags: cloud
📌 개인적인 공간으로 공부를 기록하고 복습하기 위해 사용하는 블로그입니다.
정확하지 않은 정보가 있을 수 있으니 참고바랍니다 :😸
[틀린 내용은 댓글로 남겨주시면 복받으실거에요]
클라우드 : 컨테이너와 도커 컨테이너
1. 컨테이너(Container)
컨테이너는 애플리케이션과 그 종속성(라이브러리, 환경 설정, 실행 파일 등)을 하나의 패키지로 묶어, 다양한 환경에서 일관되게 실행할 수 있도록 만든 가볍고 독립적인 실행 단위이다.
컨테이너의 특징
- OS 공유:
- 컨테이너는 호스트 운영체제를 공유하므로 VM(가상머신)과 달리 OS가 중복 설치되지 않아 경량이고 빠르게 실행
- 격리(Isolation)
- 각 컨테이너는 다른 컨테이너와 분리된 환경을 갖지만, 호스트 OS가 손상되면 영향을 받을 수 있다.
- 이식성
- 특정 OS/라이브러리/환경에 종속되지 않고, 컨테이너 이미지를 어느 환경에서든 동일하게 실행 가능
2. 도커(Docker)
- 도커(Docker)는 컨테이너를 손쉽게 만들고, 배포하고, 실행할 수 있도록 종합적인 기능을 제공하는 플랫폼
도커의 주요 요소
- 도커파일(Dockerfile)
- 컨테이너 이미지를 생성하기 위한 명령어와 환경 설정을 적어 놓은 스크립트 파일
- 예: 어떤 OS 기반으로, 어떤 라이브러리를 설치하고, 어떤 포트를 열고, 어떤 명령을 실행할지 등
- 도커 이미지(Docker Image)
- Dockerfile을 빌드하면 생성되는 불변(Immutable) 상태
- 컨테이너 실행에 필요한 모든 정보를 포함(코드, 라이브러리, 설정)
- 한 이미지에서 여러 개의 컨테이너를 똑같이 만들어 실행 가능
- 도커 컨테이너(Docker Container)
- 이미지를 실행시킨 상태
- 실행 시 호스트 컴퓨터와 네트워크, CPU, 메모리 등을 연결해 애플리케이션이 동작
- 상태 변화는 컨테이너 내부에서만 발생하며, 이미지는 영향을 받지 않음
3. 도커 이미지 생성 및 실행 흐름
-
Dockerfile 작성
1 2 3 4 5
FROM ubuntu:20.04 RUN apt-get update && apt-get install -y nodejs COPY . /app WORKDIR /app CMD ["node", "index.js"]
- 예: Node.js 설치, 앱 소스코드 복사, 실행 명령 지정 등
-
도커 이미지 빌드
1
docker build -t my-node-app .
- 이 과정을 통해
my-node-app
이라는 도커 이미지 생성
- 이 과정을 통해
-
도커 컨테이너 실행
1
docker run -d -p 3000:3000 my-node-app
d
는 백그라운드 실행,p
는 포트 매핑- 컨테이너가 실행되면 Node.js 애플리케이션이 3000번 포트에서 동작
4. 도커의 장점과 한계
장점
- 경량화된 배포
- VM처럼 무겁지 않고, 빠르게 생성·종료 가능
- 일관된 환경
- 개발, 스테이징, 프로덕션 등 어떤 환경에서도 동일하게 동작
- 확장성
- 여러 컨테이너를 손쉽게 배포·스케일링
- Kubernetes, Docker Swarm 같은 오케스트레이션 도구와 결합 시 강력
한계
- 호스트 OS 의존성
- 호스트와 커널을 공유하므로, 커널 레벨 문제나 보안 이슈 발생 시 다른 컨테이너에도 영향
- 운영체제 선택 폭
- Docker는 리눅스 기반 컨테이너를 기본으로 하며, 윈도우 컨테이너도 가능하지만 제약이 있을 수 있음
5. 도커 활용 사례
- 개발 환경 통일
- 팀원마다 다른 OS를 쓰더라도, Docker 이미지만 있으면 모두 동일 환경에서 개발 가능
- CI/CD 파이프라인
- 코드 푸시 시 Docker 이미지를 자동 생성·테스트·배포
- 마이크로서비스 아키텍처
- 각 서비스별로 독립된 컨테이너로 분리해 관리
실제 예시
- 구글: 2014년 발표에 따르면, 구글 내부의 대부분 서비스가 컨테이너 기술로 구동되고 매주 약 20억 개 이상의 컨테이너가 운영
- AWS ECS/Fargate, Azure Container Instances 등: 클라우드에서 컨테이너 배포 자동화 제공
6. 컨테이너 vs 가상머신(VM)
항목 | 컨테이너(Container) | 가상머신(Virtual Machine) |
---|---|---|
운영체제 | 호스트 OS 공유 | OS를 독립적으로 설치(게스트 OS) |
부팅 속도 | 매우 빠름 | OS 부팅 시간이 필요(느림) |
자원 효율성 | 경량화(라이브러리만 추가) | 무겁고 자원 소모가 큼 |
격리 수준 | 커널을 공유하므로 완벽한 격리는 아님 | 가상화된 하드웨어로 완벽한 격리 |
사용 예 | Docker, Kubernetes, Containerd 등 | VMware, VirtualBox, Hyper-V 등 |
“컨테이너는 경량화된 독립 실행 환경, 도커는 그 환경을 손쉽게 다룰 수 있게 해주는 도구”
도커 컨테이너 기반으로 서비스하는 방식은 클라우드 시대에 필수적인 스킬이며, Kubernetes와 같은 컨테이너 오케스트레이션 솔루션과 함께 사용하면 자동화된 대규모 배포 환경을 구축할 수 있다.
Leave a comment