Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CH1 도커란? #1

Open
KeonHee opened this issue Jul 18, 2021 · 0 comments
Open

CH1 도커란? #1

KeonHee opened this issue Jul 18, 2021 · 0 comments

Comments

@KeonHee
Copy link
Contributor

KeonHee commented Jul 18, 2021

  • 도커(Docker)
    • 리눅스 컨테이너를 쉽게 활용할 수 있도록 만들어진 오픈소스 프로젝트.
  • 도커 프로젝트
    • 도커와 관련된 여러 프로젝트가 존재: Docker Compose, Private Registry, Docker Hub, Docker for Desktop, ....
    • Docker Engine: 컨테이너를 생성하고 관리, 주요 프로젝트, 이 책에서 주로 다룰 내용

1.1 가상 머신과 도커 컨테이너

image

가상 머신

  • Hypervisor를 사용해 여러개의 운영 체제(Ubuntu, CentOS, ...)를 하나의 호스트에서 생성해서 사용
  • 여러 운영체제는 가상 머신 단위로 구분
  • 가상머신에 생성된 운영체제는 게스트 운영체제불리며 각 게스트 운영체제는 완전히 독립된 공간과 시스템 자원을 할당받아 사용됨
  • VirtualBox, VMware
  • 단점
    • 시스템 자원을 가상화하고 독립된 공간을 생성하는 작업이 Hypervisor를 통하기 때문에 성능적으로 손실이 크다
    • 게스트 운영체제를 만들때 운영체제에 대한 라이브러리, 커널등을 모두 포함해야하기 때문에 이미지 크기도 커진다

도커 컨테이너

  • 가상화를 위해서 리눅스 커널에서 제공하는 기술(chroot, namespace, cgroup)을 사용
  • 성능 손실이 거의 없다(호스트 성능의 99.99퍼 활용 가능)
  • 컨테이너에 필요한 커널은 호스트의 커널은 공유, 컨테이너 안에 필요한 라이브러리만 추가하면 되기 떄문에 이미지 크기가 상대적으로 작다

1.2 도커를 시작해야하는 이유

1.2.1 애플리케이션의 개발과 배포가 편해집니다.

  • 컨테이너에 독립적인 개발환경을 보장받을 수 있음
    • 컨테이너 내부에 어떤 일을 하더라도 호스트 OS나 다른 컨테이너에 영향을 끼치지 않는다
  • 개발/운영 환경의 통합이 가능
    • 로컬에서 작업하는 환경을 도커 이미지로 만들어 서버에 전달하면, 서버에서는 도커 이미지만 실행시키면 된다
    • 로컬에서 개발용으로 작업한 환경을 그대로 운영 환경에 적용 가능(별도 작업x)
  • 애플리케이션 배포 속도가 상대적으로 빠르다
    • 도커 이미지는 Layer 단위로 구성됨
    • 처음에는 모든 Layer를 서버에 보내줘야하지만, 그 이후에는 변경된 Layer만 보내주면 되기 떄문에 점점 더 배포 속도가 빨라진다

1.2.2 여러 애플리케이션의 독립성과 확장성이 높아집니다.

image

Monolith 구조

  • 여러 소프트웨어의 모듈을 하나의 프로그램에서 구동시키는 방식
  • (단점) 서비스의 기능이 복잡해지고 거대해질수록 소프트웨어의 확장성과 유연성이 줄어듬
    • 모듈간 의존성이 커지면 일부를 아주 조금 변경하더라도 의존성이 있는 모든 모듈을 테스트해야하기 떄문에 변경에 유연하지 못해짐
    • 일부를 변경하더라도 전체를 재배포해야해서 확장성이 떨어짐

Microservice 구조

  • 여러 모듈을 독립적인 형태로 구성
    • 모듈간 의존성이 작다(모듈 관리가 쉬워짐)
    • 각각의 모듈을 다른언어로 만들어도 무방
  • Microservice 구조에서 가장 많이 사용되는 가상화 기술은 컨테이너
    • 컨테이너는 수초내로 생성,시작이 가능
    • 여러 모듈에 독립된 환경을 동시에 제공할 수 있음
      • DB와 웹 서버를 다른 컨테이너로 분류 가능
      • 부하가 심한 웹서버 컨테이너만 늘려서 부하 분산이 가능
      • 웹서버와 DB의 이미지를 독립적으로 관리하여 유지보수도 쉬워짐
    • 보통 도커를 직접 사용하지 않고 kubernetes 같은 컨테이너 오케스트레이션 플랫폼을 사용

1.3 도커 엔진 설치

  • 도커는 다양한 운영체제에서 사용이 가능하지만, 기본적으로 리눅스 커널 기능을 사용하기 때문에 리눅스(ubuntu, centos)에서 사용하는 것이 좋습니다.
  • 맥과 윈도우에서는 light한 가상머신을 띄우고 그위에 리눅스와 도커를 설치하기 때문에 사용의 제약이 있습니다.

1.3.1 도커 엔진의 종류 및 버전

  • 도커 버전
    • (출시년도).(출시월)-(엔진종류): 17.03-EE, 17.03-CE
  • 도커 EE
    • 유로로 제공되는 기업용 솔루션
    • 기술지원 및 서비스 제공
    • 3개월마다 릴리즈
  • 도커 CE
    • 무료로 제공되는 도커엔진
    • 기술지원 및 서비스 제공x
    • 도커 엔진의 핵심 기능 사용 가능
    • stable, edge 버전 각각 3개월, 1개월 단위로 릴리즈
    • stable 버전 사용 권장

1.3.2, 1.3.3, 1.3.4 도커 설치 [과제]

리눅스 환경에 도커를 설치해보고 컨테이너를 생성해보세요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants