[따라하며 배우는 도커와 CI 환경] Docker 개념

Jimin Lim·2022년 5월 6일
1

Docker

목록 보기
1/9
post-thumbnail

✅ Docker를 사용하는 이유

도커없이 프로그램을 다운받고 실행한다면 갖고 있는 서버, 패키지 버전, 운영체제 등에 따라 많은 에러가 발생할 수 있다. 이러한 설치 과정을 단순하게 해주는 것이 도커다.

🔗 예시) Redis 설치

(1) 도커 없이: redis 홈페이지 이동 -> 하라는 대로 함 -> wget 설치 ~~ 복잡
(2) 도커로: docker run -it redis

위와 같이 예상치 못한 에러가 덜 발생하며 설치하는 과정도 훨씬 간단해진다.

✅ Docker 개념

컨테이너를 사용해 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 도구이며 컨테이너 기반의 오픈소스 가상화 플랫폼이다.

🔗 Container

일반적인 컨테이너의 개념은 물건을 넣고 다양한 운송 수단으로 옮길 수 있는 것인데, 서버에서의 container도 마찬가지로 레디스와 같은 프로그램을 이동, 배포, 관리를 할 수 있게 해준다.

🔗 Container Image

응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행 가능한 소프트웨어 패키지
카카오톡을 예로 들자면 카카오톡에 필요한 모든 설정, 종속성들을 가지고 있는 것이다. 이를 컨테이너에서 프로그램을 실행한다.

즉, 도커 이미지를 이용해 컨테이너를 생성하고, 도커 컨테이너를 이용해 프로그램을 실행하는 것이다.

✅ Docker의 흐름

  1. docker run hello-world
    : 클라이언트가 서버에 요청
  2. 로컬에 cache되어 있는지 확인
  3. Docker hub에 이미지 가져오고 로컬에 cache
  4. 그 후, 이제는 이미지가 있으니 그 이미지를 이용해서 컨테이너를 생성

✅ 기존의 가상화 기술과 차이를 통한 컨테이너 이해

🔗 가상화 기술 나오기 전

하나의 서버를 하나의 용도로 사용, 남는 서버 낭비 but 안정적

🔗 하이퍼 바이저 기반의 가상화 출현

논리적으로 공간을 분할해 VM이라는 독립적인 가상 환경의 서버 이용 가능하게 되었다.

여기서 하이퍼 바이저란, 다수의 게스트 OS를 구동할 수 있는 소프트웨어, 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자다.

주로 사용하는 방식은 호스트형 하이퍼 바이저인데, 일반적인 소프트웨어처럼 호스트 OS위에서 실행되며 하드웨어 자원을 VM 내부의 게스트 OS에 에뮬레이트 하는 방식이다.

<호스트형 하이퍼 바이저>

위처럼 격리가 되어있기에 하나가 에러가 발생한다면 다른 VM에 영향을 받지 않는다는 장점이 있다.

이러한 격리된 환경 내에 어플리케이션을 배치한다는 점에 발전해 도커가 등장하게 되었다.

<도커>

동작 방식은 비슷하지만, 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않는다.
도커는 호스트 OS에 이미지를 배포하면 되는데, VM은 게스트 OS를 부팅해 어플리케이션을 실행 해야 한다.

🔗 그렇다면 어떻게 격리를 시킬 수 있을까?

C Group, Namespace를 이용해서 컨테이너 기술을 사용할 수 있다.

C Group: CPU, 메모리, Network Bandwith 등 프로세스의 그룹을 관리한다. 어떤 어플이 사용량이 너무 많다면 C Group에 넣어 사용을 제한한다.

Namespace: 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술

이 기술을 이용해 하드 디스크, 네트워크, RAM, CPU를 프로세스를 작동시키는데 필요한 양만큼 격리해 컨테이너로 관리한다.

❗️ 하지만 이들은 리눅스 환경에서 사용되는데 ..

docker version 명령어를 사용한다면, OS가 linux로 되어 있다. 즉, docker는 결국에 리눅스 환경에서 돌아가고 있다.

✅ 이미지로 컨테이너 만들기

이미지는 응용 프로그램을 실행하는데 필요한 모든 것을 포함하고 있다. 여기서 그 필요한 것은 다음과 같다.

  1. 컨테이너 시작될 때 실행되는 명령어
  2. 파일 스냅숏 (= 디렉토리나 파일을 카피한 것)

🔗 이미지로 컨테이너 만드는 순서

  1. Docker 클라이언트에 docker run <이미지> 입력
  2. 도커 이미지에 있는 파일 스냅샷을 컨테이너 하드 디스크에 옮김
  3. 이미지에서 가지고 있는 명령어(= 컨테이너가 실행될 때 사용될 명령어)를 이용해 실행
profile
💻 ☕️ 🏝 🍑 🍹 🏊‍♀️

0개의 댓글