Docker

[Docker] Container, Image, Docker개념을 쉽게 이해하기

Yeji Heo 2024. 4. 29. 17:53

1. Container

항만의 화물을 옮길 때 사용하는 컨테이너를 떠올려보자. 만약 컨테이너가 없었다면?

사과는 사과 상자에, 쌀은 쌀포대에 담아 옮기곤 했을 것이다.

화물 종류에 따라 각기 다르게 담기도 어렵고, 옮기기도 어렵다.

 

그러나 사실 항만 근로자들은 사과든 쌀이든 어딘가에 담아 한국에서 유럽으로 옮기기만 하면 된다.

그러므로 옮기는 방법을 표준화하면 그 안에는 어떤 화물이 들어가든 동일한 방법으로 관리할 수 있다.

컨테이너라는 가로, 세로, 높이를 표준화한 박스에 어떤 화물이든 담아 옮겨주면 이동 및 관리가 아주 편해지는 것이다.

 

마찬가지로 집에 있는 데스크탑에서 나름의 개발환경(O/S, WAS 등..)을 구축하여 어떤 앱을 개발했는데, 

학교에서 노트북으로 마저 개발을 하고싶다거나, 실행을 해보고 싶다면?

노트북에 똑같이 O/S 설치하고 WAS설치하고 빌드 파일 가져와서 올릴 건가? 너무 귀찮다. 

 

예를 들어 Linux라는 O/S위에 JRE를 구축한 후 Tomcat이라는 WAS를 올려 앱을 구동한다고 해보자.

이러한 일련의 환경 자체를 컨테이너라는 박스에 담아 전달해준다면, 내 노트북으로 가져온 다음 꺼내어 앱을 얹고 실행만 시키면 된다. 이게 Docker가 관리하게 될 Container의 역할&필요성이다. 

 


 

2. Image

내가 사용할 개발 및 실행 환경을(실행 환경이 주력) 통째로 Container에 담아서 준비시켰다고 하자.

나는 [ Linux라는 O/S위에 JRE를 구축한 후 Tomcat이라는 WAS]를 올린 개발환경을 사용했다고 했는데,

이와 똑같은 환경을 구축하고 싶은 다른 누군가가 있을 수 있다. 

혹은 내가 다음에도 이 환경을 그대로 다른 어딘가에 구축해서 쓰고 싶을 수 있다. 

어떤 환경이 담길 Container를 CD 굽듯이 찍어내서, Docker hub라는 곳에 저장해놓고 필요할 때마다 갖다쓰자

이렇게 저장해두게 되는 '어떠 개발&실행 환경의 템플릿'이 Image다. 얘는 말 그대로 Container가 아니고 Container생성을 위한 템플릿이므로 실행 등 작업은 당연히 되지 않는다. 이 Image를 통해 Create한 결과물이 Container이며, Create은 Docker가 한다.


 

3. Docker

앞서 언급했듯이, Image를 통해 Container를 Create하거나, Start시키고 Remove하는 등

Container를 관리하는 것이 Docker이다. 

클라우드 등에 내가 진짜 실행 및 배포를 할 Linux운영체제의 서버가 있다고 해보자.(Host Linux)

이 위에 Container를 올려 실행 환경을 구축하고, App을 올려 실행할텐데 

그 때 Container를 Host Linux에서는 Docker라는 컨테이너 엔진을 활용해서

컨테이너를 생성, 실행, 삭제하는 등 라이프사이클을 관리하게 되는 것이다.

 


 

다음 글에서부터는 나의 클라우드 서버에 접속한 후 

Docker로 Docker Hub에서 Image를 가져와 Container을 생성하고 실행시켜 보는 등 활용을 해보겠다!