Docker

귀찮Lee·2022년 8월 8일
0

Deploy

목록 보기
3/4
post-custom-banner

◎ Docker 설치

◎ Docker

  • 배경
    • 환경을 분리하여 어플리케이션을 다른 환경해서 실행하고, 관리하는 프로그램이 필요해짐
    • 리눅스 컨테이너 기술은 그 자체로 훌륭하고 완성된 기술이었지만, 어플리케이션을 쉽게 컨테이너화 할 수 있는 생태계, 커뮤니티가 없었다.
    • 참고 자료
  • Docker
    • 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼
    • 실행 환경에 구애받지 않고, 어플리케이션을 실행할 수 있다.

◎ Docker 관련 용어

  • container (컨테이너)

    • 한 컴퓨터 안에 여러 대의 컨테이너가 존재하고, 이를 통해 애플리케이션 실행 환경이 높은 수준으로 격리됨

    • 컨테이너가 독립적으로 갖는 자원

      • 프로세스 : 특정 컨테이너에서 작동하는 프로세스는 기본적으로 그 컨테이너에서만 엑세스함, 다른 컨테이너에게 영향 X
      • 네트워크 : 기본으로 컨테이너 하나에 하나의 IP주소가 할당되어 있음
      • 파일 시스템 : 컨테이너 안에서 사용되는 파일 시스템은 구획화 되어있음, 해당 컨테이너에서의 명령이나 파일 등의 액세스를 제한 가능
    • 컨테이너와 VM의 비교 - 글 하단 참고

  • 이미지

    • 애플리케이션 및 애플리케이션 구성을 함께 담아놓은 템플릿
    • 이미지를 이용해 즉시 탬플릿을 만들 수 있다.
    • 하나의 이미지를 이용해, 여러개의 컨테이너를 생성할 수 있다.
    • 변경 사항을 추가/커밋해서 또 다른 이미지를 만들 수 있다.
      ex) 스프링부트 이미지를 가져와, 내 어플리케이션을 넣어 새로운 이미지를 만들 수 있다.
  • 레지스트리

    • 이미지 저장소 ex) Docker Hub, Amazon ECR
    • 도커 CLI에서 이미지를 이용해 컨테이너를 생성할 때, 호스트 컴퓨터에 이미지가 존재하지 않는다면, 기본 레지스트리로부터 다운로드 받음

◎ 컨테이너 방식의 장점

  • 의존성 충돌 문제 해결

    • 문제점

      • 프로그램을 실행 시키는데 특정 프로그램의 버전을 요구하는 경우가 있다.
      • 일반적으로 한 컴퓨터에 여러 버전의 동일한 어플리케이션이 설치되지 않으므로 의존성이 충돌
        • A 프로그램은 C ver 1.0이 필요하고, B 프로그램은 C ver 2.0이 필요한 경우
    • 컨테이너 기술은 어플리케이셔을 컨테이너 내에 구성함, 컨테이너에서 실행중인 어플리케이션은 어떠한 의존성도 공유하지 않고 각자 고유의 의존선을 포함함

      • 컨테이너1 : A 프로그램, C ver 1.0
      • 컨테이너2 : B 프로그램, C ver 2.0
  • 개발과 배포 환경 일치

    • 문제점

      • 개발 팀은 조금씩 다른 환경에서(Java version, MySQL version) 개발을 진행함
      • 리눅스 OS마다 특정 App을 설치하는 코드가 다름
        ex) Ubuntu에서 PostgreSQL 설치하는 것과 CentOS에서 PostgreSQL을 설치하는 코드는 확연히 다름
      • 아무것도 깔려있지 않은 개발자는 실행시키기까지의 과정이 매우 험난함 (JVM, SQL 등등의 것을 설치해야함)
    • 도커가 실행 중이라면, 간단한 명령어(설정파일)를 통해 특정 프로그램이 있는 이미지를 컨테이너로 실행시켜 간단하게 실행환경을 설정해줄 수 있다.

    • 개발자마다 환경에 의해 발생하는 문제를 Docker를 통해 환경을 일치하여 테스트 할 수 있다.

  • 수평 확장 용이, 각 서버에 배포 용이

    • 문제점

      • 서버마다 같은 환경으로 맞추어 주기 위해서는 일일히 작업해야 하고, 사람의 실수에 의해 오류날 확률이 높음
    • Docker를 이용해 컴퓨터마다 실행 환경을 일치시켜줄 수 있고, 많은 트래픽으로 인한 서버 증설에 매우 용이함

    • 오케스트레이션 도구(ex. 쿠버네티스)를 이용하여 새로운 버전의 애플리케이션을 여러 서버 중 몇 대에만 운영하여 테스트하는 방법도 가능하다.

◎ 컨테이너와 VM의 비교

  • Virtual Machine (VM)
  • 공통점

    • 프로세스, 네트워크, 파일 시스템을 격리할 수 있다는 장점을 공유
  • 차이점

    • 컴퓨팅 자원
      • VM : 만들고 실행하는 과정이 많은 컴퓨팅 자원을 필요
      • Container : 한 호스트 컴퓨터에 여러 개의 컨테이너를 띄워도 크게 컴퓨터에 무리가 가지 않음
    • 이미지
      • VM : 해당 VM 위에 운영체제를 설치하는 과정이 필요
      • Container : 도커 이미지가 보통 어플리케이션 단위로 만들어져 있음
    • OS
      • VM : 구성 요소에 OS가 존재
      • Container : 컨테이너에 OS가 포함되어 있지 않음, Docker라는 플랫폼 위에 올라가 있고 그 아래 호스트 OS가 존재
        • 각 컨테이너는 호스트 OS의 커널(Kernel, 시스템 콜과 같이 OS의 핵심 기능을 구현한 프로그램)을 공유
        • 호스트 OS의 입장에서 컨테이너 하나는 프로세스 하나에 불과
profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!
post-custom-banner

0개의 댓글