24.11.27 TIL Docker

신성훈·2024년 11월 27일

TIL

목록 보기
87/162

1. Docker란?

Docker는 애플리케이션을 컨테이너(Container)라는 단위로 패키징, 배포, 실행할 수 있는 플랫폼입니다. 컨테이너는 애플리케이션과 그 실행에 필요한 모든 환경(라이브러리, 설정 등)을 포함하고 있어, 어디서든 동일하게 실행됩니다.

주요 특징

  • 경량화: 컨테이너는 가상머신보다 훨씬 가볍고 빠릅니다.
  • 이식성: 컨테이너가 동일한 환경을 제공하므로 운영 체제나 플랫폼에 구애받지 않습니다.
  • 격리성: 각 컨테이너는 독립된 환경에서 실행됩니다.

2. Docker의 주요 개념

2.1 이미지(Image)

컨테이너 실행에 필요한 설정과 파일을 포함하는 읽기 전용 템플릿입니다.

  • 예: Ubuntu 이미지에는 OS와 기본 도구가 포함됩니다.
  • 커스텀 이미지를 생성하려면 Dockerfile을 작성합니다.

2.2 컨테이너(Container)

이미지로부터 생성된 실행 가능한 인스턴스입니다.

  • 각 컨테이너는 독립적인 프로세스로 실행되며, 격리된 환경을 제공합니다.

2.3 Dockerfile

이미지를 생성하기 위한 설정 파일입니다.

  • 애플리케이션 설치, 환경 변수 설정 등을 정의합니다.

2.4 레지스트리(Registry)

이미지를 저장하고 공유하는 저장소입니다.

  • 예: Docker Hub, AWS ECR, GitHub Container Registry

3. Docker 명령어

3.1 이미지 관련 명령어

# 이미지 다운로드
docker pull [이미지 이름]

# 로컬에 저장된 이미지 확인
docker images

3.2 컨테이너 관련 명령어

# 컨테이너 실행
docker run [이미지 이름]

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

# 모든 컨테이너(종료된 컨테이너 포함) 확인
docker ps -a

# 컨테이너 중지
docker stop [컨테이너 ID]

# 컨테이너 삭제
docker rm [컨테이너 ID]

3.3 Dockerfile로 이미지 빌드

# Dockerfile이 있는 디렉토리에서 실행
docker build -t [이미지 이름] .

4. Docker 활용 예제

4.1 Dockerfile 예제

# 베이스 이미지 설정
FROM openjdk:11

# 애플리케이션 실행에 필요한 파일 복사
COPY ./app.jar /usr/src/app.jar

# 컨테이너 실행 시 기본으로 실행할 명령어
CMD ["java", "-jar", "/usr/src/app.jar"]

4.2 Docker로 Spring 애플리케이션 실행

  1. Dockerfile 작성: 위 예제처럼 Spring 애플리케이션을 위한 Dockerfile 생성.
  2. 이미지 빌드:
    docker build -t spring-app .
  3. 컨테이너 실행:
    docker run -p 8080:8080 spring-app
  4. 브라우저에서 http://localhost:8080으로 접근.

5. Docker Compose

여러 컨테이너를 한꺼번에 관리하기 위한 도구입니다.
예를 들어, Spring 애플리케이션MySQL 데이터베이스를 함께 실행할 수 있습니다.

Docker Compose 파일 예제 (docker-compose.yml)

version: "3.8"
services:
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test

6. 마무리

  • 환경 설정의 간편함: 개발 환경과 운영 환경의 차이로 인한 문제를 Docker로 손쉽게 해결할 수 있었습니다.
  • 컨테이너 이식성: 동일한 컨테이너 이미지를 어디서나 실행할 수 있어 협업 시 매우 편리했습니다.
  • 도전 과제: 처음에는 Dockerfile 작성과 Compose 설정이 다소 복잡했지만, 설정 완료 후에는 배포 속도가 크게 향상되었습니다.
  • 학습 포인트: 추후 Kubernetes를 함께 공부하며 컨테이너 오케스트레이션의 중요성을 이해하고 싶습니다.
profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글