241215 TIL Docker Image push, Container 가상화

윤수용·2024년 12월 15일
0

TIL

목록 보기
78/113

1. Docker Image push

Image push

  • Docker Hub: Docker의 공식 Registry (hub.docker.com)
    - registry: Dockerfile로 생성한 이미지나 docker commit으로 생성된 이미지를 저장하는 곳
    - public registry: 공개적으로 사용할 수 있어 아무나 접근 가능
    - private registry: 특정인이나 특정 그룹만 접근 가능
  • push: 생성한 이미지를 registry에 올리는 명령어

Dockerfile 최적화

  • 최적화의 이유
    1) 빠른 Docker 이미지 제작
    2) 이미지의 크기 감소
    3) 높은 재사용성
    4) 보안 강화
    5) 쉬운 유지 보수



2. Container 가상화

Container

  • Container
    • 앱을 실행하는 데 필요한 모든 걸 담은 작은 상자
    • 앱을 돌리는 데 필요한 코드, 프로그래밍 언어, 라이브러리 같은 것들이 포함
    • Docker에서는 'Dockerfile'이라는 걸 사용해서 컨테이너를 제작
    • 컴퓨터 자원(ex. CPU, 메모리)을 여러 앱들과 공유할 수 있도록 함
    • 앱을 컨테이너에 넣으면 그 컨테이너가 어디에서 실행되든 똑같이 잘 동작함
    • 컨테이너는 서로 독립적이라서 한 컨테이너가 문제가 생겨도 다른 컨테이너에는 영향을 주지 않음
    • 앱을 더 안정적이고 효율적으로 관리하고 실행할 수 있도록 함

  • Container의 장점
    • 경량화란
      • 컨테이너는 컴퓨터의 운영체제(OS)를 여러 앱과 공유하기 때문에 각 앱마다 따로 운영체제를 설치할 필요가 없음
      • 이 덕분에 컨테이너 파일은 작고 가벼워서 빨리 시작하는 것이 가능
    • 이동성과 플랫폼 독립성
      • 컨테이너는 앱을 실행하는 데 필요한 모든 것을 함께 담기 때문에 한 번 만든 앱을 다른 기기에서 재설정 없이 그대로 옮겨 실행 가능
    • 현대적인 개발 및 아키텍처 지원
      • 컨테이너는 크기가 작고 여러 플랫폼에서 잘 작동해서 최신 개발 방식에 적합
      • 새로운 코드를 조금씩 추가하거나 업데이트할 때 매우 유용
    • 사용률 향상
      • 앱의 각 부분을 따로따로 배치하거나 크기를 조절할 수 있기 때문에, 전체 앱을 확장하는 것보다 더 유연하게 관리하는 것이 가능

Container의 발전


1. Traditional Deployment

  • 과거의 애플리케이션 배포는 물리적인 서버를 기반으로 동작
    - 단일 서버
     - 하나의 서버에서 여러 애플리케이션을 실행
     - 자원 충돌 문제가 쉽게 발생
    - 고정된 환경
     - 애플리케이션이 서버 하드웨어에 직접 설치되었기 때문에 환경 설정 및 의존성 관리가 어려움
    - 비효율성
     - 하나의 애플리케이션을 실행하기 위해 서버 전체 자원을 사용하는 경우도 많아 자원의 낭비가 발생
    - 배포 과정
     - 새 애플리케이션 배포 시 수동 설정과 테스트가 필요해 시간이 오래 걸리고, 확장성 및 유지 보수가 어려움

  1. Virtualized Deployment
  • 가상화 기술이 등장하면서 물리적 서버의 문제를 어느 정도 해결
    - 가상화 기술
     - 서버에 하이퍼바이저(Hypervisor)를 설치해 여러 개의 가상 머신(Virtual Machine, VM)을 실행할 수 있게 함
    - 장점
     - 각 VM은 고유의 OS를 실행하기 때문에 서로 간의 의존성 충돌이 없음
     - 서버 자원을 더 효과적으로 활용 가능
     - 애플리케이션을 보다 쉽게 분리하고 관리 가능
    - 단점
     - VM은 OS를 포함한 전체 환경을 복사하므로 크기가 크고, 실행 및 배포 속도가 느리며, 자원 소모가 큼
     - VM의 관리는 여전히 복잡하고 확장성은 물리적 한계가 있음

  1. Container Deployment
  • Docker의 등장으로 경량화된 컨테이너 기술이 배포 방식을 혁신적으로 향상시킴
    - 컨테이너(Container)
     - 애플리케이션과 필요한 라이브러리 및 환경만 패키징하여 OS 커널을 공유하면서 실행되는 경량 프로세스
    - Docker의 특징
     - 경량화: VM에 비해 크기가 작고, 실행 속도가 빠르며, 자원 효율적
     - 이식성: 동일한 환경에서 실행되기 때문에 "개발 환경과 운영 환경의 차이" 문제 해결
     - 편리성: Docker 이미지를 기반으로 손쉽게 컨테이너를 생성하고 배포 가능
    - 단점
     - Docker만으로는 다수의 컨테이너를 관리하기 어려움

  1. Kubernetes Deployment
  • 다수의 컨테이너를 관리하기 위해 Kubernetes가 등장
    - Kubernetes
     - 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화하는 도구
    - 특징
     - 스케일링: 컨테이너 수를 자동으로 조정해 부하를 처리
     - 복구: 컨테이너가 비정상 종료되면 자동으로 복구
     - 로드 밸런싱: 트래픽을 분산해 애플리케이션 성능 최적화
     - 서비스 디스커버리: 네트워크 연결 및 서비스 관리를 자동화
    - Kubernetes와 Docker의 조합
     - Docker는 애플리케이션 컨테이너를 생성
     - Kubernetes는 이러한 컨테이너를 클러스터 환경에서 관리하고 최적화
    - 장점
     - 대규모 분산 시스템에서 효율적 관리 가능
     - DevOps 및 CI/CD 환경에 적합
    - 단점
     - 초기 학습 곡선이 높고, 설정 및 운영이 복잡할 수 있음
profile
잘 먹고 잘 살자

0개의 댓글

관련 채용 정보