brunch

You can make anything
by writing

C.S.Lewis

by TEN Aug 29. 2023

AI계의 셀럽 ChatGPT에게 도커를 묻다

도커(docker)가 그래서 대체 뭔가요, GPT 선생님?

안녕하세요, 에디터 SA입니다. 이번 주제는 AI, 또는 애플리케이션에 대해 알아가다 보면 꼭 마주치는 ‘도커’에 대해 이야기해 볼까 해요. 이번 ‘AI, 더 쉽게’의 주제는, 도커가 뭐지? 하고 홀로 고민에 빠져서 구글을 찾던 저에게, 이사님께서 던지신 한 마디가 큰 힌트가 되었답니다. (!)


A 이사님   “챗GPT한테 물어봐요. 설명 진짜 잘해주는데!”


그렇구나! 왜 그 생각을 못 했을까요? AI 솔루션 기업에서 근무한다는 사실이 무색하게도, 저는 Chat GPT의 존재를 그제야 떠올렸습니다. 뒤이어, 이사님께서 던지신 한 마디. “에디터 SA가 AI에 대해 알아가는 콘텐츠이니까, 챗GPT의 도움을 받는 것도 새로운 콘텐츠가 되지 않을까요?”


이제는 모르는 게 거의 없다는 ChatGPT, 정확도가 날로 높아지고 이해도 쉽다는 챗 씨(?)의 힘을 빌려보기로 했어요.


그렇습니다. 그래서 이번에는, 제가 열심히 찾고 공부한 내용을 공유하는 동시에, ChatGPT의 친절한 설명을 곁들여 보려고 해요. AI에 대해 알아 보는 콘텐츠이니, AI의 도움도 한 번 받아보는 경험을 해보려 합니다. 갑자기, 인간과 AI의 설명 대결이 연상되기도 하네요. 그럼, 지금부터, ChatGPT가 가진 빅데이터와 구성력을 잠시 빌려, 오늘은 ‘도커’의 개념과 용어에 대해 알아보겠습니다. :)




[ ChatGPT가 그러는데, 도커는 플랫폼이래요! ]

ChatGPT에게 정확한 답을 듣고 싶어서, 이렇게 질문해 보았어요.


도커(docker). 배경지식이 없는 상태로 이 단어를 접하게 되면, 배들이 정박해 있는 항구 같은 곳이 연상되는데요. AI나 애플리케이션 개발에서 사용되는 ‘도커’는 컨테이너화된 애플리케이션을 구축, 배포 및 실행하기 위한 오픈 소스 플랫폼입니다. 컨테이너화된 애플리케이션들이 정박하여 있는 항구, 바로 ‘도커’에서 선박을 건조하여 출항하듯이 구축, 배포, 실행할 수 있는 거죠. 챗GPT에 따르면, 도커를 사용하면 애플리케이션과 그에 필요한 모든 종속성(라이브러리, 환경 설정 등)까지 격리된 환경인 컨테이너로 패키징할 수 있다고 합니다. 개념을 알고 나니, ‘도커(docker)’ 라는 이름이 정말 딱 맞는 플랫폼이라는 생각이 드네요. :)


ChatGPT는 도커의 장점에 대해서 이렇게 설명해 주었습니다.

도커는 애플리케이션 개발 및 배포를 단순화하고, 일관된 실행 환경을 제공하여 개발자와 운영팀 간의 협업을 강화합니다. 또한 도커는 이미지라는 패키지 형식을 사용하여 애플리케이션과 그 종속성을 버전 관리하고 공유할 수 있도록 합니다.

이로 인해 도커는 개발 프로세스를 가볍고 효율적으로 만들어 주며, 다양한 환경에서 애플리케이션을 실행하는 데 유용한 도구로 널리 사용되고 있습니다.


그런데, 설명을 읽고 나니, 뜻이 궁금한 개념들이 더 생겼습니다. 컨테이너? 이미지?@.@ 우리가 평소에 자주 쓰는 단어와 같은 모양이지만, 이 둘은 ‘도커 객체’로서 다른 의미로 쓰이고 있습니다. 도커 객체는 도커에서 사용되는 단위이자 핵심 구성 요소로 동작하는 개념인데요. 도커 CLI나 API를 통해 생성, 수정, 삭제 등의 작업을 수행할 수 있습니다. 도커 컨테이너, 이미지, 네트워크, 볼륨 등 ‘도커’를 주제로 한 개발자 간의 대화를 옆에서 듣다 보면, 자주 접할 수 있는 단어들입니다.


그 중, 위에서 ChatGPT가 언급한 컨테이너와 이미지, 이 두 개념을 간단히 알아보기 전에, ‘도커’ 용어로 쓰이는 가장 기본적인 표현을 간단히 정리해 볼까요? 


도커 클라이언트(Docker Client)
도커 클라이언트는 사용자와 도커 데몬 간의 상호작용을 담당하는 도구입니다. CLI(Command Line Interface)나 API를 통해 도커 명령을 실행하고 도커 데몬과 통신하여 컨테이너, 이미지, 네트워크 등 도커 리소스를 관리합니다.

도커 데몬(Docker Daemon)
도커 데몬은 도커의 핵심 컴포넌트로, 도커 서비스를 실행하고 관리하는 백그라운드 프로세스입니다. 도커 데몬은 도커 클라이언트와 상호작용하며 컨테이너 생성, 이미지 빌드, 네트워크 관리 등 다양한 도커 작업을 처리합니다.

도커 데스크톱(Docker Desktop)
도커 데스크톱은 Windows 및 macOS 시스템에서 도커 개발 환경을 제공하는 통합 솔루션입니다. 도커 엔진, 도커 CLI, 도커 Compose, 도커 레지스트리 등의 도구를 포함하여 개발자가 쉽게 도커를 설치하고 사용할 수 있도록 지원합니다.

도커 레지스트리(Docker Registry)
도커 레지스트리는 도커 이미지를 저장하고 공유하기 위한 중앙 저장소입니다. 도커 이미지는 레지스트리에 푸시(push)되거나 풀(pull)하여 다른 개발자나 시스템과 공유할 수 있습니다. 도커 허브(Docker Hub)는 가장 널리 사용되는 공개 도커 레지스트리입니다.




[ ChatGPT “도커 컨테이너는 독립적이고 안정적이에요.” ]


앞서 도커(Docker)에 대해 이야기 할 때, ‘컨테이너화된 애플리케이션’이라는 표현을 사용했는데요. 여기에서 말씀드린 ’컨테이너(Container)’란, 애플리케이션과 애플리케이션을 실행하는 데 필요한 모든 파일, 라이브러리, 환경 설정 등을 격리된 환경으로 패키징한 것을 말합니다. 


도커 컨테이너(Docker Container)까지는 ChatGPT의 도움을 조금만 받고도 개념을 이해하기가 어렵지 않았습니다. 항구에 정박해 있는 배 위에 컨테이너가 실린 모습을 상상하면 되었어요. 그 컨테이너 안에, 필요한 모든 것들이 들어있는 것이지요. 각 컨테이너는 자체 파일 시스템, 네트워크 및 프로세스를 가지며, 호스트 시스템과 분리되어 독립적으로 작동합니다. 


컨테이너는 가상화 기술을 사용하기에 호스트 시스템으로부터 독립적인 환경을 제공할 수 있는데요. ChatGPT에 따르면, 컨테이너를 통하여 제공받을 수 있는 격리된, 독립된 환경은 “애플리케이션의 실행을 일관되고 안정적으로 유지하며, 다른 컨테이너나 호스트 시스템에 영향을 주지 않고 실행할 수 있도록 한다” 고 하네요. 컨테이너는 가볍고 빠르며 확장도 가능한 데다, 도커를 사용하여 쉽게 생성, 배포 및 관리할 수 있기 때문에 어떤 환경으로든 이식하기가 좋답니다. 또한 필요한 모든 것이 한 데 묶여 있으니, 개발과 운영 프로세스를 단순화하는 데 도움이 될 거예요.




[ ChatGPT, 도커 이미지에 대해 말하다 ]

ChatGPT의 설명을 통해서 쉽게 이해할 수 있어 좋았어요. 같은 이야기도 다른 표현으로 한 번 더 이야기해 주기도 한답니다.


그런데, ‘이미지(Image)’라는 개념은 좀 이해하기가 어려웠습니다. 자꾸만 우리가 일상적으로 사용하는 ‘이미지’라는 단어의 의미가 먼저 떠올랐기 때문인데요. 그래서 Chat GPT에 더 많은 내용을 물어보아야 할 것 같았어요. 염치 불고하고, ChatGPT에 직설적으로 물어보았습니다. “도커(Docker)에서 사용하는 용어인 '이미지'는 무슨 뜻인가요?”


도커(Docker)에서 사용하는 "이미지(Image)"는 컨테이너 실행에 필요한 모든 파일, 라이브러리, 환경 설정 및 애플리케이션 자체를 포함하는 정적인 패키지입니다. 이미지는 컨테이너의 기반이 되며, 컨테이너를 생성하고 실행하기 위해 사용됩니다.

이미지는 읽기 전용이며 변경할 수 없습니다. 이미지를 생성하거나 수정하려면 새로운 이미지를 만들어야 합니다. 이미지는 도커 이미지 레지스트리(도커 허브 등)에서 다운로드하거나 도커 파일(Dockerfile)을 사용하여 직접 작성할 수 있습니다.


그러니까, 패키지와 패키지. 패키지이고 패키지인 것입니다 @.@

 

그러니까, 컨테이너도 패키지이고, 이미지도 패키지인데요. 컨테이너는 애플리케이션과 애플리케이션을 위한 파일들을 묶은 것이라면, 이미지는 그 컨테이너를 실행시키기 위한 것들을 묶은 것입니다. 만약 여러 개의 컨테이너가 동일한 파일, 라이브러리, 환경 설정을 참고한다면, 이들을 동시에 실행하는 경우에, 같은 이미지를 공유하여 사용할 수도 있습니다.


도커 이미지는 여러 개의 레이어로 구성되어 있습니다. 각 레이어는 파일 시스템의 변경 사항을 의미하는데요. 마치 포토샵 프로그램에서 레이어를 추가해 이미지에 작업 사항을 추가하듯이, 도커에서의 이미지는 기존 이미지 위에 새로운 레이어를 추가하여 파일 시스템의 변경 사항을 담게 되는 것이지요. 이 과정을 거치다 보면 이미지의 재사용성과 효율성은 점차 높아지게 되겠지요.


ChatGPT에 따르면, 이미지는 도커에서 애플리케이션을 실행하기 위한 모든 설정과 파일, 라이브러리, 환경 설정 등을 포함하고 있기 때문에, 도커 이미지를 공유하면 다른 환경에서도 동일한 애플리케이션을 실행할 수 있게 된다고 합니다. 마치, 예전 PC에서 클라이언트를 설치할 때 ‘setup.exe’ 파일과 유사하게 생각하시면, 어렴풋이라도 이해가 가능하실 거예요.




[ ChatGPT, 도커 빌드와 도커 커밋은 어떤 작업인가요? ]


도커(docker)에 대한 기본적인 개념들을 알아보았습니다. AI는 물론 개발 작업에도 익숙하지 않으셨던 분들을 위해, ChatGPT의 도움을 받아 최대한 쉽게 풀어보고자 했어요. 여기까지 순조롭게 읽어 오셨다면, 이런 질문이 나올 법합니다. “그럼, 도커를 빌드(Build)한다는 건 어떤 작업이에요?”


질문하니 2분 넘게 답이 없었던 챗 씨. 그에게도 시간이 필요한 질문이 있군요!


도커 빌드는 도커 이미지를 생성하기 위한 과정을 말합니다. 도커 이미지를 생성하려면 빌드 명령을 사용하여 도커 파일(Dockerfile)을 실행해야 하는데요. 이 도커 파일은 이미지를 구성하는 데 필요한 모든 단계와 명령을 정의하는 텍스트 파일이라고 합니다. ChatGPT가 마침 ‘도커 파일’에 대해 추가로 설명해 주었네요.


도커 파일에는 기반 이미지, 애플리케이션 소스 코드 복사, 종속성 설치, 환경 변수 설정 등 이미지를 구성하기 위한 단계들이 포함될 수 있습니다. 도커 빌드 명령을 실행하면 도커 파일에 정의된 단계들이 순차적으로 실행되며, 최종적으로 새로운 도커 이미지가 생성됩니다. 빌드 과정에서는 도커 이미지의 캐시를 활용하여 중간 단계 결과물을 저장하고 재사용함으로써 빌드 속도를 향상할 수 있습니다.


즉, 도커 파일은 ‘도커 이미지’를 구성하기 위한 항목들을 만들 수 있는 일종의 설명서 또는 지시서와 같다고 생각할 수 있겠습니다. 그러니, 도커 파일이 있다면 변경 사항을 추적하고 문서화하여 이미지를 쉽게 재생산할 수 있게 됩니다. 도커 빌드 명령은 이 지시서를 따라 움직여 ‘도커 이미지’를 만들어 내는 것이고요.


이와 유사한 작업 중에는 ‘커밋(Commit)’도 있습니다. 작업 결과 도커 이미지가 나온다는 점 때문에 유사해 보이는데요. 들여다보면 엄연히 다른 개념이에요.


도커 커밋은 실행 중인 도커 컨테이너의 상태를 새로운 도커 이미지로 변환하는 작업입니다. 일반적으로 커밋은 이미 실행 중인 컨테이너에서 변경 사항을 만들고 이를 이미지로 저장하기 위해 사용한다고 합니다. 커밋 명령을 실행하면, 현재 컨테이너의 상태 및 파일 시스템 변경 사항이 새로운 이미지로 캡처됩니다. 이렇게 생성된 이미지는 도커 허브나 로컬 레지스트리에 저장되거나 다른 시스템에서 사용할 수 있습니다. 마치 버전 별로 백업해 두는 행위처럼 이해되기도 하네요.


만약, 어떤 개발자가 “이번에 도커 커밋하려고요.”라는 말을 했다면, 실행 중인 도커 컨테이너와 애플리케이션에 관계된 것이고, 중요한 작업을 앞두고 있어 컨테이너와 파일 시스템 변경 사항을 백업하듯이 이미지로 캡처하려는 것 아닐까, 하고 맥락을 유추할 수 있게 되겠지요?


ChatGPT는 “커밋은 일시적인 변경이나 실험적인 목적으로 사용되기도 하지만, 보통은 도커 파일을 작성하고 이미지를 생성하는 도구로서의 도커 빌드를 선호”한다고 전하고 있습니다. 또한 주의해야 할 점도 함께 알려주었어요.


주의해야 할 점은 커밋을 통해 생성된 이미지는 컨테이너의 상태를 그대로 반영하므로, 커밋 시점에서의 상태와 종속성만을 포함한다는 점입니다. 따라서 빌드 프로세스를 통해 구성된 이미지를 사용하는 것이 일반적으로 더 권장되는 방법입니다.





ChatGPT의 도움을 받아 알아보니, ‘도커’의 개념이 좀 더 명확하게 이해되었어요. 알게 된 내용을 어떻게 하면 더 쉽게 혹은 재미있게 전달할 수 있을지에 집중하여 고민할 수 있어서, 에디터로서의 부담을 잠시 덜 수 있었답니다. 지금까지는 ChatGPT가 어떤 식으로 동작하는지 살펴보거나, 재미로 활용하는 경우를 더 많이 보아 왔었는데요. 챗GPT의 도움을 받아 보니, 이래서 사람들이 많은 기대를 걸고 있구나, 체감할 수 있었던 시간이었습니다. 지금은 모르는 게 있으면 구글, 유튜브를 검색하던 것이 일반적이지만, 챗GPT에 물어보는 것이 당연해지는 세상이 곧 올 것이라는 생각이 드네요. :)

작가의 이전글 EU가 인공지능 규제 법안을 냈다고요?
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari