구체적인 구분이 없다면 Container와 Docker는 동일한 기술을 의미함
다음과 같은 경우가 발생할 수 있다.
컴포넌트를 다른 컴포넌트, OS와 독립적으로 관리
하기 위해 컨테이너 기술을 사용한다.
컨테이너 기술을 사용함으로써, 컴포넌트들은 각자의 환경, 필요로 하는 라이브러리, 의존성을 사용할 수 있게 된다.
고유한 프로세스, 서비스를 실행할 수 있음
네트워킹 인터페이스, 저장공간을 가질 수 있음
LXC, LXD, LXCFS와 같은 다양한 Container 기술이 존재하나 Docker
가 대표적인 기술로 주로 사용된다.
컨테이너는 동일한 OS의 커널을 공유한다
Docker는 LXC를 기반으로 만들어진 컨테이너 기술
사용자가 편하게 컨테이너 기술을 사용할 수 있도록 도와주는 것 = Docker
Docker는 OS kernel을 공유한다
의 의미는 크게 두 가지로 풀이될 수 있다.
Linux환경을 예로 들면,
유저 인터페이스, 드라이버, 컴파일러, 파일 시스템 등(Set of SW)
을 통해 Common Linux Kernel을 Customize한다.만약 Ubuntu에서 Container를 정의했다면, 그 Container는 Fedora에서도 사용할 수 있다.
즉, 같은 OS Kernel을 사용하는 어떠한 OS 환경에서도 공유할 수 있는 것이다.
그러므로, Ubuntu에서 정의한 컨테이너를 Fedora에서는 실행시킬 수 있는데, Windows에서는 실행시킬 수 없다.
Docker는 OS에 맞게, 필요한 Set of SW
만 변경해서 OS 호환성을 지원한다.
Virtual Machine은 Host OS와는 별도로 각자마다 OS를 가진다. 그렇기 때문에 Container에 비해 상대적으로 Utilazation, Isolation이 높다.
그러나 더 큰 Size를 차지하고, Boot up 시간을 더 요구한다.
항목 | Docker | Virtual Machine |
---|---|---|
OS | Host OS위에서 작동 | 각자의 OS를 가짐 |
Utilzation | 낮음 | 높음 |
Isolation | 낮음 | 높음 |
Size | 작음 | 큼 |
Boot up | 빠름 | 느림 |
Public Docker Registry (Docker hub)를 통해 미리 만들어진 Docker Image를 공유할 수 있다.
단순히 다음 명령을 통해 Docker Container를 구동시킬 수 있다.
docker run IMAGE_NAME
Image
는 일종의 Template,
Container
는 Image에 대한 Instance
직접 Image를 만들어서 public repository에 공유할 수 있다.
# Repository에서 Image 불러오기
docker pull IMAGE_NAME
# 컨테이너 목록 확인
docker ps
# 컨테이너 접속
docker exec -u root -it COTAINER_ID(or CONTAINER_NAME) bash
# Docker-compose 실행
docker-compose up -d
# Docker-composer 종료