💻데브노트소개
🗄️

개발자를 위한 Docker 입문: 이미지·컨테이너·Dockerfile

데브노트 편집팀·2026.07.11·7분 읽기
X(트위터)
ADVERTISEMENT

"제 컴퓨터에선 잘 됐는데요"라는 말은 환경 차이에서 옵니다. Docker는 앱과 실행 환경을 **하나의 패키지(컨테이너)**로 묶어 어디서나 똑같이 돌게 합니다.

이미지 vs 컨테이너

가장 헷갈리는 개념입니다.

  • 이미지(Image): 실행에 필요한 모든 것을 담은 '설계도'(읽기 전용)
  • 컨테이너(Container): 이미지를 실행한 '실체'(프로세스)

클래스와 인스턴스 관계와 같습니다. 이미지 하나로 컨테이너 여러 개를 띄울 수 있습니다.

Dockerfile: 이미지를 만드는 레시피

# Node.js 앱 예시
FROM node:20-alpine          # 베이스 이미지
WORKDIR /app                 # 작업 디렉터리
COPY package*.json ./        # 의존성 파일 먼저 복사(캐시 활용)
RUN npm ci                   # 의존성 설치
COPY . .                     # 소스 복사
EXPOSE 3000
CMD ["npm", "start"]         # 컨테이너 시작 명령

핵심 최적화: package.json을 먼저 복사해 npm ci를 실행하면, 소스만 바뀌었을 때 의존성 설치 레이어가 캐시되어 빌드가 빨라집니다.

자주 쓰는 명령어

명령역할
docker build -t myapp .Dockerfile로 이미지 빌드
docker run -p 3000:3000 myapp컨테이너 실행(포트 매핑)
docker ps실행 중 컨테이너 목록
docker logs <id>로그 확인
docker exec -it <id> sh컨테이너 내부 접속

이미지 가볍게 만들기

  • alpine 같은 경량 베이스 사용
  • .dockerignorenode_modules, .git 제외
  • 멀티스테이지 빌드로 빌드 도구는 최종 이미지에서 제거
FROM node:20 AS build
# ... 빌드 ...
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html

마무리 체크리스트

  • 이미지=설계도, 컨테이너=실행 인스턴스
  • 의존성 파일 먼저 복사해 캐시 활용
  • .dockerignore로 불필요 파일 제외
  • 운영 이미지는 멀티스테이지 + 경량 베이스

Docker 하나만 익혀도 "환경 때문에" 생기는 문제의 대부분이 사라집니다.

#Docker#컨테이너#인프라#배포
X(트위터)
ADVERTISEMENT