Post

Docker - 컨테이너 기반 애플리케이션 배포 및 실행 플랫폼

Docker - 컨테이너 기반 애플리케이션 배포 및 실행 플랫폼

1. Docker란?

Docker는 애플리케이션을 실행하기 위한 컨테이너(Container)를 생성, 배포, 관리할 수 있는 오픈 소스 플랫폼이다.

컨테이너는 애플리케이션과 그에 필요한 모든 라이브러리, 종속성을 하나의 패키지로 묶어 제공하며, 개발 환경운영 환경 간의 차이를 최소화한다.

Docker를 사용하면 소프트웨어가 어디에서나(로컬 개발 환경, 테스트 서버, 클라우드) 동일하게 실행될 수 있다.


2. Docker의 주요 개념

  1. 이미지(Image)
    • 컨테이너를 생성하는 템플릿으로, 애플리케이션과 실행에 필요한 환경을 포함한다.
    • 예를 들어, Python 애플리케이션 실행을 위한 이미지에는 Python 런타임, 의존성 패키지 등이 포함될 수 있다.
  2. 컨테이너(Container)
    • 이미지를 기반으로 실행되는 애플리케이션의 인스턴스이다.
    • 컨테이너는 독립된 환경에서 실행되며, 동일한 호스트 내의 다른 컨테이너와 격리된다.
  3. Dockerfile
    • 이미지를 생성하기 위한 설정 파일이다.
    • 애플리케이션이 어떤 환경에서 실행되어야 하는지 명시한다.
  4. Docker Hub
    • Docker 이미지가 저장되고 공유되는 클라우드 기반 저장소이다.
    • Docker Hub에서 미리 만들어진 이미지를 다운로드하거나, 자신의 이미지를 업로드할 수 있다.



3. Docker의 주요 특징

  1. 경량화된 가상화
    • 기존 가상 머신(VM)에 비해 더 적은 리소스로 애플리케이션 실행 환경을 제공한다.
    • 컨테이너는 운영체제 커널을 공유하므로 빠르고 효율적이다.
  2. 이식성
    • “한 번 작성하면 어디서나 실행 가능”이라는 철학으로, 개발 환경, 테스트 환경, 운영 환경 간의 불일치를 줄인다.
  3. 확장성
    • 컨테이너를 쉽게 추가하거나 삭제하여 시스템을 확장할 수 있다.
    • 마이크로서비스 아키텍처에 적합하다.
  4. 격리성
    • 각 컨테이너는 독립된 환경에서 실행되어, 다른 컨테이너의 영향을 받지 않는다.



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를 사용하는 이유

  1. 개발 환경과 운영 환경의 일치
    • 동일한 환경에서 애플리케이션을 실행할 수 있다.
  2. 효율적인 리소스 사용
    • 컨테이너는 가상 머신보다 가볍고, 더 빠르게 시작된다.
  3. 자동화 및 확장
    • CI/CD 파이프라인과 통합하여 배포 과정을 자동화할 수 있다.
  4. 확장성과 유연성
    • 마이크로서비스 환경에서 컨테이너를 사용하여 개별 서비스를 독립적으로 배포하고 확장할 수 있다.



9. 정리

Docker는 애플리케이션 개발, 테스트, 배포의 모든 과정을 간소화하는 강력한 도구이다.

특히 마이크로서비스와 클라우드 네이티브 애플리케이션 개발에 필수적이며, 효율성과 확장성을 극대화한다.

Docker를 처음 시작한다면 기본 이미지 실행, 컨테이너 생성 및 Docker Compose 사용법을 익히는 것으로 시작하고, 이후 Kubernetes 등과의 통합을 통해 더욱 강력한 워크플로를 구축할 수 있다.

This post is licensed under CC BY 4.0 by the author.