프린세스 다이어리

도커 이미지 레이어 / 도커 허브 / 도커 계층(layer) / 도커의 장점 4가지 본문

BE

도커 이미지 레이어 / 도커 허브 / 도커 계층(layer) / 도커의 장점 4가지

개발공주 2021. 9. 15. 12:00
728x90
도커 이미지는 불변의 내용과 업데이트한 내용이 각각 계층화되어 있다는 점에서 이미지 수정과 운영이 용이하다. 이 때문에 도커 허브에서 다양한 애플리케이션을 내려받아 바로 개발을 할 수 있다는 장점이 생긴다. 도커의 장점과 함께 정리해보았다.

 

1. 도커 이미지 레이어(layer)

 

앞서 도커 이미지에 대한 글에서, 도커 이미지란 컨테이너 실행에 필요한 설정값이 포함되어 있는 불변성(immutable)을 가진 기술이라고 언급했다. 도커 이전에도 LXC(리눅스 컨테이너, Linux Container)컨테이너 기술은 있었다. 도커 또한 LXC 기술을 기반으로 발전하였지만, 컨테이너를 실행하는 것 이상의 기능을 제대로 제공하지는 못했다. 컨테이너의 환경을 완전하고 효율적으로 복원하는 기능을 보완하여 이후에는 자체적인 Libcontainer 기술을 사용하게 됐고, 추후 runC 기술에 합쳐졌다. 도커가 기존 컨테이너 기술이 가진 문제를 해결할 수 있도록 하는 것이 바로 이미지다.  

 

도커파일이 업데이트되는 과정을 레이어로 설명

 

컨테이너의 환경을 완전하고 효율적으로 복원하는 기능은 바로 도커 이미지의 레이어(layer) 개념으로 실현할 수 있었다. 유니온 파일 시스템을 활용하여 여러 개의 레이어를 하나의 파일 시스템으로 사용할 수 있게 되었다. 이 여러 개의 레이어에는 읽기 전용인 read only 레이어와, 새로 변경되거나 추가된 내용을 담은 새로운 레이어로 구성된다. 깃에 커밋 로그를 쌓는 것처럼 도커 이미지 파일에도 작업을 지속하면 여러 레이어가 생겨나는 것이다.

 

도커 이미지는 컨테이너를 실행하기 위한 모든 프로그램 정보를 가지고 있기 때문에 보통 용량이 수백 MB 이상이 된다. 따라서 작업을 할 때마다 업데이트된 이미지를 받아와야 한다면 시간이 많이 소요될 것인데, 기존 레이어는 그대로 둔 채 새로 업데이트된 내용만 담고 있는 레이어만 쌓는 개념으로 관리를 하기 때문에 효율적이다. 업데이트된 부분만을 이미지로 생성하고 실행 시점에 베이스 이미지를 바뀐 부분과 조합하기 때문에 바뀐 이미지의 크기는 큰 변화가 없다. 마치 깃에서 업데이트된 소스를 pull 받는 것과 비슷한 모양이다.

 

도커 컨테이너를 실행하는 것도 레이어로 설명된다.

 

이미지를 수정하는 것은 레이어 개념으로 설명할 수 있지만, 이미지를 실행하여 도커 컨테이너를 생성할 때도 레이어 개념으로 설명 가능하다. 기존의 읽기 전용 이미지 레이어 위에 읽기/쓰기 전용 레이어(R/W layer) 를 추가한다. 이미지 레이어를 그대로 불변의 레이어로 사용하면서, 컨테이너가 애플리케이션 실행 중에 생성하는 모든 파일이나 변경사항은 R/W layer에 저장되므로 여러 개의 컨테이너를 실행하면서 이미지는 불변성을 유지할 수 있는 것이다.

 

2. 도커 이미지 원격저장소, 도커 허브(Docker Hub)

도커는 깃허브처럼 도커허브에 이미지를 생성, 커밋, push 하고, 작업물을 다시 pull 받을 수도 있다.

 

도커 허브는 도커 이미지 저장장소다. Git 원격 저장소인 Github에서 소스를 관리하듯 도커 허브라는 원격 중앙 저장소에서 이미지 버전 관리를 할 수 있다. 깃과 마찬가지로 이미지를 commit, push, pull 할 수 있고 다양한 애플리케이션 이미지를 내려받을 수 있다. 이미지를 도커 허브에 올리거나 내려받을 때 의존하는 부모 이미지가 있다면 함께 올리거나 내려받는다.

 

 

3. 도커 컨테이너의 장점 정리

 

3-1. 개발환경 구축, 비즈니스 요구사항에 신속하게 대응 가능

 

개발 프로젝트는 보통 다수의 개발자와 협업하여 진행된다. 이를 위해 여러 컴퓨터, 여러 환경에서 동일한 개발 환경을 구축하는 일이 선행되어야 하는데 도커 컨테이너 기술을 사용하면 프로젝트 개발 및 실행 환경을 수월하게 일치시킬 수 있다. 프로젝트 진행 중간에 변경 사항이 생기는 경우에는 이미지끼리 공유되기 때문에 효율성이 더 증대된다. 기업에서 비즈니스 규모가 확장되거나 서비스가 변경되는 경우, 이에 맞추어 스케일링을 간단히 할 수도 있고 신기능을 추가하는 업데이트도 간단하게 진행할 수 있다.

 

3-2. 마이크로서비스 아키텍처에 부합함

 

도커의 컨테이너 기술은 애플리케이션을 필요에 따라 일부 또는 전체를 분리하여 업데이트하거나 복구하는 기능이 강력하다. 전통적인 모놀리틱(Monolithic) 애플리케이션을 부분적으로 해체함으로써, 비즈니스 요구에 맞게 별개의 애플리케이션이 부분적으로 확장되고 수정될 수 있도록 하는 방식이 마이크로서비스다. 컨테이너는 경량이고, 이동성 있고, 업데이트가 용이하다는 점에서 마이크로서비스에 부합하는 기술이다.

 

3-3. 배포 및 롤백에 필요한 리소스 단축

 

컨테이너를 추가하거나 이동하기 위해 OS를 부팅할 필요가 없어 배포 속도가 크게 단축되고, 이 때문에 컨테이너에서 생성된 데이터를 비용 효율적으로 쉽게 생성하고 삭제할 수 있다. 또 이미지 레이어의 특성 상, 방금 배포한 소스에 문제가 생겼을 경우, 이전에 개발했던 레이어 버전으로 신속히 롤백이 가능하다. 

 

3-4. 시스템 자원 절감

 

컨테이너에 담긴 애플리케이션은 가상 머신보다 훨씬 더 적은 메모리를 사용하기 때문에, 가벼운 프로젝트라면 호스트 OS에서 수십 개도 운영이 가능하다. 이렇게 되면 VM 등 가상 머신을 활용하는 것보다 훨씬 더 적은 비용으로 여러 애플리케이션을 구동할 수 있다. 

 

728x90
Comments