인프라 · Docker
Docker
내 앱과 그 실행 환경(OS·라이브러리·설정)을 하나의 상자(컨테이너)로 묶어, 어디서든 똑같이 실행되게 해주는 도구입니다. "내 컴퓨터에선 되는데요?" 문제를 없애줍니다.
한 줄로
Docker? 는 앱을 이미지로 굽고, 그 이미지를 컨테이너로 실행합니다. 가상머신(VM)보다 가볍고 빠르게 뜨며, 같은 이미지는 노트북·서버·클라우드 어디서나 동일하게 동작해요.
이미지는 "요리 레시피", 컨테이너는 "그 레시피로 만든 실제 요리 한 그릇". 레시피 하나로 같은 요리를 몇 그릇이든 똑같이 만들 수 있습니다.
왜 / 어디에 쓰나
- 개발 환경 통일 — 팀원 모두 같은 DB·버전으로 시작(설치 지옥 제거)
- 의존 서비스 띄우기 — PostgreSQL·Redis·Kafka를 명령 한 줄로 로컬 실행
- 배포 — 빌드한 이미지를 그대로 서버/클라우드에 올림(환경 차이 없음)
- CI — 빌드·테스트를 깨끗한 컨테이너에서 재현 가능하게
핵심 개념 4가지
| 개념 | 설명 |
|---|---|
| 이미지(Image) | 앱+환경을 굳혀 만든 읽기전용 템플릿. 레지스트리에서 받거나 직접 빌드. |
| 컨테이너(Container) | 이미지를 실행한 인스턴스. 가볍게 뜨고 지울 수 있음. |
| Dockerfile | 이미지를 어떻게 만들지 적은 레시피 파일. |
| 레지스트리(Registry) | 이미지 저장소(Docker Hub 등). pull로 받고 push로 올림. |
핵심 명령
# 이미지 받고 컨테이너 실행 (예: PostgreSQL) docker run --name pg -e POSTGRES_PASSWORD=secret -p 5432:5432 -d postgres:16 docker ps # 실행 중인 컨테이너 목록 docker logs -f pg # 로그 보기 docker exec -it pg bash # 컨테이너 안으로 들어가기 docker stop pg && docker rm pg # 중지 후 삭제 # 내 앱을 이미지로 빌드 → 실행 docker build -t myapp:1.0 . docker run -p 8080:8080 myapp:1.0
Dockerfile 예시
# Spring Boot jar를 담는 간단한 이미지 FROM eclipse-temurin:17-jre COPY build/libs/study.jar app.jar EXPOSE 8084 ENTRYPOINT ["java", "-jar", "app.jar"]
여러 컨테이너는 Compose로
앱 + DB처럼 여러 컨테이너를 한 번에 정의·실행하려면 docker compose 를 씁니다.
# docker-compose.yml
services:
db:
image: postgres:16
environment: { POSTGRES_DB: studydb, POSTGRES_PASSWORD: secret }
ports: ["5432:5432"]
# 실행: docker compose up -d이 프로젝트와의 관계
이 프로젝트의 PostgreSQL을 직접 설치하는 대신 docker run ... postgres 로 띄우면 환경 세팅이 훨씬 간단합니다.
더 나아가 백엔드(Spring Boot)를 이미지로 빌드해 배포할 수 있어요.
여러 서비스를 묶는 다음 단계는 Kubernetes입니다.
다음 단계
- 컨테이너 여러 개를 자동으로 배치·복구·확장 → Kubernetes
- 이미지가 도는 바탕 OS·명령 → Linux