오늘은 Docker의 기본 개념부터 Docker Compose, CI/CD, 그리고 AWS ECS까지 전체적인 컨테이너 배포 흐름을 정리했다.
🐳 Docker
❓ Docker는 언제 사용할까?
다음과 같은 상황에서 Docker를 사용하는 것이 효과적이다.
- 일관된 개발 환경이 필요할 때
- 개발자마다 환경이 달라도 동일한 컨테이너를 실행하기 때문에 환경 차이로 인한 오류를 줄일 수 있다.
- 애플리케이션을 빠르게 배포하고 싶을 때
- MSA(Microservice Architecture)를 구축할 때
- CI/CD 파이프라인을 구성할 때
- 리소스 효율을 높이고 싶을 때
- 애플리케이션 간 격리가 필요할 때
- 서비스를 쉽게 확장(Scaling)하고 싶을 때
- Kubernetes와 함께 운영하고자 할 때
🤔 핵심 개념
📦 Image
Docker Image는 애플리케이션 실행에 필요한 모든 요소를 포함한 읽기 전용 템플릿이다.
이미지에는 다음과 같은 내용이 포함된다.
- 애플리케이션 코드
- Runtime
- 라이브러리
- 환경 변수
- 설정 파일
즉, 컨테이너를 생성하기 위한 설계도(청사진) 역할을 한다.
🚀 Container
Container는 Docker Image를 실제로 실행한 상태이다.
이미지가 정적인 템플릿이라면 컨테이너는 동적으로 실행되는 환경이다.
특징
- 독립된 공간에서 실행된다.
- 필요한 모든 의존성을 포함한다.
- 하나의 호스트에서 여러 컨테이너를 동시에 실행할 수 있다.
📝 Dockerfile
Dockerfile은 Docker 이미지를 생성하기 위한 스크립트 파일이다.
이미지를 만드는 과정을 코드로 작성하기 때문에
- 이미지 생성 자동화
- 일관된 환경 구성
- 유지보수 용이
라는 장점이 있다.
☁️ Docker Hub
Docker Hub는 Docker 이미지를 저장하고 공유하는 공식 이미지 저장소(Registry) 이다.
필요한 이미지를 다운로드하거나 직접 만든 이미지를 업로드하여 사용할 수 있다.
💾 Volume
Volume은 컨테이너의 데이터를 영구적으로 저장하기 위한 기능이다.
컨테이너는 삭제되면 내부 데이터도 함께 삭제되지만,
Volume을 사용하면 데이터는 컨테이너와 분리되어 유지된다.
주로 사용하는 경우
- Database 데이터
- 로그 파일
- 업로드 파일 저장
🌐 Network
Docker Network는 컨테이너 간 통신을 담당하는 기능이다.
기본적으로 Docker는 Bridge Network를 사용한다.
🌐 Docker Network 종류
1. Bridge Network
가장 기본적으로 사용되는 네트워크이다.
특징
- 별도 설정이 없으면 자동으로 Bridge Network 사용
- 같은 Bridge Network에 있는 컨테이너끼리 통신 가능
- 외부와는 NAT(Network Address Translation)를 통해 통신
- 단일 서버에서 여러 컨테이너를 연결할 때 적합
2. Host Network
컨테이너가 호스트의 네트워크를 그대로 사용한다.
장점
- NAT를 거치지 않아 성능이 좋다.
단점
- 네트워크 격리가 없다.
- 포트 충돌 가능성이 있다.
- 보안상 위험할 수 있다.
3. Overlay Network
여러 Docker Host에 존재하는 컨테이너를 연결하기 위한 네트워크이다.
주로
- Docker Swarm
- Kubernetes
같은 오케스트레이션 환경에서 사용된다.
대규모 클라우드 환경이나 분산 시스템 구축 시 활용된다.
💻 Docker vs Virtual Machine
구분DockerVirtual Machine
| 동작 방식 | 호스트 OS 커널 공유 | Guest OS 포함 |
| 시작 속도 | 매우 빠름(초 단위) | 느림(분 단위 가능) |
| 리소스 사용 | 가볍다 | 무겁다 |
| 이식성 | 높음 | 낮음 |
| 보안 격리 | VM보다 약함 | 매우 강함 |
| 운영체제 | 호스트 OS와 같은 커널 사용 | 서로 다른 OS 실행 가능 |
📌 정리
Docker 장점
- 빠른 실행 속도
- 낮은 리소스 사용량
- 높은 이식성
- 배포가 간편
Docker 단점
- 호스트 OS 커널에 의존한다.
- VM보다 보안 격리가 약하다.
VM 장점
- 완전한 운영체제 격리
- 다양한 운영체제 실행 가능
VM 단점
- 부팅 시간이 길다.
- 리소스를 많이 사용한다.
🐙 Docker Compose
Docker Compose는 여러 개의 Docker 컨테이너를 하나의 파일로 정의하고 실행할 수 있도록 해주는 도구이다.
서비스 간의 의존성을 쉽게 관리할 수 있으며, 복잡한 환경을 간단하게 구성할 수 있다.
📜 Docker Compose 기본 구조
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
app:
build: .
ports:
- "8081:8080"
depends_on:
- db
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
주요 옵션
- version
- Compose 파일 버전
- services
- 실행할 컨테이너들을 정의
- image
- 사용할 Docker 이미지
- build
- Dockerfile을 이용해 이미지 생성
- ports
- 포트 매핑
- depends_on
- 다른 서비스가 먼저 실행되도록 설정
- environment
- 환경 변수 설정
🔄 CI/CD
CI/CD는 빌드, 테스트, 배포를 자동화하는 개발 방식이다.
✔️ CI (Continuous Integration)
지속적인 통합을 의미한다.
개발자가 코드를 Push하면 자동으로
- Build
- Test
- Code Quality 검사
등을 수행하여 오류를 빠르게 발견할 수 있다.
장점
- 빠른 피드백
- 코드 품질 향상
- 버그 조기 발견
✔️ CD (Continuous Delivery / Continuous Deployment)
지속적인 배포를 의미한다.
테스트를 통과한 애플리케이션을 자동으로 운영 환경에 배포한다.
장점
- 반복 작업 자동화
- 배포 실수 감소
- 일관된 배포
- 개발 속도 향상
📌 CI/CD의 장점
- 빠른 피드백
- 자동화된 프로세스
- 일관된 배포
- 높은 품질 유지
- 개발 생산성 향상
☁️ Amazon ECS
Amazon ECS(Elastic Container Service)는 AWS에서 제공하는 완전관리형(Container Orchestration) 서비스이다.
Docker 컨테이너를 쉽게 배포하고 운영할 수 있도록 지원한다.
특징
- Docker 컨테이너 관리 자동화
- AWS 서비스와 높은 연동성
- Kubernetes보다 비교적 설정이 간단
- 소규모~중규모 프로젝트에서 많이 사용
- Serverless(Fargate) 방식 지원
ECS와 Fargate
ECS는 EC2 기반과 Fargate 기반으로 사용할 수 있다.
EC2 방식
- 직접 EC2를 생성하고 관리해야 한다.
- 서버 설정을 자유롭게 할 수 있다.
Fargate 방식
- 서버를 직접 관리할 필요가 없다.
- 컨테이너만 실행하면 된다.
- 사용한 만큼만 비용을 지불한다.
- Docker는 애플리케이션 실행 환경을 컨테이너 단위로 표준화하는 기술이다.
- Image는 설계도, Container는 실행 중인 애플리케이션이다.
- Dockerfile을 이용하면 이미지를 자동으로 생성할 수 있다.
- Volume을 사용하면 컨테이너가 삭제되어도 데이터를 유지할 수 있다.
- Bridge, Host, Overlay Network는 각각 사용 목적이 다르다.
- Docker Compose는 여러 컨테이너를 하나의 YAML 파일로 관리할 수 있게 해준다.
- CI는 코드 통합과 테스트를 자동화하고, CD는 배포를 자동화한다.
- Amazon ECS는 AWS에서 Docker 컨테이너를 쉽게 운영할 수 있도록 지원하는 완전관리형 오케스트레이션 서비스이며, Fargate를 이용하면 서버를 직접 관리하지 않아도 된다.
'개발 공부 > Java' 카테고리의 다른 글
| [TIL] 대규모 시스템 설계 기초 (0) | 2026.07.28 |
|---|---|
| [TIL] Redis 자료구조와 캐싱(Cache) (0) | 2026.07.28 |
| [TIL]MSA-보안부터 이벤트 드리븐까지 (0) | 2026.06.30 |
| [TIL] MSA - Eureka, LoadBalancer, FeignClient 이해하기 (0) | 2026.06.29 |
| [PLUS] Spring Cloud Eureka & Load Balancing (0) | 2026.06.29 |
