본문 바로가기

별걸다하는 IT/기타IT

[도커 docker] 이미지, 컨테이너, 레지스트리란 무엇인가

반응형

안녕하세요~~

이미지, 컨테이너, 레지스트리란 단어, 도커를 잘 모르는 사람들도 많이 들어본 용어죠?

오늘은 도커의 핵심이라고 할 수 있는 요 세 용어들이 무엇인지에 대해 알아봅시다.

 

도커에서 이미지란?

여러분 가상머신 설치해보셨나요??

가상머신에서 우분투 서버를 설치하려면 iso라는 파일을 넣어줘야 했어요.

요런식으로 넣어줬었답니다. 

'Installer disc image file'이라고 되어있죠? 이 iso파일을 이미지라고 하죠~~~

 

이 외에도 예전에는 컴퓨터에 윈도우 운영체제를 설치할때, iso 파일이 구워진 디스크가 있어서 이를 통해 깔았었는데요.

USB를 통해 다운로드 받더라도 윈도우 이미지가 필요합니다. 우찌보면 설치파일(?)같은 개념인거죠.

iso파일(이미지파일)은 요런 운영체제 설치뿐만 아니라, 파일시스템, 또는 그 상태의 스냅샷 등을 기록할수도 있습니다.

즉 그 상태를 저장한 아카이브 파일을 말해요.

 

출처:https://www.cloudsigma.com/how-to-install-and-configure-docker-compose-on-ubuntu-20-04/

사진에서 이미지, 하면 순간 포착된 그 정적인 장면을 의미하잖아요.

IT에서도 여러 환경을 구축한 후 이를 나중에 구울 수 있도록 그 상태값을 카피한 파일이라고 보면 됩니다.

 

도커에서 이미지도 마찬가진대요

내가 만약에 톰캣을 설치해서 사용하고 싶다 하면, 톰캣이미지를 가져와서 쓰면 되는거고~

MySQL을 사용하고 싶다! 하면 MySQL 이미지를 가져와서 사용하면 돼요.

 

만약 우분투, MySQL, 톰캣 등 필요한 기능들을 모두 다운받아서 하나의 환경을 구성했는데 이를 나중에 또 활용하고 싶다하면 요 세트를 하나의 이미지로 만들어 저장할수도 있습니다.

필요한 프로그램이나 라이브러리, 소스 등을 설치한 뒤 만든 하나의 파일이 이미지인거죠.

출처:https://mariadb.com/kb/en/creating-a-custom-docker-image/

아직 컨테이너 개념을 설명하지 않았으니, 위 사진에서 컨테이너를 컴퓨터라고 대충 치환해서 설명해볼게요

하나의 이미지를 가져와서 A컴퓨터에 설치하고, B컴퓨터에 설치하고, C컴퓨터에 설치하면 3개의 컴퓨터가 모두 동일한 설정을 갖겠죠?? 이렇게 활용할 수 있는거예요~

 

대충 예상하셨겠지만, 컨테이너는 가상환경으로 이미지를 독립된 공간에서 각각 실행시킬 수 있게 해줘요.

마치 가상머신(ex Vmware) 설치하면 가상의 컴퓨터를 여러대 띄우듯 꾸밀 수 있는거처럼요~~

 

도커 레지스트리란?

스팀에서 게임 다운로드 받는다 치면, 게임이 하나의 이미지가 되는거죠

배틀그라운드 이미지, 어쎄신크리드 이미지, 프린세스메이커 이미지 등등..

근데 이거 어디서 다운받아요?? 스팀 상점이 있어서 상점에서 다운로드 받죠?

사진출처:https://docs.microsoft.com/en-us/dotnet/architecture/microservices/container-docker-introduction/docker-containers-images-registries

도커도 마찬가지입니다

우리가 우분투가 필요하고,, 파이썬이 필요하고,, 고언어가 필요하고,, MySQL이 필요하고,, 엔진엑스가 필요할수도 있고..

내가 어떻게 구축을 하고 어떤 개발을 하느냐에 따라 필요한 이미지가 다양할 수 있는데요.

설치할 수 있는 이미지를 모아둔 곳을 레지스트리라고 해요.

레지스트에서 필요한 이미지를 찾아 게임 다운받듯 가져오는거죠~~

 

[도커 레지스트리]

도커에서 명령어로 레지스트리에 등록된 이미지를 검색해볼 수 있습니다.

 

sudo docker search tomcat

search라는 키워드를 이용해서 사용하고자 하는 이미지를 검색해주면 됩니다.

이렇게 명령어를 이용하는 거 외에도 사이트를 통해 좀 더 가시적으로 찾는 방법도 있는데요

 

레지스트리 검색 사이트: https://hub.docker.com 

사진 클릭하면 사이트로 이동!

위 사이트에 들어가면 이렇게 레지스트리에 있는 이미지들을 확인할 수 있습니다.

 

첫 번째 결과처럼 경로 없이 이름만 있는 경우 공식적인 이미지 파일이고, 

두 번째 결과처럼 '/'가 있는 경우에는 일반 사용자가 올린 이미지라고 보시면 돼요.

 

도커에서 컨테이너란 무엇인가?

자~~ 레지스트리와 이미지에 대한 개념을 알아봤어요~~!

쉽게 말해 이미지란 결국 설치파일인거고, 원하는 이미지를 다운받아 설치하려면, 설치할 수 있는 환경이 있어야겠죠??

게임도 컴퓨터에 설치해야 실행할 수 있는 것처럼요.

출처: https://itnext.io/intro-to-docker-part-1-5b1162c81735

도커에서는 이미지를 독립된 공간에서 실행할 수 있게 해주는 가상환경 요소를 컨테이너라고 합니다.

 

A이미지를 설치한 컨테이너를 3개 띄울수도 있는거고요,

하나의 컨테이너는 A이미지를 또 다른 컨테이너에는 B이미지를 이렇게 다르게 실행시킬수도 있는거예요.

 

B서비스는 자바 13으로 구성했는데, A서비스에서는 자바 8.1버전 이상부터는 안들어가는 그런 제한조건이 있을경우 두 컴포넌트가 충돌이 되겠죠. 이렇듯 내가 개발하고자 하는 서비스가 서로 다른 환경을 요할수도 있거든요.

 

이렇게 서비스들이 다양한 종속성이나 환경을 가지고 있을 경우 서로 충돌이 있을 수 있는데요

도커의 컨테이너는 독립적인 가상환경에서 실행하기 때문에 이를 방지할 수 있습니다.

 

어찌보면 가상머신과 유사한거 같은대~?

가상머신과 컨테이너의 비교가 안나올수가 없겠죠~~

가상머신도 여러개의 가상환경을 독립적으로 띄어서 사용하는거니까요.

VMware예시

가상머신의 경우 여러 개의 운영체제를 하나의 호스트에서 생성해서 사용하는 방식인데요.

제 데탑에 설치된 가상머신에는 4개의 가상환경이 생성되어 있네요

그리고 각각의 가상환경에는 OS와 RAM등 하드웨어적 부분이 각각 구현되어 있습니다.

즉 내가 컴퓨터를 4대 살순 없으니 가상으로 여러대 만드는? 그런느낌인거죠 ㅋㅋ

 

가상머신이 하이퍼바이저를 거쳐, 독립된 공간을 생성하고 운영체제 라이브러리, 커널, 자원 등을 전부 구현하고 할당하기 때문에 성능 손실이 좀 있습니다. 오버헤드가 큰거.

 

그런데 도커 컨테이너는 단위가 프로세스 격리환경이기 때문에 약간 느낌이 다릅니다.

운영체제를 공유하고, 리눅스 namespace나 cgroup등의 명령어로 환경을 분리했다고 해야하나? 좀 더 윗단에서 분리한 느낌이예요. 그렇기 때문에 필요한 커널은 서로 공유하고, 서비스를 구동하는데 필요한 환경부분들만 이미지로 저장해요. 이와 같은 이유로 도커의 컨테이너가 가상머신보다 가볍고 빠릅니다.

위와 같은 특징들로 도커가 어플리케이션을 개발하고 배포하는데 유용하게 사용되는거!

 

오늘은 간략하게 도커 컨테이너, 이미지, 레지스트리에 대한 개념을 적어봤어요.

다음 포스팅에서는 실제 레이어를 컨테이너에 실행하는 실습을 진행하고 레이어에 대한 개념을 설명해보려고 합니다.

도움이 되었다면 공감은 큰 힘이 됩니다~~!

반응형