Docker

[Docker] 도커란?

진철 2024. 5. 14. 17:29
728x90
반응형
들어가며

필자가 운영 체제 수업을 들을 때의 일이다.

당시에 리눅스를 사용하여 간단한 기능을 운영 체제(기억은 안나지만 MIT에서 만든 거였음)에 추가하는 과제가 있어서, 리눅스를 설치해야했었다.

윈도우 환경에서 Virtual Box를 사용하여 리눅스를 설치했었는데, 상당히 오래걸린 기억이 난다.

(다른 OS를 사용할 수 있다니하며 정말 신기해 했지만 지금 생각해보면 참 귀엽군 ㅋ)

아무튼, 가상 환경을 사용해서 다른 운영 체제를 사용할 수 있는데, 이는 해당 운영 체제를 그대로 가져와야하기 때문에 프로그램이 매우 무거워진다는 단점이 있다.

따라서, 이를 보완하기 위해서 만들어진 것이 컨테이너이다.

컨테이너가 가벼운 이유

둘은 모두 가상화 기술을 사용하여 여러 애플리케이션을 호스팅하고 관리할 수 있도록 도와주는 기술이다.

하지만 유독 컨테이너가 가벼울 수 있는 이유는 무엇일까?

우선 둘의 차이를 사진으로 알아보자

https://geekflare.com/docker-vs-virtual-machine/

왼쪽의 경우는 VM이 작동하는 상황이고 오른쪽은 컨테이너가 작동하는 상황이다.

VM의 경우에는 각각의 OS가 필요한 반면, 컨테이너의 경우에는 그렇지 않다.

또 가장 크게 차이가 나는 것이 VM은 Hypervisor를 사용하는 반면, 컨테이너는 Docker Engine(Container Engine)을 사용한다는 점이다.

Hypervisor는 전체 운영 체제를 가상화하여 여러 가상 머신을 호스팅하고 격리하지만, Docker Engine은 운영 체제의 리소스를 공유하여 여러 컨테이너를 실행하고 격리하는 데 사용된다는 차이가 있다.

따라서, VM보다 가볍고 이식성이 높으며, 클라우드 네이티브 환경에서 널리 사용된다.

조금 짧고 간단하게 설명한 감이 없지 않아 있지만, 사진에서 보는 것처럼 VM에서는 각각의 OS가 따로 필요하기 무거운 이유도 존재한다.

 

정리해보자면, 기존의 가상 환경을 통해 여러 어플케이션을 작동하던 VM 방식은 무겁다는 단점이 존재한다. 따라서, 이를 해소하기 위해서 컨테이너라는 새로운 기술이 등장한 것이다.

도커에 대해 알아보자

코드만 있다고 해서 어플리케이션이 작동하지는 않는다.

분명, 해당 코드를 작동하기 위한 프레임워크도 존재할 것이고 환경 변수나 라이브러리 등이 존재할 것이다.

어플리케이션을 작동하기 위한 모든 요소들을 추상화한 것을 컨테이너라고 하는데, 이러한 컨테이너를 구동시키는 엔진을 컨테이너 엔진이라고 한다.

그리고 그 컨테이너 엔진 중에서도 가장 유명하고 많이 사용되는 도구가 바로 도커이다.

 

도커를 생성하는 과정은 크게 세 가지가 있다.

1. DockerFile 생성 : 이는 일종의 레시피와 같다고 보면 된다. 앞서 어플리케이션을 작동하는 데 필요한 모든 요소들을 설정한다.

2. Image 생성 : DockerFile을 바탕으로 생성(build)된 파일이다. 한 마디로 실행되고 있는 어플리케이션의 상태를 사진 찍듯이 스냅샷으로 남긴 것이다. 수정이나 변경이 불가능한 것이 특징이며, 객체 지향 프로그래밍 관점으로 보면 Class라고 보면 된다.

3. Container 생성 : 샌드박스처럼 생성한 Image를 고립적인 실행 환경에서 실행할 수 있는 것이다. Docker와 같은 Container Engine로부터 생성된다. 객체 지향 프로그래밍 관점으로 보면 Instance라고 할 수 있다.

 

그러면 어떻게 컨테이너를 배포할 수 있을까?

이 역시도 간단하다.

먼저, 내가 만든 Image를 원격 저장소(git or Docker hub)에 push하고, 필요한 환경에서 이를 pull을 한다.

그리고 이를 그대로 Docker를 통해서 실행하면 끝이다.

참고로 스프링 부트의 경우, 컨테이너를 실행시키면 8080포트를 사용한다.

허나, Web에서 8080으로 접속이 안되는 것을 확인할 수가 있는데, 이는 컨테이너 내부에서 8080포트를 사용하는 것이기 때문에 컨테이너 밖과 컨테이너 안을 매핑해야 연결시켜야 한다.

728x90
반응형