• Docker

    2025. 1. 20.

    by. hyunji1109

    애플리케이션을 컨테이너(Container) 단위로 패키징하고 실행할 수 있게 해주는 기반 가상화 플랫폼
    소프트웨어 개발, 배포, 실행 환경을 표준화
    어디서나 일관되게 동작하도록 도움

     

    Docker란?

    • 리눅스의 컨테이너 기술(Linux Containers, LXC)을 기반
    • 개발 환경, 테스트 환경, 배포 환경 간의 불일치를 제거
    • 컨테이너
      • 애플리케이션과 그 의존성을 포함한 경량화된 독립 실행 환경
      • 실행 중인 Docker 이미지.
      • 애플리케이션과 실행 환경이 포함
    • 이미지
      • 컨테이너를 생성하기 위한 템플릿(애플리케이션과 의존성의 스냅샷)
      • Dockerfile을 통해 이미지를 생성
    • Dockerfile
      • 이미지를 생성하기 위한 스크립트.
      • 각 명령어가 이미지의 새로운 레이어를 생성
    FROM ubuntu:20.04
    RUN apt-get update && apt-get install -y nginx
    CMD ["nginx", "-g", "daemon off;"]

     

    특징

    • 경량성
      • 컨테이너는 호스트 OS의 커널을 공유하므로 가상머신(VM)보다 가볍고 빠름
    • 이식성
      • 한 번 패키징한 컨테이너는 OS와 관계없이 어디서나 실행(Docker가 설치된 환경).
    • 빠른 실행
      • 컨테이너는 가상머신처럼 부팅할 필요 없이 즉시 시작
    • 이미지 재사용
      • Docker 이미지는 계층 구조로 되어 있어 변경된 부분만 업데이트
    • 환경 격리
      • 서로 다른 컨테이너는 독립된 환경에서 실행되므로 충돌을 방지

     

    장점

    • 개발 및 배포 효율성
      • 개발 환경, 테스트 환경, 프로덕션 환경 간의 불일치 문제를 해결
      • 컨테이너 이미지를 사용해 일관된 배포가 가능
    • 리소스 효율성
      • VM에 비해 가볍고 빠르며 하나의 서버에서 더 많은 컨테이너를 실행
    • 확장성
      • 애플리케이션의 마이크로서비스 아키텍처 구현을 지원하며, 필요에 따라 컨테이너를 쉽게 확장하거나 축소
    • 자동화된 워크플로우
      • CI/CD 파이프라인에서 빌드, 테스트, 배포 작업을 자동화
    • 오픈소스 및 풍부한 생태계
      • 오픈소스로 제공되며 Docker Hub 같은 다양한 레지스트리에서 미리 작성된 이미지를 활용

     

    단점

    • 복잡한 네트워킹
      • 여러 컨테이너 간의 통신을 설정하거나, 외부 네트워크와 연결하려면 추가 설정이 필요
    • 호스트 OS 의존성
      • 컨테이너는 호스트 OS의 커널을 공유하므로, 리눅스 기반이 아닌 애플리케이션의 실행은 제한적(윈도우 컨테이너는 별도 지원)
    • 학습 곡선
      • Docker의 기본 개념은 쉽지만, 실제로 Compose, Swarm, Kubernetes 등을 사용하려면 추가적인 학습이 필요
    • 데이터 영속성 관리
      • 컨테이너는 기본적으로 비휘발성데이터 영속성을 유지하려면 볼륨(Volume)이나 바인드 마운트를 사용

     

    Docker를 사용하는 이유
    Docker는 개발, 테스트, 배포의 전 과정을 효율적으로 관리
    이를 통해 소프트웨어 개발의 복잡성을 줄이고 일관성을 유지
    더 빠르고 효율적인 배포가 가능

     

     

    +) 명령어

    1) 이미지 관련 명령어

    • docker pull <이미지>
      • 이미지를 다운로드
    • docker build -t <이미지 이름>
      • Dockerfile로 이미지 빌드
    • docker images
      • 로컬에 저장된 이미지 목록 확인

     

    2) 컨테이너 관련 명령어

    • docker run <이미지>
      • 컨테이너 실행
    • docker ps
      • 실행 중인 컨테이너 목록 확인
    • docker stop <컨테이너>
      • 컨테이너 중지
    • docker rm <컨테이너>
      • 컨테이너 삭제

     

    3) 기타 명령어

    • docker logs <컨테이너>
      • 컨테이너 로그 확인
    • docker exec -it <컨테이너> bash
      • 실행 중인 컨테이너에 접속

    'CS > 웹개발' 카테고리의 다른 글

    데이터 빠르게 찾기 - 인덱스 설정하기  (0) 2025.03.12
    TDD  (0) 2025.01.23
    JPA N+1 문제  (0) 2025.01.19
    CI/CD  (1) 2025.01.16
    JPA Dirty Checking  (0) 2025.01.13

    댓글