Docker 컨테이너 구축 및 업데이트: 초보자를 위한 실용적인 실습 가이드
Source: Dev.to
Introduction
오늘날 빠르게 변화하는 개발 환경에서는 일관성과 이식성이 매우 중요합니다. 애플리케이션은 서로 다른 머신, 환경, 혹은 클라우드에서도 안정적으로 실행되어야 합니다. Docker는 애플리케이션과 그 의존성을 컨테이너에 패키징함으로써 어디서든 동일하게 동작하도록 해줍니다.
이 실습 가이드에서는 간단한 Node.js “Todo List” 애플리케이션을 컨테이너화하는 방법을 배웁니다. Node.js에 대한 사전 지식은 필요 없으며, Docker가 어떻게 이미지를 빌드하고, 패키징하며, 애플리케이션을 실행하는지 이해하는 데 초점을 맞춥니다.
튜토리얼을 마치면 다음을 할 수 있게 됩니다:
- Dockerfile을 사용해 Docker 이미지 빌드하기
- 컨테이너 안에서 애플리케이션 실행하기
- 로컬 호스트에 앱 노출하기
- 이미지, 컨테이너, 레이어가 어떻게 상호 작용하는지 이해하기
Prerequisites
다음 도구들이 설치되어 있는지 확인하세요:
- Docker Desktop (최신 버전)
- Git (샘플 앱을 클론하기 위해)
- VS Code 또는 기타 코드 편집기
이 도구들을 사용하면 컨테이너를 원활하게 빌드하고 실행할 수 있습니다.
Step 1: Prepare the Application
VS Code에서 새 폴더를 만들고 이름을 container 로 지정합니다.

그 폴더에서 터미널을 엽니다.

샘플 Node.js 애플리케이션을 클론합니다:
git clone https://github.com/docker/getting-started-app.git
다음과 같은 폴더 구조가 보일 것입니다:
getting-started-app/
│── .dockerignore
│── package.json
│── README.md
│── spec/
│── src/
└── yarn.lock

이것이 컨테이너화할 소스 코드입니다.
Step 2: Create the Dockerfile
getting-started-app 폴더 안에 Dockerfile이라는 파일을 만들고 다음 내용을 추가합니다:

# syntax=docker/dockerfile:1
FROM node:lts-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
Explanation
- FROM – 가벼운 Node.js 베이스 이미지를 선택합니다
- WORKDIR – 컨테이너 내부 작업 디렉터리를 설정합니다
- COPY – 소스 코드를 컨테이너로 복사합니다
- RUN – 프로덕션 의존성을 설치합니다
- CMD – 앱을 시작할 명령을 정의합니다
- EXPOSE – 앱이 수신 대기하는 포트를 문서화합니다
Step 3: Build the Docker Image
프로젝트 폴더로 이동합니다:
cd /path/to/getting-started-app

이미지를 빌드합니다:
docker build -t getting-started .

무슨 일이 일어나는지:
- Docker가 Node.js 베이스 이미지를 다운로드합니다(이미 존재한다면 건너뜁니다)
- 앱 파일들을 이미지에 복사합니다
- 의존성을 설치합니다
- 모든 것이
getting-started라는 이름의 Docker 이미지로 패키징됩니다
Step 4: Run Your Container
컨테이너를 시작합니다:
docker run -d -p 127.0.0.1:3000:3000 getting-started
Flags explained
-d– 컨테이너를 백그라운드(분리된) 상태로 실행합니다-p HOST:CONTAINER– 컨테이너 포트 3000을 로컬 포트 3000에 매핑합니다
브라우저에서 http://127.0.0.1:3000 으로 접속하세요. Todo List 앱이 실행될 것입니다. 작업을 추가하고, 완료 표시를 하고, 모든 것이 컨테이너 안에서 어떻게 동작하는지 확인해 보세요.
Step 5: Verify Running Containers
실행 중인 컨테이너를 확인합니다:
docker ps
컨테이너 ID, 이미지 이름, 포트 매핑, 상태 등이 표시되어 앱이 정상적으로 실행 중임을 확인할 수 있습니다.
Step 6: Update the Application
예를 들어 “empty text” 메시지를 다음과 같이 바꾸고 싶다고 가정해 보겠습니다:
You have no todo items yet! Add one above!
src/static/js/app.js 파일을 열고 56번째 줄을 수정합니다:
- No items yet! Add one above!
+ You have no todo items yet! Add one above!

수정된 코드를 반영해 Docker 이미지를 다시 빌드합니다:
docker build -t getting-started .
업데이트된 이미지를 사용해 새 컨테이너를 시작합니다:
docker run -d -p 127.0.0.1:3000:3000 getting-started
이제 변경 사항이 실행 중인 애플리케이션에 반영되었습니다.