Docker는 애플리케이션을 컨테이너라는 격리된 환경에 담아 어디서든 동일하게 실행할 수 있게 해주는 플랫폼입니다. "내 컴퓨터에서는 잘 되는데요"라는 흔한 문제를 해결해주는 도구로 널리 알려져 있습니다.

가상 머신과 컨테이너의 차이

가상 머신(VM)은 하이퍼바이저 위에 각각 독립된 운영체제를 통째로 올리는 방식이라 무겁고 부팅이 느립니다. 반면 컨테이너는 호스트 운영체제의 커널을 공유하면서 프로세스 단위로 격리되기 때문에 훨씬 가볍고 몇 초 안에 실행됩니다.

기본 개념: 이미지와 컨테이너

Docker 이미지는 애플리케이션 실행에 필요한 코드, 라이브러리, 설정을 담은 읽기 전용 템플릿입니다. 이 이미지를 실행한 상태가 바로 컨테이너입니다.

docker pull nginx              # 이미지 다운로드 docker run -d -p 8080:80 nginx # 컨테이너 실행 docker ps                      # 실행 중인 컨테이너 확인 docker stop <container_id>     # 컨테이너 중지

Dockerfile로 이미지 만들기

직접 만든 애플리케이션을 이미지로 만들려면 Dockerfile을 작성합니다.

FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . CMD ["node", "server.js"]

이 파일을 기반으로 docker build -t my-app . 명령을 실행하면 나만의 이미지를 만들 수 있습니다.

왜 Docker를 쓰는가

개발, 테스트, 운영 환경의 차이에서 발생하는 문제를 원천적으로 줄여주고, 여러 애플리케이션을 하나의 서버에서 충돌 없이 운영할 수 있게 해줍니다. 또한 마이크로서비스 아키텍처와 CI/CD 파이프라인의 핵심 구성 요소로 자리 잡았습니다.