Docker란?
다양한 운영체제와 시스템 환경 상에서, 서버 셋업을 위한 작업이 각각 다르고 복잡함. 도커는 컨테이너 기반의 가상화 플랫폼으로, 컨테이너 상에 서버를 셋업해놓을 수 있음. 따라서 기반 환경이 다르더라도, 언제든 해당 컨테이너를 실행만 하면, 동일한 서버 셋업이 가능함.
Docker Internals
docker는 리눅스 컨테이너부터 시작된 기술임. 내부 기술에 대해 가볍게라도 이해하면 훨씬 깊은 레벨의 이해가 가능함
LXC(LinuX Containers)
- 단일 컴퓨팅 시스템에 설치된 리눅스 운영체제 상에서, 다른 영역과 완전히 분리된 별도의 리눅스 시스템을 운영할 수 있는 리눅스 커널 기술
- 리눅스 운영체제 레벨에서 영역과 자원 할당 (CPU, 메모리, 네트워크) 등을 분리하여, 마치 별도의 시스템처럼 사용할 수 있는 기술의 의미함
- 다른 가상 시스템의 경우, 하드웨어 레벨에서 별도의 컴퓨터인 것처럼 분리해서 사용할 수 있는 기술도 있음. 이를 운영체제 레벨에서 할 수 있는 기술이라고 이해하면 쉬움
- docker는 리눅스 커널에 LXC 기술을 사용해서,
- ‘리눅스 컨테이너’를 만들고, (분리된 공간을 리눅스 컨테이너라고 부름)
- 리눅스 컨테이너 상에 별도로 구성된 파일 시스템에 시스템 설정 및 응용 프로그램을 실행할 수 있도록 하는 기술을 정의한 것이라고 이해하면 됨
- docker를 만들 때마다 container를 만들어서 그 안에서 개별적인 시스템이 동작하도록 만든 기능
- 초기 docker는 LXC 기술을 기반으로 구현하였으나, 최근에는 별도의 컨테이너 기술을 구현하여 사용하고 있음
Docker 주요 구성 요소
docker Engine
- docker는 서버 / 클라이언트 구조로 이루어짐
- 서버는 docker daemon process (데몬 프로세스) 형태로 동작
- 데몬이란, 보통 계속 실행 중인 프로그램 → 계속 떠있다고도 이야기 함
- docker daemon process에 요청하기 위해, 프로세스 간 통신 기법이 필요하며, docker는 이를 위해 REST API를 사용함
- 참고 : 더 깊은 이해를 위해서는 컴퓨터 공학 운영체제의 프로세스 구조와, 프로세스 간 커뮤니케이션 부분을 이해해야 함
- docker command는 일종의 클라이언트라고 이해하면 됨
- docker command가 어떻게 docker daemon process에게 전달이 되는가? docker command를 내리면, 결국 내부적으로 Rest API를 사용해서, docker daemon process를 호출하는 방식
- ex. docker ps : 내부적으로는 마치 http GET ‘docker daemon process’/api-version/containers 명령처럼 Rest API로 호출
- 서버는 docker daemon process (데몬 프로세스) 형태로 동작
정리 : docker daemon process 가 떠있고(서버라고 생각) 이 상태에서 docker command(일종의 클라이언트처럼 명령을 내리는 인터페이스)를 실행하면 해당 명령이 떠있는 docker daemon process에 전달이 되고 docker의 기능이 동작을 한다. → 따라서 docker가 반드시 실행이 되어있어야 docker 명령이 적용된다.
docker image
- docker 컨테이너를 생성하기 위한 명령들을 가진 템플릿 (명령들이 layer처럼 쌓여있는 script의 집합)
- 여러 이미지들을 layer로 쌓아서, 원하는 형태의 이미지를 만드는 것이 일반적임
- 예 : ubuntu 이미지에, apache 웹 서버 이미지를 얹어서, 웹 서버 이미지를 만듦
- 이미지는 정적인 파일 → 이 파일을 실행해서 동작이 되어야 실제 프로그램이 실행되는 것임
docker container
- docker image가 리눅스 컨테이너 형태로 실행한 상태(instance)를 의미함
- docker daemon에 있는 커널에서 LXC로 리눅스 컨테이너를 생성한 후, 해당 컨테이너에 docker image에 포함된 명령을 실행하여, docker container를 만들고, 실행함
- docker container는 분리된 공간이므로, docker daemon process를 통해, 접속할 수도 있고, 내부에 들어가서, 코드 수정, 재실행 등도 가능함
- 결국 docker는 image와 container를 다뤄서, 작업을 한다고 이해하면 됨
본 글은 인프런 강의 "풀스택을 위한 도커와 최신 서버 기술"에 대해 공부하여 정리한 글입니다.
[강의 링크] : https://www.inflearn.com/course/%EC%84%9C%EB%B2%84%EA%B8%B0%EC%88%A0-%ED%92%80%EC%8A%A4%ED%83%9D-3/dashboard
'💻 개발 > 인프라' 카테고리의 다른 글
local에 docker 설치하기 (0) | 2023.06.04 |
---|---|
docker - 이미지를 다루는 다양한 옵션 (0) | 2023.06.04 |
ubuntu EC2에 docker 설치하기 (0) | 2023.06.03 |
클라우드 서비스(AWS 서버 구축) (0) | 2023.06.01 |
모던 서버 기술 관련 배경 지식 이해 (0) | 2023.06.01 |