Docker Engine
도커 엔진을 설치하면 Docker CLI, 도커 데몬, REST API 서버 를 백그라운드 서비스로 실행한다.
도커 데몬은 이미지 컨테이너 볼륨 및 네트워크와 같은 Docker 객체를 관리한다.
Docker REST API 서버는 프로그램이 도커 데몬과 통신을 위해 사용할 수 있는 API 인터페이스이다.
이 REST API 를 활용해서 자신의 도구를 만들수 있다.
CLI 는 앞으로 다뤄볼 docker run 등의 명령어 셋을 제공하며 명령어 셋을 사용하더라도
내부적으로는 REST API 를 사용해서 도커 데몬과 통신한다.
도커 CLI 가 반드시 동일한 호스트에 있을 필요는 없고 랩톱과 같은 다른 시스템에 있을 수 있는데
이 경우 docker -H 옵션을 통해 도커 엔진 주소와 포트 정보를 제공하여 도커 엔진이 설치된 도커 호스트에
명령을 보낼수 있게 된다.
예를 들어 다음과 같이 도커 엔진에 컨테이너를 생성하도록 명령을 줄 수 있다.
Namespace
VM 에서는 게스트 머신별로 독립적인 공간을 제공하고 서로가 충돌하지 않도록 하는 기능을 갖고 있다.
리눅스에서는 이와 동일한 역할을 하는 네임 스페이스 기능을 커널에 내장하고 있고
-
mnt (파일시스템 마운트): 호스트 파일시스템에 구애받지 않고 독립적으로 파일시스템을 마운트하거나 언마운트 가능
-
pid (프로세스): 독립적인 프로세스 공간을 할당
-
net (네트워크): namespace간에 network 충돌 방지 (중복 포트 바인딩 등)
-
ipc (SystemV IPC): 프로세스간의 독립적인 통신통로 할당
-
uts (hostname): 독립적인 hostname 할당
-
user (UID): 독립적인 사용자 할당
Docker 에서는 이 네임 스페이스 기능을 사용한다.
즉 Docker 는 네임 스페이스를 사용하여 작업 공간 프로세스 ID 네트워크 등의 컨테이너 리소스를 분리한다.
예를 들어 프로세스를 네임스페이스로 어떻게 격리하는지 살펴보자.
리눅스 시스템이 부팅될 때마다 하나의 프로세스만으로 프로세스를 시작한다. ( PID : 1 )
이것은 루트 프로세스이며 시스템 시간에 따라 시스템의 모든 다른 프로세스를 차일드 프로세스로 시작한다.
이 프로세스 ID 는 유니크하여 동일한 프로세스 ID 를 가질 수 없다.
이제 컨테이너를 시작하였다고 생각해보자.
이는 기본적으로 현재 시스템 내에서 시작한 자식 시스템이 된다.
이 자식 시스템은 독립적인 시스템으로 루트 프로세스에서 시작된 고유한 프로세스 셋을 가진다.
하지만 실상 기존 시스템에 실행된 프로세스에도 해당 프로세스가 잡히지만 네임 스페이스 공간에서
조회시와 도커 호스트에서 조회시 PID 가 서로 다르게 나오게 된다.
어쨌던 도커는 이 네임 스페이스 기능을 사용하여 분리된 환경을 컨트롤 하고 자신의 리소스만 확인 가능하게 된다.
cgroups
cgroup 은 cpu, memory 등의 자원에 대한 제어를 가능하게 해주는 리눅스 커널의 기능이다.
-
메모리
-
CPU
-
I/O
-
네트워크
-
device 노드(/dev/)
도커에서도 이 기능을 사용해 도커 호스트의 자원을 컨테이너 별로 할당할 수 있다.
Docker 라이프 사이클
1. Build => 특정 사용자가 Dockerfile 을 빌드해서 Docker Image 를 만든다.
2. Push => Docker Registry 에 이미지를 저장한다.
3. Search, Pull, Run => 이후 다른 사용자가 Docker Registry 에서 해당 이미지 를 검색 (Search) 및 다운 (Pull) 하여 실행 (Run) 한다.
4. Commit => 실행중인 이미지 (컨테이너) 에서 변경 사항이 발생해서 이를 로컬 이미지에 저장한다.
5. Push => 현재 수정된 이미지를 다시 저장한다.
Docker Hub
위에 Docker Registry 라는 이름으로 이미 그려넣었는데 Docker Hub 라는 공식 도커 이미지 Registry 사이트가 이미 있다.
즉 Docker 는 Docker Hub 를 통해 이미지를 공유하는 생태계가 구축되어 있다.
유명 리눅스 배포판과 오픈 소스 프로젝트 ( Nginx 등 ) 의 Docker 이미지는 모두 Docker Hub 에서 구할 수 있다.
hub.docker.com 에서 검색하거나 docker search [검색어] 명령으로 사용 가능한 이미지를 검색할 수 있고 결과는 동일하다.
보통 ubuntu, centos, redis 등 OS 나 프로그램 이름을 가진 이미지가 공식 이미지이고
나머지는 사용자들이 만들어 공개한 이미지이다.
태그의 목록은 해당 이미지를 클릭하고 들어가면 볼 수 있다.
도커 이미지를 받는 방법도 바로 확인할 수 있다.
관리자 권한에서 docker pull 을 실행하면 해당 컨테이너를 관리자 권한으로 얻어오면 된다.
'Container > Docker' 카테고리의 다른 글
07. Docker Image (0) | 2020.01.14 |
---|---|
06. Docker Run (0) | 2020.01.14 |
04. Docker CE 설치하기 (0) | 2020.01.14 |
02. 가상 머신과 Docker (0) | 2020.01.14 |
01. Docker 소개 (1) | 2020.01.14 |