Docker 입문: 이미지와 컨테이너 개념부터 첫 실행까지
데브노트 편집팀·2026.06.20·7분 읽기
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으로 디스크 청소
ADVERTISEMENT
함께 보면 좋은 글
백엔드·인프라· 7분
개발자를 위한 Docker 입문: 이미지·컨테이너·Dockerfile
"제 컴퓨터에선 됐는데요"를 끝내는 Docker. 이미지와 컨테이너의 차이, Dockerfile 작성법, 자주 쓰는 명령어를 처음부터 정리합니다.
2026.07.11
백엔드·인프라· 6분
환경 변수와 비밀값 관리: .env를 커밋하면 안 되는 이유
.env로 설정을 분리하는 이유, .gitignore와 .env.example 패턴, NEXT_PUBLIC_ 접두사의 노출 위험, 키가 유출됐을 때 대처까지 정리합니다.
2026.06.10
백엔드·인프라· 6분
REST vs GraphQL: 무엇을 언제 선택할까
오버페칭·언더페칭 문제부터 캐싱·러닝커브까지. REST와 GraphQL의 본질적 차이와 프로젝트별 선택 기준을 실전 관점에서 비교합니다.
2026.07.10