💻데브노트소개
🗄️

Docker 입문: 이미지와 컨테이너 개념부터 첫 실행까지

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

"내 컴퓨터에선 잘 됐는데요?" — 이 한마디를 없애려고 나온 게 Docker입니다. 하지만 입문자는 이미지와 컨테이너의 차이부터 막힙니다. 비유하면 이미지는 붕어빵 틀(설계도), **컨테이너는 그 틀로 찍어낸 붕어빵(실행 인스턴스)**입니다. 이미지 하나로 컨테이너를 여러 개 찍을 수 있습니다.

1. Dockerfile 작성

이미지를 만드는 설계도가 Dockerfile입니다. Node.js 앱 예시입니다.

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

주의: package.json을 먼저 복사하고 npm ci를 실행한 뒤 소스를 복사하면, 코드만 바뀔 때 의존성 설치 레이어가 캐시되어 빌드가 훨씬 빨라집니다.

2. 빌드하고 실행하기

# 이미지 빌드 (-t 로 이름:태그 지정)
docker build -t myapp:1.0 .

# 컨테이너 실행 (-d 백그라운드, -p 포트매핑)
docker run -d -p 8080:3000 --name web myapp:1.0

# 실행 중인 컨테이너 확인
docker ps

이제 브라우저에서 localhost:8080으로 접속하면 컨테이너 안 3000 포트로 연결됩니다.

3. run vs exec — 입문자가 가장 헷갈리는 부분

명령어역할비유
docker run이미지로 새 컨테이너 생성+시작붕어빵 새로 굽기
docker exec이미 떠 있는 컨테이너에 명령 실행구운 붕어빵 안 들여다보기
docker start멈춘 컨테이너 다시 시작식은 붕어빵 데우기
# 실행 중인 컨테이너 안에서 셸 열기 (디버깅용)
docker exec -it web sh

# 로그 실시간 확인
docker logs -f web

4. 정리와 청소

docker stop web && docker rm web   # 중지 후 삭제
docker images                       # 이미지 목록
docker system prune -f              # 안 쓰는 리소스 일괄 정리

주의: docker system prune은 멈춘 컨테이너와 dangling 이미지를 지웁니다. 운영 서버에서는 영향 범위를 꼭 확인하세요.

마무리 체크리스트

  • 이미지=설계도, 컨테이너=실행 인스턴스
  • Dockerfile은 자주 안 바뀌는 것부터 복사해 캐시 활용
  • 새로 띄울 땐 run, 떠 있는 것엔 exec
  • -p 호스트:컨테이너로 포트 매핑
  • 작업 후 prune으로 디스크 청소
#Docker#컨테이너#DevOps#인프라
X(트위터)
ADVERTISEMENT