Docker 기초

Docker는 컨테이너 기술을 사용하여 애플리케이션과 그에 필요한 모든 환경을 패키징하고 배포하는 플랫폼입니다. 개발 환경의 통일과 배포 자동화를 가능하게 합니다.

개요

기존에는 애플리케이션을 배포할 때 서버의 운영체제나 라이브러리 버전 차이로 인해 오류가 발생하는 경우가 많았습니다. Docker는 컨테이너라는 가상화 기술을 통해 애플리케이션과 모든 종속성을 격리된 환경에 담아, 어떤 환경에서도 동일하게 작동하도록 보장합니다. 이는 개발, 테스트, 배포 환경을 일치시켜 개발 프로세스를 단순화합니다.

참고

Docker 컨테이너는 가벼운 가상화 기술이며, 가상 머신(Virtual Machine)과 달리 운영체제 커널을 공유하므로 훨씬 빠르고 효율적입니다.

핵심 개념

Docker를 사용하기 위해 알아야 할 세 가지 핵심 개념입니다:

개념 설명
Dockerfile 컨테이너 이미지를 만들기 위한 스크립트 파일입니다. 이미지에 포함될 내용(베이스 이미지, 파일, 명령어 등)을 정의합니다.
Image 애플리케이션과 실행 환경을 담은 템플릿입니다. 컨테이너를 생성할 때 사용되며, 변경 불가능(Immutable)합니다.
Container 이미지를 실행한 상태입니다. 격리된 환경에서 애플리케이션이 실행되는 프로세스라고 생각할 수 있습니다.

주요 명령어

Docker를 사용하면서 자주 사용되는 기본 명령어입니다.

CLI
# 이미지 빌드
docker build -t my-app .

# 컨테이너 실행
docker run -d -p 8080:80 my-app

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

# 모든 이미지 목록 확인
docker images

사용 예제

간단한 Node.js 애플리케이션을 Docker 컨테이너로 만드는 예제입니다.

Dockerfile
Dockerfile
FROM node:18-alpine
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "node", "server.js" ]
server.js
JavaScript
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello from Docker!');
});

app.listen(port, () => {
  console.log(App listening at http://localhost:${port});
});

주의사항 및 팁

  • Docker Compose를 사용하면 여러 컨테이너를 하나의 파일로 정의하고 관리할 수 있습니다. (예: 웹 서버 컨테이너 + 데이터베이스 컨테이너)
  • .dockerignore 파일을 사용하여 이미지에 포함되지 않아야 할 파일(예: node_modules)을 지정할 수 있습니다.
  • Docker Hub와 같은 컨테이너 레지스트리를 통해 이미지를 공유하고 배포할 수 있습니다.
주의

컨테이너는 기본적으로 휘발성(Stateless)입니다. 컨테이너가 삭제되면 내부 데이터도 사라집니다. 중요한 데이터는 볼륨(Volume)을 사용하여 호스트 시스템에 영구적으로 저장해야 합니다.