DEV/cs

[CS] Docker란 - 컨테이너 개념과 기본 사용법

강한 2026. 10. 1. 23:42

Docker가 뭐고 가상머신(VM)과 뭐가 다른지, Dockerfile과 기본 명령어 예시로 정리했습니다.


 

Docker란

애플리케이션을 실행에 필요한 환경(라이브러리, 설정 등)까지 통째로 컨테이너라는 단위로 묶어서, 어떤 서버에서든 똑같이 실행되게 해주는 도구입니다. "내 컴퓨터에서는 되는데요"라는 문제를, 환경 자체를 패키징해서 해결합니다.

 

가상머신(VM)과 비교

가상머신(VM)    -     Docker 컨테이너
구조 OS 전체를 가상화 호스트 OS의 커널을 공유, 필요한 부분만 격리
무게 무겁고 느림(수 GB, 분 단위 부팅) 가볍고 빠름(수십 MB, 초 단위 시작)
실행 단위 OS 하나 전체 애플리케이션 단위

VM은 컴퓨터 하나를 통째로 복제하는 느낌이고, 컨테이너는 "이 프로그램 실행에 필요한 것만" 격리해서 담는 느낌입니다. 그래서 컨테이너가 훨씬 가볍고 여러 개를 동시에 띄우기 쉽습니다.

 

Dockerfile - 컨테이너의 설계도

 
dockerfile
FROM openjdk:17-jdk-slim
COPY build/libs/app.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
  • FROM: 베이스 이미지(실행 환경) 지정 - 여기서는 자바 17이 설치된 환경
  • COPY: 빌드된 jar 파일을 이미지 안으로 복사
  • ENTRYPOINT: 컨테이너가 시작될 때 실행할 명령어

이 파일 하나만 있으면, 어떤 서버에서든 "자바 17이 깔려 있고 이 jar가 실행되는" 똑같은 환경을 만들 수 있습니다.

 

기본 명령어

bash
docker build -t my-app .         # Dockerfile로 이미지 만들기
docker run -p 8080:8080 my-app   # 이미지를 컨테이너로 실행 (호스트 8080 → 컨테이너 8080)
docker ps                        # 실행 중인 컨테이너 목록
docker stop <컨테이너ID>          # 컨테이너 중지

docker build로 이미지(설계도대로 만든 실행 패키지)를 만들고, docker run으로 그 이미지를 실제 실행합니다. -p 8080:8080은 컨테이너 안의 8080 포트를 내 컴퓨터(호스트)의 8080 포트로 연결한다는 뜻입니다.

 

왜 쓰는가

  • 환경 일관성: 개발자 PC, 테스트 서버, 운영 서버에서 항상 같은 환경으로 실행됨
  • 빠른 배포: 이미지 하나만 서버에 올리면 실행 환경 설치 없이 바로 구동
  • 격리: 여러 애플리케이션을 한 서버에 띄워도 서로 영향을 주지 않음

 

마무리

Docker는 결국 "실행 환경을 코드(Dockerfile)로 정의해서, 어디서든 똑같이 재현 가능한 패키지(이미지)로 만드는 도구"입니다. 새 서버를 설정할 때마다 라이브러리를 일일이 설치하는 대신, Dockerfile 하나로 환경을 통째로 옮길 수 있다는 게 핵심 장점입니다.