Container
Docker
를 이해하기 위해서는 Container에 대한 이해가 필요합니다. Container는 애플리케이션을 어떠한 환경이든 실행할 수 있도록 사용되는 라이브러리와 같은 필요한 모든 요소들을 하나의 패키지로 패키징하여 하나의 독립적인 프로세스로 격리시키는 기술
을 의미합니다.
Benefit of Container
- 하드웨어 레벨에서 가상화되는 VM과 다르게 Containter는 OS 레벨에서 가상화되어 OS Kernel을 공유하기 때문에
VM 보다 훨씬 적은 메모리를 사용
합니다. - 애플리케이션을 실행하기 위한 모든 구성요소들을 하나로 패키지하여 제공되고, 실행환경에 구애받지 않기 때문에
이식성
및워크로드의 이동성
이 보장됩니다. - 개발자는 애플리케이션과 라이브러리와 같은 구성요소들에만 집중할 수 있고, 운영 팀은 배포에만 집중할 수 있기 때문에
책임 분리
가 가능해집니다.
워크로드의 이동성은 작업이나 데이터가 다른 시스템, 플랫폼 또는 환경으로 자유롭게 이동할 수 있는 능력(이식성)을 말합니다. 보통 워크로드의 이동성은 가상화 기술, 컨테이너화된 환경 등을 통해 구현됩니다.
Docker
Docker는 앞서 언급한 컨테이너 기술을 기반으로한 오픈소스 가상화 플랫폼입니다. Docker를 통해 여러 컨테이너들을 관리할 수 있습니다.
위키백과에서는 도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트라고 설명하고 있습니다.
Docker 의 특징
Docker는 컨테이너 기술을 기반으로 하기 때문에 컨테이너의 이점과 많은 부분이 겹칩니다.
- 확장성 및 이식성
- 도커가 설치되어있으면 어떤환경에서든 컨테이너를 실행할 수 있습니다.
- 오픈소스이기 때문에 특정 서비스에 종속적이지 않습니다.
- 표준성
- java, ruby, node, go, php 로 이루어진 애플리케이션의 배포방식은 모두 다릅니다. 하지만 도커를 통해 모든 서비스들의 배포과정이 표준화되어 간단해집니다.
- 이미지
- 도커에서 컨테이너를 실행하기위해서는
Image
라는 파일이 필요합니다.Image
파일은Dockerfile
을 이용하여 빌드할 수 있습니다. 또한, 빌드 기록이 남기 때문에 버전관리 또한 가능합니다. - 이미지 파일을 이미지 저장소인 Docker Hub에 저장하고, 운영서버에서 해당 이미지를 불러와 컨테이너를 실행할 수 있습니다.
- 도커에서 컨테이너를 실행하기위해서는
- 설정파일
- 설정을
환경변수
로 제어 및 관리합니다. - 컨테이너를 띄울 때
MYSQL_PASS=password
와 같은 환경변수를 지정할 수 있습니다.
- 설정을