Home Docker 기본
Post
Cancel

Docker 기본

도커를 쓰는 이유?

도커 없이 다운로드 받을 때는 Installer 다운로드 -> 실행 -> 에러 일 경우가 많다. Installer 자체가 외부(운영체제, 버전, 서버 등등)에 많은 영향을 받기때문에 하나하나 맞춰서 제대로 install 하는 게 어렵다. -> Docker를 통해 편하게 다운로드 가능하다.

도커는 무엇일까?

도커를 이해하기 위해서는 먼저 컨테이너에 대해 이해해야 한다.

  • Container
    • 다양한 프로그램, 실행환경을 컨테이너로 추상화해서 프로그램을 손쉽게 이동 배포 관리를 할수있게끔 해준다.
    • 코드와 모든 종속성을 패키지화해서 응용프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어의 표준 단위다.

도커 이미지

: 프로그램이 실행되는데 필요한 모든것 (설정이나 종속성들)을 포함하고 가볍고 독립적으로 실행가능한 소프트웨어 패키지를 뜻하며 이미지를 이용해서 컨테이너를 만든다.

  • 컨테이너가 실행을 해서 그 안에서 프로그램이 돌아간다. -> “컨테이너는 이미지의 인스턴스” 이다.
  • 이미지를 이용해서 컨테이너를 만든다.

도커 사용시 흐름

1
2
3
4
5
6
7
8
- 도커 클라이언트에서 command 입력해서 프로그램을 실행한다.
- docker가 초록불이어야지 도커 클라이언트에 명령어 입력이 가능하다. 
- (EX Command) docker run -it hello-world
- 이미지 Cache 장소에서 명령어로 친 hello-world가 있는지 찾는다.
    - 한번도 저장되지 않은 hello-world를 실행시키려 했기때문에 존재하지 않는다.
- 도커 허브(많은 이미지들이 보관되어져있음)에서 가지고 온다. 
- pull 해서 실행시켜준다.
- 클라이언트에 입력해주면 중요한 일들은 서버가 다 처리해 프로그램을 실행시켜준다.

도커와 기존의 가상화 기술 비교를 통해 Container 심화버전 이해하기

  • 가상화 전
    • 하나의 서버를 하나의 용도로 사용했다. -> 안정적이나 비효율적이다.
  • 하이퍼 바이저 기반의 가상화
    • 호스트 시스템에서 다수의 게스트 OS 구동이 가능하다.
    • 논리적으로 공간분리 가능해 다수의 게스트 OS로 사용이 가능하다.
    • 네이티브 하이퍼 바이저
      • 하드웨어 위에서 실행된다.
    • 호스트형 하이퍼 바이저 (-> 주로 사용한다)
      • 호스트 OS 위에서 실행된다.
      • 오버헤드가 크지만 구현이 비교적 쉽다.
      • 각 게스트 OS 마다 논리적으로 분리된 하드웨어 자원을 할당받기 때문에 서로 영향을 받지 않는다.

도커와 기존의 VM의 공통점

: 기본 하드웨어에서 격리된 환경 내에 애플리케이션을 배치하는 방법이다.

도커와 기존의 VM의 차이점

: 얼마나 격리시키는 지에 차이가 있다.

  • 도커
    • 게스트OS 가 존재하지 않다. -> 가벼움
    • 실행시에 호스트 OS에서 이미지 배포한다.
    • 동일한 호스트 OS에서 다른 이미지들이 올라가는 것이기 때문에 같은 커널을 공유한다.
  • VM
    • 실행시에 vm 실행 -> 게스트 OS 실행 -> 어플리케이션 실행 -> 무겁다.
    • 사용방법은 간단하다. 하지만 무거워서 느리다.

도커의 컨테이너들은 격리되어있는데 어떻게 격리시키는 건가요?

아래의 두 가지 기술을 통해 컨테이너들을 격리시키는 게 구현이 가능하며 컨테이너와 호스트에서 실행되는 다른 프로세스 사이에 벽을 만드는 리눅스 커널 기능이다.

  • C-group: CPU와 메모리의 사용을 제한해서 group 에 넣는다.
  • 네임스페이스: 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술, 프로세스 가상화 기술

이미지로 컨테이너 만들기

이미지로 컨테이너를 만든다. 그 이미지에는 프로그램 실행시 필요한 모든 것들이 들어있다.

  • 컨테이너가 시작될때 실행되는 명령어
    • 컨테이너 안에서 무언가를 실행하기 위해서는 명령어를 치는데 그 명령어를 인식하려면 이미 그 이미지 안에 그 명령어가 존재해야 한다.
  • 파일 스냅샷(실행하고자 하는 디렉토리나 파일을 카피한 것)
  • 이미지로 컨테이너를 만드는 순서
    1
    2
    3
    
    1. docker 클라이언트에서 docker run <이미지>
    2. 이미지 안에 존재한 명령어와 파일 스냅샷이 컨테이너 안으로 들어간다.
    3. 명령어를 사용하면 커널을 통해 내가 설정해놓은 파일 스냅샷 프로그램이 실행된다.
    

C-group, 네임스페이스를 도커환경에서 쓸 수 있는 이유

: 앞서 C-group과 네임스페이스는 리눅스 환경에서 쓰이는 기술이라고 했다. 하지만 나는 리눅스를 사용하지 않는데 어떻게 사용할 수 있는 것일까?

  • 사실상 운영체제 위에 리눅스를 올린것이기 때문에 docker는 리눅스에서 사용되는 것이라고 보면된다.

  • 현재 내 컴퓨터

    1
    2
    3
    4
    5
    6
    7
    
    리눅스 커널
    |
    리눅스VM
    |
    MacOS / Windows (운영체제)
    |
    하드웨어
    

출처: 인프런, “따라하며 배우는 도커와 CI환경”, 따라하며 배우는 도커와 CI환경

This post is licensed under CC BY 4.0 by the author.

Message Queue

API 게이트웨이