Docker - 컨테이너 기반 애플리케이션 배포 및 실행 플랫폼
1. Docker란?
Docker는 애플리케이션을 실행하기 위한 컨테이너(Container)를 생성, 배포, 관리할 수 있는 오픈 소스 플랫폼이다.
컨테이너는 애플리케이션과 그에 필요한 모든 라이브러리, 종속성을 하나의 패키지로 묶어 제공하며, 개발 환경과 운영 환경 간의 차이를 최소화한다.
Docker를 사용하면 소프트웨어가 어디에서나(로컬 개발 환경, 테스트 서버, 클라우드) 동일하게 실행될 수 있다.
2. Docker의 주요 개념
- 이미지(Image)
- 컨테이너를 생성하는 템플릿으로, 애플리케이션과 실행에 필요한 환경을 포함한다.
- 예를 들어, Python 애플리케이션 실행을 위한 이미지에는 Python 런타임, 의존성 패키지 등이 포함될 수 있다.
- 컨테이너(Container)
- 이미지를 기반으로 실행되는 애플리케이션의 인스턴스이다.
- 컨테이너는 독립된 환경에서 실행되며, 동일한 호스트 내의 다른 컨테이너와 격리된다.
- Dockerfile
- 이미지를 생성하기 위한 설정 파일이다.
- 애플리케이션이 어떤 환경에서 실행되어야 하는지 명시한다.
- Docker Hub
- Docker 이미지가 저장되고 공유되는 클라우드 기반 저장소이다.
- Docker Hub에서 미리 만들어진 이미지를 다운로드하거나, 자신의 이미지를 업로드할 수 있다.
3. Docker의 주요 특징
- 경량화된 가상화
- 기존 가상 머신(VM)에 비해 더 적은 리소스로 애플리케이션 실행 환경을 제공한다.
- 컨테이너는 운영체제 커널을 공유하므로 빠르고 효율적이다.
- 이식성
- “한 번 작성하면 어디서나 실행 가능”이라는 철학으로, 개발 환경, 테스트 환경, 운영 환경 간의 불일치를 줄인다.
- 확장성
- 컨테이너를 쉽게 추가하거나 삭제하여 시스템을 확장할 수 있다.
- 마이크로서비스 아키텍처에 적합하다.
- 격리성
- 각 컨테이너는 독립된 환경에서 실행되어, 다른 컨테이너의 영향을 받지 않는다.
4. Docker 설치
4.1 설치 명령
Docker는 Windows, macOS, Linux에서 사용할 수 있다.
- Windows/macOS: Docker Desktop 다운로드
- Linux: 다음 명령어로 설치
1
2
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
4.2 설치 확인
설치가 완료되면 다음 명령어로 Docker가 정상적으로 실행되는지 확인한다
1
docker --version
5. Docker의 기본 사용법
5.1 Docker 이미지 다운로드
Docker Hub에서 이미지 다운로드
1
docker pull 이미지_이름:태그
예: 최신 버전의 Ubuntu 이미지 다운로드
1
docker pull ubuntu:latest
5.2 컨테이너 실행
Docker 이미지를 실행하여 컨테이너 생성:
1
docker run -it 이미지_이름
예: Ubuntu 컨테이너 실행
1
docker run -it ubuntu
5.3 컨테이너 목록 확인
실행 중인 컨테이너 목록 확인
1
docker ps
모든 컨테이너(종료된 컨테이너 포함) 보기
1
docker ps -a
5.4 컨테이너 중지 및 삭제
실행 중인 컨테이너 중지
1
docker stop 컨테이너_ID
컨테이너 삭제
1
docker rm 컨테이너_I
5.5 Dockerfile 작성 예제
간단한 Node.js 애플리케이션의 Dockerfile 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Dockerfile
# Node.js 이미지를 기반으로
FROM node:16
# 작업 디렉토리 설정
WORKDIR /app
# 종속성 복사 및 설치
COPY package*.json ./
RUN npm install
# 애플리케이션 소스 복사
COPY . .
# 애플리케이션 실행
CMD ["node", "index.js"]
# 컨테이너가 3000번 포트를 사용
EXPOSE 3000
6. Docker Compose
Docker Compose는 여러 개의 컨테이너를 정의하고 관리할 수 있는 도구이다.
docker-compose.yml 파일을 사용해 여러 컨테이너를 한 번에 실행할 수 있다.
docker-compose.yml 예제
아래 예제는 Node.js 애플리케이션과 PostgreSQL 데이터베이스를 실행하는 설정이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: "3.8"
services:
app:
build: .
ports:
- "3000:3000"
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
ports:
- "5432:5432"
실행 명령
1
docker-compose up -d
7. Docker와 Kubernetes
Docker는 컨테이너 실행 및 관리에 초점을 맞춘 반면, Kubernetes는 여러 컨테이너를 클러스터로 묶어 대규모 환경에서 관리할 수 있는 도구이다.
- Docker는 애플리케이션을 컨테이너로 패키징
- Kubernetes는 이러한 컨테이너를 오케스트레이션
8. Docker를 사용하는 이유
- 개발 환경과 운영 환경의 일치
- 동일한 환경에서 애플리케이션을 실행할 수 있다.
- 효율적인 리소스 사용
- 컨테이너는 가상 머신보다 가볍고, 더 빠르게 시작된다.
- 자동화 및 확장
- CI/CD 파이프라인과 통합하여 배포 과정을 자동화할 수 있다.
- 확장성과 유연성
- 마이크로서비스 환경에서 컨테이너를 사용하여 개별 서비스를 독립적으로 배포하고 확장할 수 있다.
9. 정리
Docker는 애플리케이션 개발, 테스트, 배포의 모든 과정을 간소화하는 강력한 도구이다.
특히 마이크로서비스와 클라우드 네이티브 애플리케이션 개발에 필수적이며, 효율성과 확장성을 극대화한다.
Docker를 처음 시작한다면 기본 이미지 실행, 컨테이너 생성 및 Docker Compose 사용법을 익히는 것으로 시작하고, 이후 Kubernetes 등과의 통합을 통해 더욱 강력한 워크플로를 구축할 수 있다.