devops/docker

[Docker] Docker란??

규턴이 2022. 9. 5. 09:58

Docker가 뭔데?

docker

 

도커란 리눅스 컨테이너 기반으로 만들어진, 오픈소스 가상화 플랫폼이다.

참고로 Go언어로 작성되었음

 

컨테이너?? 가상머신??

 

가상머신(Virtual Machine)

가상머신란 다음 사진과 같이 하나의 HOST에서 여러개의 OS를 생성하는 방식이다.

각 할당받은 OS를 GuestOS라고 하며, 서로 완전히 독립된 공간을 할당받는다.

 

독립된 공간을 할당받는것은 좋지만, 각각의 GuestOS를 위한 library, Kernel등 OS에 필요한 파일들을 각각 가지고 있어야 하기에 크기가 무겁다고 할 수 있다

 

 

 

VM(Virtual Machine)의 한 예시이다.

리눅스를 구해오고싶었는데 잘안나옴...

다음과 같이 하나의 컴퓨터에서 Window를 여러개 띄운것을 확인할 수 있다.

 

컨테이너(Container)

container

다음 사진과 같이 컨테이너화된 어플리케이션은 Host OS 자원을 공유한다.

즉 어플리케이션에 필요한 최소단위만 격리해서 사용하고 공유해서 사용할 수 있는것들을 공유한다.

 

 

*참고

가상머신이나 컨테이너도 어찌됐건 격리된 환경에서 실행된다는게 중요함.

그렇기에 IP나 포트도 다르게 사용가능하다. -> 다른 컴퓨터에서 실행되는것 처럼 운영됨

 

그럼 도커가 왜 필요하지?

 

솔직히 공부하면서 도커가 왜 필요한지 처음에 이해되지 않았다.

 

하나의 예시로

배포를 위한 cloud에는 jdk 8이 설치되어 있고 kafka, zookeeper 등이 jdk 8로 실행되고 있다고 해보자

 

나는 java 기반의 Spring 어플리케이션을 jdk11로 작성했는데

cloud에 깔려있는 jdk는 8이다.

 

내가 따로 jdk11을 경로 설정 해주는게 아니라면, 에러가 날수도 있다.

이럴때 각각의 applcation마다 해당 application에 맞는 jdk를 도커내에서 설정하여 격리된 리소스를 이용하면 된다.

 

또한 다른 예시로 이미 개발된 어플리케이션을 내 컴퓨터에서 실행시킬려고 한다.

개발된 어플리케이션과 같은 OS를 사용한다하더라도 버전에 따라, 또한 이전 설정에 따라 경로같은게 다를 수 있다.

그럼 에러가 발생한다.

 

이러한 예시들을 도커를 통해 리소스를 격리시켜 격리된 환경에서 어플리케이션을 운영할 수 있기에 사용한다고 생각함.

 

이 예시가 적절한지는 잘모르겠다.