DevOps

따라하며 배우는 도커와 CI 환경 - 1. 도커란

r잡초처럼 2023. 3. 3. 00:38

이 시리즈는 을 읽으면서 실습하는 포스팅이다. 중간중간 필요한 개념도 정리하자.

도커 이미지와 도커 컨테이너

  • 도커 컨테이너는 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 하는 소프트웨어의 표준 단위이다.
  • 도커 이미지는 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용 프로그램을 실행하는 데 필요한 모든 것을 ㅍ포함하는 가볍고 독립적이며 실행 가능한 소프트 웨어 패키지이다.

도커를 사용할 때의 흐름

  1. 도커 클라이언트에 원하는 명령을 입력한다.
  2. 도커 서버(도커 데몬)가 도커 클라이언트에 입력한 명령어를 전달받으면 명령어에 따른 이미지를 생성하고 컨테이너를 실행한다. 그리고 해당 컨테이너에서 애플리케이션을 실행한다.

도커는 어떻게 컨테이너를 격리시킬까?

이 부분에 대한 답을 얻으려면 리눅스에서 쓰이는 Cgroup(control groups)과 네임스페이스(namespaces)에 대해 알아야 한다. 

Cgroup과 네임스페이스

Cgroup과 네임스페이스는 다른 프로세스 사이에 벽을 만드는 리눅스 커널의 기능이다. Cgroup은 CPU, 메모리, 네트워크 대역폭, HD I/O 등 프로세스 그룹의 시스템 리소스 사용량을 관리한다. 예를 들어 어떤 애플리케이션의 사용량이 너무 많다면 그 애플리케이션을 Cgroup에 배치해서 CPU와 메모리 사용을 제한할 수 있다.

 

네임스페이스는 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술로 별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술이다. 

Window와 MacOS에서 리눅스 커널의 Cgroup, 네임스페이스를 쓸 수 있는 이유

현재 컴퓨터의 호스트 OS와 상관없이 도커는 리눅스 VM에서 돌아간다. 따라서 리눅스의 Cgroup과 네임스페이스를 사용할 수 있다.

도커 컨테이너가 생성되는 순서

1. 도커 클라이언트에 'docker run <이미지>' 명령어를 입력한다.

docker run hello-world

2. 도커 이미지에 있는 파일 스냅숏을 컨테이너에 있는 하드디스크로 옮긴다.

3. 도커 이미지에서 가지고 있는 명령어를 컨테이너에 전다한다.

4. 컨테이너가 실행될 때 명령어를 이용해 hello-world 애플리케이션을 실행한다.