“내 컴퓨터에서는 잘 되는데요”라는 말을 들어보셨나요?
개발 환경과 운영 환경의 차이가 만드는 이 문제를 Docker가 근본적으로 해결합니다.
가상머신(VM)과 컨테이너의 차이
이전에는 가상머신(VM)으로 환경을 격리했습니다.
VM은 운영체제 전체를 가상화하기 때문에 수 GB의 공간이 필요하고 부팅만 수 분이 걸립니다.
반면 Docker 컨테이너는 운영체제 커널을 공유하고 필요한 부분만 패키징합니다.
결과적으로 MB 단위의 경량 이미지, 초 단위의 시작 시간이 가능합니다.
Docker의 핵심 개념
- 이미지(Image): 컨테이너의 설계도. 변경 불가한 스냅샷
- 컨테이너(Container): 이미지를 실행한 인스턴스. 실제 프로세스
- Dockerfile: 이미지를 만드는 명령어 모음
- Docker Hub: 이미지를 공유하는 저장소 (GitHub와 같은 개념)
- 볼륨(Volume): 컨테이너 외부에 데이터를 영구 저장하는 방법
기본 Dockerfile 예시 (Python FastAPI)
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
이 파일 하나로 어디서든 동일한 환경을 재현할 수 있습니다.
자주 쓰는 Docker 명령어
docker build -t myapp .— 이미지 빌드docker run -p 8000:8000 myapp— 컨테이너 실행docker ps— 실행 중인 컨테이너 목록docker logs [컨테이너ID]— 로그 확인docker exec -it [컨테이너ID] bash— 컨테이너 내부 접속
개발 현장에서 Docker가 필수인 이유
- 배포 표준화: 개발, 스테이징, 운영 환경 일치
- MSA(마이크로서비스): 서비스별 독립 배포 가능
- 신규 개발자 온보딩:
docker compose up한 줄로 전체 환경 구성 - CI/CD 연동: GitHub Actions, Jenkins에서 Docker 이미지 기반으로 테스트
Docker를 모르는 개발자는 이제 드뭅니다.
지금 당장 Docker Desktop을 설치하고, 직접 만든 앱을 컨테이너로 실행해보세요.
작성한 정보가 조금이나마 유익하고 도움이 되셨다면, 가시기 전에 아래 광고 한번 살짝 눌러주시면 정말 큰 힘이 됩니다. 감사합니다!