학습
JavaScript Docker 기초
JavaScript Docker 기초 — 고급
Docker 기초
1. 도입 (왜 배워야 하는가)
Docker는 현대 소프트웨어 개발에서 필수적인 도구로 자리 잡았습니다. 이 기술은 애플리케이션을 컨테이너화하여 개발, 배포, 관리에 필요한 모든 요소를 포함합니다. Docker를 사용하면 애플리케이션이 어디서나 동일하게 실행될 수 있도록 보장할 수 있습니다. 이는 "내 컴퓨터에서는 잘 되는데"라는 전형적인 문제를 해결해 줍니다.
Docker를 모르면, 서버 환경이나 라이브러리 의존성 문제로 인해 애플리케이션을 배포하는 데 어려움을 겪을 수 있습니다. 또한, 팀원 간의 개발 환경 차이로 인해 협업에 문제가 생길 수 있습니다. 이러한 이유로 Docker의 기초를 이해하고 활용하는 것은 현대 개발자에게 필수적입니다.
2. 핵심 개념 설명
컨테이너
- 정의: 애플리케이션과 그 실행에 필요한 모든 것을 패키징한 격리된 환경.
- 비유: 마치 여러 개의 아파트가 같은 건물 안에 있지만, 각각의 아파트는 독립적으로 운영되는 것과 같습니다.
- 정의: 컨테이너를 생성하기 위한 템플릿. 기본적으로 애플리케이션과 그 환경을 정의합니다.
- 비유: 이미지는 요리를 위한 레시피와 같아서, 요리를 하기 위한 재료와 방법을 제공하는 것입니다.
- Dockerfile 생성
- 해당 Dockerfile로부터 이미지를 빌드하고 컨테이너를 실행하면, Node.js 애플리케이션이 실행됩니다.
FROM node:14: Node.js 14 버전을 베이스 이미지로 사용합니다.WORKDIR /app: 컨테이너 내에서 작업할 디렉토리를 설정합니다.COPY package*.json ./: 의존성 관리를 위한 파일을 컨테이너로 복사합니다.RUN npm install: 복사된 파일을 기반으로 의존성을 설치합니다.COPY . .: 애플리케이션의 나머지 소스 파일을 복사합니다.CMD ["node", "app.js"]: 컨테이너가 시작될 때 실행할 명령을 정의합니다.- 잘못된 코드:
ports: - "80:3000" - 올바른 코드:
ports: - "3000:3000" - 잘못된 코드:
docker build . - 올바른 코드:
docker build --no-cache . - Docker는 애플리케이션을 컨테이너화하여 배포와 관리에 유용합니다.
- 컨테이너와 이미지는 Docker의 핵심 개념입니다.
- Dockerfile과 docker-compose.yml은 애플리케이션을 설정하는 데 필수적입니다.
- 포트 매핑과 이미지 캐시 관련 실수를 주의해야 합니다.
- Docker Compose: 다중 컨테이너 애플리케이션 관리
- Docker Swarm: 클러스터링 및 오케스트레이션
- 쿠버네티스(Kubernetes): 컨테이너 오케스트레이션의 표준
이미지
| 용어 | 정의 |
|---|---|
| 컨테이너 | 애플리케이션을 실행할 수 있는 격리된 환경 |
| 이미지 | 컨테이너를 생성하기 위한 템플릿 |
| Dockerfile | 이미지를 생성하기 위한 명세서 |
3. 기본 코드 예제
Docker의 가장 기본적인 사용법을 보여주는 예제를 살펴보겠습니다.
# 베이스 이미지 지정
FROM node:14
# 작업 디렉토리 생성
WORKDIR /app
# package.json과 package-lock.json 복사
COPY package*.json ./
# 의존성 설치
RUN npm install
# 애플리케이션 소스 복사
COPY . .
# 애플리케이션 실행
CMD ["node", "app.js"]
이 Dockerfile은 Node.js 애플리케이션을 Docker 컨테이너로 패키징하는 방법을 보여줍니다.
실행 결과
코드 한 줄씩 동작 설명
4. 실전 활용 예제
예제 1: 웹 서버 배포
쇼핑몰 웹사이트를 Docker로 배포할 때, 다음과 같은 Dockerfile을 사용할 수 있습니다.
FROM nginx:alpine
COPY ./dist /usr/share/nginx/html
이 예제는 빌드된 웹 애플리케이션을 Nginx 서버에 배포하는 기본적인 방법입니다.
예제 2: 데이터베이스와의 연동
Node.js 애플리케이션과 MongoDB를 Docker로 연결하기 위해 docker-compose.yml 파일을 사용할 수 있습니다.
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- mongo
mongo:
image: mongo
ports:
- "27017:27017"
이 설정은 Node.js 웹 애플리케이션과 MongoDB를 동시에 실행합니다.
5. 흔한 실수와 주의사항
실수 1: 포트 매핑 실수
- 설명: 첫 번째 숫자는 호스트 포트, 두 번째는 컨테이너 포트입니다.
실수 2: 이미지 캐시 무시
- 설명: 캐시를 사용하면 변경 사항이 반영되지 않을 수 있으므로, 수정 후에는 캐시를 무시하고 빌드해야 합니다.