docker

[docker] 도커란?

수수한개발자 2022. 7. 21.
728x90

컨테이너란?

컨테이너는 소프트웨어 서비스를 실행하는 데 필요한 특정 버전의 프로그래밍 언어 런타임 및 라이브러리와 같은 종속 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지입니다.

컨테이너는 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해주며 컨테이너가 실제로 실행되는 환경에서 애플리케이션을 추상화할 수 있는 논리 패키징 메커니즘을 제공합니다.

 

보통 이라면 컨테이너라고 하면 이러한 컨테이너 박스를 생각 하실것입니다 IT 의 컨테이너 기술은 말그대로 아래와 같은 의미를 가지고 있으며 구동되는 형태도 이와 유사 합니다.

 

[docker] 도커란? - 컨테이너란?

 

그리고 이러한 컨테이너는 아래와 같이 아주 큰 화물선에 실려서 이동되게 됩니다. 이처럼 컨테이너란 기술은 OS 위에 다수의 여러 애플리케이션 자원을 공유 하면서 구동 되는 환경을 제공하는 기술 입니다. 마치 화물선을 OS 로 , 화물선 위의 컨테이너 박스를 애플리케이션 컨테이너 로 보면  것 같습니다.

 

[docker] 도커란? - 컨테이너란?

 

컨테이너는 애플리케이션을 실제 구동 환경으로부터 추상화할 수 있는 논리 패키징 메커니즘을 제공합니다. 이러한 분리를 통해 위의 이미지에서 컨테이너 박스를 내려서 다른 화물선에 그대로 옴겨 실을 수 있는 거서처럼 사설 데이터 센터나 퍼블릭 클라우드, 심지어 개발자의 개인 노트북 컴퓨터에 이르기까지 어떤 환경으로든 컨테이너 기반 애플리케이션을 쉽게 지속적으로 배포할 수 있습니다. 

또한 컨테이너 화물 마다 안에 들은 물품이 각기 다르고 생산 또는 화물선주가 다른 것처럼 컨테이너는 각각 별개 이며 통해 업무 영역을 깔끔하게 분리할 수 있습니다.(격리) 즉, 개발자는 애플리케이션의 로직과 종속 항목에 집중하고, IT 운영팀은 특정 소프트웨어 버전, 개별 앱 구성과 관련한 세부 업무에 시간을 낭비하지 않고 배포 및 관리에 집중할 수 있습니다.

 

도커란 무엇인가 (아직모름)

 

도커는 컨테이너 기술을 기반으로 한 일종의 가상화 플랫폼입니다. 가상화란 물리적 자원인 하드웨어를 효율적으로 활용하기 위해서 하드웨어 공간 위에 가상의 머신을 만드는 기술이고, 컨테이너란 컨테이너가 실행되고 있는 호스트 os의 기능을 그대로 사용하면서 프로세스를 격리해 독립된 환경을 만드는 기술을 뜻합니다.

다시 말하자면, 도커는 독립된 환경을 만들어서 하드웨어를 효율적으로 활용하는 기술이라고 할 수 있을것 같습니다!

 

도커의 역사

도커(Docker) 는 2013년 3월 Santa Clara 에서 열린 Pycon 에서 Solomon Hykes 이 발표한 The future of Linux Containers 세션을 통해 세상에 알려지게 되었습니다.

 

 

영상에서 환영하는 이유는 별도의 가상화 등을 이용하지 않고 아주 쉽고 빠르게 별도의 운영체제(컨테이너) 에서 Hello World 를 출력 하였기 때문입니다.

 

위에서 언급한 것과 같이 컨테이너 기술은 도커가 발표 되기 이전에도 컨셉과 기능이 리눅스에서 구현 과 사용된 기술이었습니다. 다만 설정과 사용이 복잡하거나 사용 편의성 그리고 접근성이 용의하지 않아서 많은 사용을 하지 않았던 것이지요 단 Docker 가 발표된 이후 아주 손쉽게 컨테이너를 사용,관리, 배포 할 수 있게 되고 또한 Docker Hub 사이트를 통해 좋고 유용한 아주 다양한 도커 컨테이너 이미지가 배포되고 공유 되다보니 더욱더 도커 사용이 늘어 날수 밖에 없는 생태계가 구성되게 됩니다.

 

가상화와 컨테이너

앞서 가상화는 하나의 하드웨어를 여러 개의 가상 머신으로 분할해 효율적으로 사용할 수 있는 기술이라고 언급했는데요, 분할된 가상 머신들은 각각 독립적인 환경으로 구동됩니다. 이 때 베이스가 되는 기존의 환경을 Host OS, 그리고 가상 머신으로 분할된 각각의 환경을 Guest OS라고 부릅니다.

 

[docker] 도커란? - 도커란 무엇인가 (아직모름) - 가상화와 컨테이너

가상 머신을 생성하기 위해서는 하이퍼바이저 또는 가상 머신 모니터라고 불리는 소프트웨어를 이용합니다. 하이퍼바이저는 호스트 하드웨어에 설치되어 호스트와 게스트를 나누는 역할을 하고, 각각의 게스트는 하이퍼바이저에 의해 관리되며 시스템 자원을 할당받게 됩니다.이 때 하이퍼바이저에 의해 생성된 게스트는 호스트나 다른 게스트와 상호 간섭하지 않고 완전히 분리된 환경에서 구동됩니다. 하이퍼바이저를 활용하면 마치 하드웨어가 여러 개인 것처럼 하나의 서버를 여러 명이 나눠 쓸 수도 있고, 컴퓨터 한 대에서 서로 다른 OS를 동시에 사용할 수도 있습니다.

 

하지만 가상 머신으로 무언가 하려면 반드시 하이퍼바이저를 거쳐야 하기 때문에 속도 저하가 필연적입니다. 또 가상 머신은 해당 환경을 구동하는 데 필요한 파일을 모두 포함하고 있기 때문에, 가상 머신을 배포할 때 만들어지는 이미지의 크기가 매우 커진다는 한계점이 있습니다.

 

하이퍼바이저와 달리 컨테이너는 가상의 OS를 만드는 것은 아닙니다. 컨테이너는 베이스 환경의 OS를 공유하면서 필요한 프로세스만 격리하는 방식으로, 커널을 공유하기 때문에 호스트 OS의 기능을 모두 사용할 수 있습니다. 그렇기 때문에 컨테이너 위에서는 호스트 OS와 다른 OS를 구동할 수 없습니다. 대신 격리시킬 애플리케이션과 거기에 필요한 파일이나 특정 라이브러리 등 종속 항목만 포함하기 때문에 배포를 위해 생성되는 이미지의 용량이 작아진다는 장점이 있습니다. 운영체제가 아닌 프로세스이며, 하이퍼바이저를 거칠 필요가 없어 실행 속도가 빠르기도 하고요.

 

도커 이미지

[docker] 도커란? - 도커란 무엇인가 (아직모름) - 도커 이미지

 

도커를 사용하기 위해서는 도커이미지를 꼭 알아두어야 합니다.
도커 이미지는 컨테이너를 만드는데 필요한 파일과 설정값들을 포함하고 있는 녀석이고, 이 설정값은 변하지 않습니다.
그렇기 때문에 언제든지 이 이미지를 이용한다면 동일한 컨테이너를 만들 수 있는 것이죠.

만약 컨테이너 안에서 변경된 내용이 이미지에 영향을 주게 된다면 우리는 항상 동일한 값을 가진 컨테이너를 만들 수 없게 되겠죠.

그렇다면 내가 필요한 파일들을 추가하고, 설정을 변경하고 싶다면 어떻게 해야할까요??

우선 기존에 있던 이미지를 실행시키고, 만들어진 컨테이너 안에서 추가하거나, 삭제하고 이 변경된 내용을 새로운 이미지로 만들어내면 됩니다.

한마디로 이미지의 설정을 변경하고 싶다면 새로운 이미지를 만들어내야 된다는 말이죠.

이렇게 만들어진 이미지들은 도커 허브에 올려두고 언제든지 사용할 수 있습니다.
마치 깃허브에 내 코드들을 올리고, 내리는 것 처럼 말이죠.

[docker] 도커란? - 도커란 무엇인가 (아직모름) - 도커 이미지
도커 이미지

 

도커란 무엇인가 (이제 쫌 알것같음)

 

이제 가상화와 컨테이너가 무엇인지 알게 되었으니 다시 도커로 돌아가 볼까요?

도커는 컨테이너 기반의 가상화 플랫폼입니다. 부두에서 컨테이너를 옮기고 관리하는 직업인 docker에서 따 온 이름에 걸맞게 컨테이너를 잘 다룰 수 있게 도와 주는 도구라고 할 수 있지요. 도커를 이용하면 이미지를 실행시켜 컨테이너로 만들거나, 생성된 컨테이너를 관리하거나, 컨테이너를 다시 이미지로 만드는 작업을 쉽게 할 수 있습니다.

도커는 아주 강력한 도구입니다. 개발 과정에서 다른 라이브러리와 충돌하는 것을 방지하기 위해 격리된 환경이 필요할 때, 완성된 서비스를 배포할 때, 혹은 배포 중인 서비스를 받아서 실행해 볼 때도 유용하지요. 특히 배포 과정에서 도커를 사용해 필요한 파일들만 예쁘게 포장해서 이미지로 만들면 지긋지긋한 종속성 이슈에서 벗어날 수 있습니다. 서버 한 대에만 배포한다면 종속성은 큰 문제가 되지 않겠지만, 서버가 2대, 4대, 8대... 수백, 수천 대까지 늘어난다면 어떨까요? 파일 받고, 필요한 라이브러리 설치하고, 앗! 이거 먼저 설치해야 하는데 까먹고 안하면 머리깨집니다... 도커를 사용하면 그냥 같은 이미지를 실행해서 컨테이너로 만들면 됩니다. 

728x90