도커
- 목적: 프로그램 다운과정을 간단하게 만들기 위해서
기존 방식
- installer 다운 > installer 실행 > 프로그램 설치
- 이 과정에서 서버, 패키지 버전, OS 등에 따라 프로그램 설치과정에서 에러가 발생
![]() |
![]() |
도커와 컨테이너
- 도커 정의: 칸테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구 이며 컨테이너 기반의 오픈소스 가상화 플랫폼
- 컨테이너 정의: 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줌
- 이렇게 추상화한 컨테이너는 어떤 환경에서든 쉽게
- 컨테이너 찐 정의: 코드와 모든 종속성을 패키지화하여 응용 프로그램이 다른 컴퓨팅 환경에서 빠르고 안정적으로 실행되도록 한 SW 표준 단위
도커 컨테이너와 도커 이미지
- 컨테이너 이미지: 응용 프로그램을 실행하는데 필요한 모든 것(코드, 런타임, 라이브러리 등..)을 포함하는 가볍고 독립적이며 실행 가능한 SW 패키지
- 즉, 프로그램을 실행하는데 필요한 설정이나 종속성을 모두 포함
- 이미지는 런타임에 컨테이너가 되고, 컨테이너가 실행을 해서 애플리케이션이 컨테이너 안에서 실행되는 구조
- 즉, 도커 이미지를 이용해서 컨테이너를 생성 -> 컨테이너를 이용하여 프로그램을 실행하는 구조
도커 사용 흐름
CLI 명령어를 입력하면 도커 서버에서 중요한 일들을 다 처리한 후 해당 프로그램을 실행시켜주는 흐름
- 도커 CLI에서 커맨드를 입력하면, 도커 서버(데몬)가 해당 커맨드를 받아 작업을 처리
- 이미지 생성, 컨테이너 실행...
- CLI에서 요청한 이미지가 로컬에 cache가 되어있는지 확인
- 없다면, 도커 허브라는 곳에서 이미지를 가져오고 로컬 캐시에 보관
- 이미지를 받아와 해당 이미지를 통해 컨테이너를 실행
- 생성된 컨테이너는 이미지에서 받은 설정에 따라 프로그램을 실행
VS 가상화
- 하이퍼 바이저 기반의 가상화: 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있도록 하는 SW
- 또한, 하드웨어를 가상화하여 하드웨어와 각각의 VM을 모니터링하는 중간 관리자
- 즉, 논리적으로 공간을 분할
- 일반적인 SW처럼 호스트 OS위에서 실행, 하드웨어 자원을 게스트 OS에서 하이퍼바이저를 통해 요청하는 방식
- 각 VM마다 독립된 가상 하드웨어 자원을 할당 -> 한 VM에서 오류가 발생해도 다른 VM에 전파X
이러한 가상화 기술에서 나온 컨테이너 가상화 기술
공통점 | 차이점 |
기본 하드웨어 격리된 환경 내에서 애플리케이션을 배치 | 컨테이너는 하이퍼바이저와 게스트OS가 불필요 -> 훨씬 가벼움 |
- 컨테이너는 하나의 애플리케이션이 독립된 환경에서 실행되는 것처럼 보이게 하지만, 사실은 호스트(실제 컴퓨터)와 많은 부분을 공유
- 즉, 이미지를 호스트 OS에서 실행 -> 커널을 공유
- 예를 들어, 컨테이너에서 실행되는 프로그램들은 호스트에서 다른 프로그램들과 같은 공간을 공유 그래서 컨테이너에서 실행 중인 프로그램을 호스트에서 명령어로 확인 가능
- 가상 머신은 완전히 독립적인 시스템처럼 동작
- 하이퍼바이저라는 프로그램을 통해 하드웨어 자원을 나눠 사용.
- 가상 머신은 호스트와 커널(운영체제 핵심 부분)도 공유하지 않음
- 즉, 이미지를 게스트 OS에서 실행 -> 커널 공유x
그러면 도커에서는 컨테이너들을 어떻게 격리시키는가?
리눅스의 Cgroup과 namespace를 통해 컨테이너와 호스트에서 실행되는 프로세스 사이에 벽을 생성
- C Group: 각 컨테이너가 사용할 수 있는 리소스(cpu, 메모리) 양을 제한
- Namespace: 각 컨테이너가 보는 환경(프로세스, 파일)을 따로 분리
![]() |
![]() 하드웨어 자원들이 큰데, 컨테이너만을 위한 것을 할당 |
엥 그러면 맥os/window에서는 어떻게 리눅스 명령어 사용함?
이미지로 컨테이너 만드는 과정
그렇다면 필요한 모든 것이란?
- 컨테이너 안에서 프로그램을 시작시키는 명령어
- 해당 프로그램의 파일 스냅샷( 디렉토리나 파일을 카피한 것 )
컨테이너 생성 과정
- Docker 클라이언트에서 이미지 실행: docker run <이미지>
- 도커 이미지에 있는 파일 스냅샷을 컨테이너 HDD에 복사
- 이미지에서 가지고 있는 명령어를 이용해 컨테이너 내에서 프로그램 실행
도커 설치 방법
'Docker' 카테고리의 다른 글
[도커] 5장 Docker Compose (0) | 2024.10.28 |
---|---|
[도커] 4장 Docker를 활용한 Node.js 애플리케이션 컨테이너화 과정 (0) | 2024.10.27 |
[도커] 3장 - 도커 이미지 생성 (0) | 2024.10.25 |
[도커] 2장 - 도커 클라이언트 명령어(컨테이너 나열, 생명주기, 명령어 실행) (0) | 2024.10.24 |