[Docker] Docker란?
[Docker] Docker란?
도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다.
- 컨테이너라 하면 배에 실은 네모난 화물 수송용 박스를 생각할 수 있다.
- 각각의 컨테이너 안에는 옷, 신발, 전자제품, 술, 과일등 다양한 화물을 넣을수 있고
규격화되어 컨테이너선이나 트레일러등 다양한 운송수단으로 쉽게 옮길 수 있음
- 서버에서 이야기하는 컨테이너도 이와 비슷
- 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 해줌
- backend 프로그램, DB서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화 할 수 있고 조립PC, AWS, Google cloud등 어디에서든 실행 할 수 있음
- 컨테이너를 가장 잘 사용하는 기업은 구글인데 2014년 발표에 따르면 구글은 모든 서비스들이 컨테이너로 동작하고 매주 20억개의 컨테이너를 구동한다고 함
- 새로운 컨테이너를 만드는데 걸리는 시간은 겨우 1~2초로 가상머신과 비교도 할 수 없이 빠르다.
이미지
도커에서 가장 중요한 개념은 컨테이너와 함께 이미지라는 개념임
- 이미지는 컨테이너 실행에 필요한 파일과 설정값등을 포함하고 있는 것
- ex) ubuntu이미지는 ubuntu를 실행하기 위한 모든 파일을 가지고 있음
- ex) MySQL이미지는 debian을 기반으로 MySQL을 실행하는데 필요한 파일과 실행 명령어, 포트 정보등을 가지고 있음
- 말그대로 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 의존성 파일을 컴파일하고 이것저것 설치할 필요가 없다
- 컨테이너는 이미지를 실행한 상태라고 볼 수 있음
- 추가되거나 변하는 값은 컨테이너에 저장
- 같은 이미지에서 여러개의 컨테이너를 생성할 수 있고, 컨테이너의 상태가 바뀌거나 컨테이너가 삭제되더라도 이미지는 변하지 않고 그대로 남아 있음
레이어 저장 방식
- 도커이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수백MB에 이름
- 처음 이미지를 다운받을 땐 크게 부담이 안되지만 기존 이미지에 파일 하나 추가했다고 수백MB를 다시 다운받는다면 매우 비효율적
- 도커는 이런 문제를 해결하기 위해 레이어(layer)라는 개념을 사용함
- +유니온 파일 시스템을 이용하여 여러개의 레이어를 하나의 파일시스템으로 사용할 수 있게 해줌
- 이미지는 여러개의 읽기 전용(Read Only)레이어로 구성되고 파일이 추가되거나 수정되면 새로운 레이어가 생성 됨
댓글
댓글 쓰기