반응형
Docker 이미지를 만드는 기능(Build)
- Docker 는 애플리케이션의 실행에 필요한 프로그램 본체, 라이브러리, 미들웨어, OS나 네트워크 설정 등을 하나로 모아서 Docker 이미지를 만들 수 있다.
- Docker 이미지는 실행환경에서 움직이는 컨테이너의 바탕이 된다.
- Docker에서는 하나의 이미지에는 하나의 애플리케이션만 넣어 두고, 여러 개의 컨테이너를 조합하여 서비스를 구축하는 방법이 일반적이다.
- Docker 이미지는 Docker의 명령을 사용해서 수동으로 만들 수도 있고, Dockerfile이라는 설정 파일을 만들어 그것을 바탕으로 자동으로 이미지를 만들 수도 있다.
- 하지만 지속적 인티그레이션과 딜리버리의 관점에서 코드에 의한 인프라의 구성 관리를 생각하면 Dockerfile을 사용하여 관리하는 것이 바람직하다.
Docker 이미지를 공유하는 기능(Ship)
- Docker 이미지는 Docker 레지스트리(Docker Hub)에서 공유할 수 있다.
- Docker Hub에 로그인하여 레지스트리에 있는 이미지를 검색이나 업로드 다운로드할 수 있다.
- Docker Hub는 GitHub나 Bitbucket와 연계할 수도 있다.
- GitHub상에서 Dockerfile을 관리하고, 거기서 Docker 이미지를 자동으로 생성하여 Docker Hub에서 공개하는 것이 가능.
Docker 컨테이너를 작동시키는 기능(Run)
- Docker 는 리눅스 상에서 컨테이너 단위로 서버 기능을 작동시킨다.
- Docker 이미지만 있으면 Docker 가 설치된 환경이라면 어디서든지 컨테이너를 작동시킬 수 있다.
- 또한, Docker 이미지를 가지고 여러 개의 컨테이너를 기동시킬 수도 있다.
- 다른 가상화 기술로 서버 기능을 실행시키면 OS의 실행부터 시작하기 떄문에 시간이 걸리지만, Docker의 경우는 이미 움직이고 있는 OS상에서 프로세스를 실행시키는 것과 거의 똑같은 속도로 빨리 실행시킬 수 있다.(Docker의 가장 큰 장점으로 생각된다.)
Docker 컴포넌트
Docker는 다음과 같은 몇 개의 컴포넌트로 구성되어 있다.
- Docker Engine(Docker의 핵심 기능)
- Docker Registry(이미지 공개 및 공유)
- Docker Compose : 여러 개의 컨테이너 구성 정보를 코드로 정의하고, 명령을 실행함으로써 애플리케이션의 실행 환경을 구성하는 컨테이너들을 관리하기 위한 툴이다.
- Docker Machine : VirtualBox, Amazon Web Services EC2나 Azure와 같은 클라우드 환경에 Docker의 실행 환경을 명령으로 자동 생성하기 위한 툴이다.
- Docker Swarm(클러스터 관리) : Swarm은 여러 Docker 호스트를 클러스터링하기 위한 툴이다. 클러스터를 관리하거나 API를 제공하는 역할은 Manager가, 컨테이너를 실행하는 역할은 Node가 담당한다.
Docker 작동 구조
Namespace
Docker는 컨테이너라는 독립된 환경을 만들고, 그 컨테이너를 구획화하여 실행 환경을 만든다. 이 컨테이너를 구획하는 기술은 리눅스 커널의 namespace라는 기능을 사용하고 있다.
- PID namespace : PID namespace는 PID와 프로세스를 격리시킨다. 따라서, namespace가 다른 프로세스끼리는 서로 액세스할 수 없다.
- Network namespace : 네트워크 디바이스, IP 주소, 포트 번호, 라우팅 테이블, 필터링 테이블 등과 같은 네트워크 리소스를 격리된 namespace마다 독립적으로 가질 수 있다.
- UID namespace : UID, GID(그룹 ID)를 namespace별로 독립적으로 가질 수 있다. 즉, namespace별로 UID/GID가 0인 root사용자를 각각의 권한을 가지게 할 수 있다.
- Mount namespace : namespace 안에 격리된 파일 시스템 트리를 만들수 있다.
- UTS namespace : namespace 별로 호스트명이나 도메인명을 독자적으로 가질 수 있다.
- IPC namespace : 프로세스 간의 통신(IPC) 오브젝트를 namespace 별로 독립적으로 가질 수 있다.
네트워크 구성(가상 브리지/가상 NIC)
- Linux는 Docker를 설치하면 서버의 물리NIC가 docer0이라는 가상 브리지 네트워크로 연결된다.
- 이 docker0은 Docker를 실행시킨 후에 디폴트로 만들어진다.
- Docker 컨테이너가 실행되면 컨테이너에 172.17.0.0/16이라는 서브넷 마스크를 가진 프라이빗 IP 주소가 eth0으로 자동으로 할당된다.
반응형
'Tech > Docker' 카테고리의 다른 글
Virtualbox Ubuntu 네트워크 환경 구성 (0) | 2019.02.28 |
---|---|
Docker 명령어 모음 (4) | 2018.12.27 |
클라우드 이해 (3) | 2018.12.19 |
Docker Ubuntu 설치(feat. docker 명령어 모음) (0) | 2018.11.23 |
Setup oracle 11g xe for docker (0) | 2018.09.30 |
댓글