[Docker] Part1. Docker 개요

Minyoung kim·2024년 11월 25일
0

devops

목록 보기
1/6

도커 이전의 환경?

  • 예를 들어 web server, database, messaging system, orchestration 등의 여러 컴포넌트들을 사용하여 서비스를 구축해야 할 때, 이 모든 컴포넌트들은 사용하려는 기반 운영 체제의 버전과 호환이 되어야 하는데, 종종 운영체제와 호환되지 않는 컴포넌트들을 추가하게 된다면 다시 돌아가 적절한 운영체제를 찾아 변경해주고, 그에 따라 이미 존재하는 컴포넌트들도 수정해주는 작업이 필요했다.
  • 프로젝트에 새로운 개발자가 추가되면, 현재 프로젝트의 운영체제, 컴포넌트의 버전 등등 모든 호환성을 똑같이 구현하고 갖추는 작업을 일일히 해야하는 과정이 필요했다. setup time이 굉장히 오래 걸리다는 문제가 존재해왔다.
  • 개발자들 간에 작업 하는 운영체제와 사용하는 기술의 버전 등이 다르면, 이것들을 모두 합쳤을 때 예상하는 대로 동작할 것이라는 보장이 없었다.

따라서 이러한 의존성 문제를 해결하고, 특정 컴포넌트를 변경하더라도 다른 컴포넌트에는 영향을 주지 않으면서도 운영체제와는 호환이 가능하도록 하는 무언가가 필요했다.

그때 등장한 것이 DOCKER!!

Docker 컨테이너란?

docker 컨테이너란 완전히 분리된 환경으로서 각각의 운영체제, 프로세스, 서비스, 네트워크 인터페이스를 가지고 각각의 다른 가상머신처럼 동작하지만 모두 같은 하나의 kernel에서 동작하는 환경을 말한다.
즉, 도커가 설치된 하나의 인스턴스가 있다고 할 때, 이 인스턴스에 설치된 호스트 운영체제가 있고, 이 운영체제의 하나의 커널 위에서 여러 컨테이너가 동작하게 된다.
(자세한 설명은 아래를 참고)

운영체제 개념 짚고 넘어가기

모든 운영체제는 커널과 소프트웨어로 구성된다.

ubuntu,fedora, suse, centOs와 같은 모든 운영체제는 모두 같은 Linux 커널을 기반으로 하지만, 일부 다른 커스텀 sw로 인해 서로 다른 운영체제가 된다.

즉, 이 개념을 빌려서 도커 컨테이너를 다시 한번 설명하자면, 각각의 도커 컨테이너는 모두 하나의 같은 kernel에서 동착하고, 이 컨테이너들은 각각의 다른 os를 가질 수 있음. 모든 운영체제는 같은 linux 커널을 기반으로 하고, 일부 다른 커스텀 sw를 가지고 있는 것이므로, 각각의 컨테이너가 서로 다른 운영체제를 가지고 있다고 하더라도, 그 운영체제는 하나의 같은 host 운영체제의 linux kernel위에서 동작할 수 있으므로 여러개의 도커 컨테이너가 실행 가능하게 된다.
즉, 도커 컨테이너는 모든 운영체제와 호환되는 도커 호스트의 기반 커널을 활용한다.

** 그러나 이러한 같은 linux 기반의 커널을 사용하지 않는 운영체제에는 windows가 있다.
즉, linux가 설치된 도커 호스트에서는 windows 기반 컨테이너를 실행할 수 없게 되므로 별도의 조치가 필요하다.

Container VS Virtual Machines

컨테이너

하나의 기반 하드웨어가 있고, os가 존재하고, docker가 존재하고, 그 위에 각각의 의존성과 라이브러리를 포함한 컨테이너가 존재한다.

가상머신

하나의 기반 하드웨어가 있고, 그 위에 하이퍼바이저가 존재하며, 그 위에 가상머신이 존재한다. 컨테이너와의 차이점은 컨테이너는 같은 os위에서 동작하지만(하나의 같은 os 커널), vm의 경우, 하드웨어 위에 존재하는 각각의 vm마다 서로 다른 os(서로 다른 여러개의 커널)를 가지고 동작한다.

차이점 비교

  1. 가상 머신은 매우 무겁고 용량을 많이 차지하고, 그 용량이 GB에 달하는 반면
    컨테이너는 MB에 달하는 매우 가볍고 적응 용량을 차지한다.
    또한 가상 머신은 운영 체제 전체를 부트해야하기 때문에 시작 시간이 많이 걸리는 반면, 도커 컨테이너를 부트하는데는 몇초밖에 걸리지 않는다.

  2. 그러나 한가지 중요한 점은, docker는 완전히 분리되지 못하는데, 이는 컨테이너 간 공유하는 커널과 같은 리소스가 많기 때문이다. 반면 가상 머신은 기반 운영 체제가 커널에 의존하지 않고 완전히 독립적으로 동작할 수 있다.

두가지 중 하나를 무조건적으로 사용해야 한다는 개념이 아니라, 각각의 이점을 필요에 따라 사용해야 한다.

How is docker working?

간단히 설명하자면, 이미지를 만들어 이름을 붙혀 docker hub에 저장하고, 도커 hub에 저장된 이미지를 다운로드 받아 run하여 실행할 수 있다. 많은 기업에서는 자사의 제품을 도커 hub에 올려놓는다.

이미지는 컨테이너를 만드는데 사용되며, 컨테이너는 그런 이미지 인스턴스가 실행되는 공간으로 각각의 환경과 프로세를 지니고 있다.

devops에 미친 영향?

  • 예전에는 개발팀이 개발을 마무리하면, 운영팀에 전달해 배포한 뒤 제작된 환경에서 관리했으며, 개발팀에서 호스트 설정과 필요 설치 사항, 의존성 구성 등을 넘겨줬음. 운영팀은 직접 개발을 한 것이 아니기 때문에, 환경을 구성하고 설정하고 또 오류가 발생했을 때 이것을 수정하고 고치는데 매우 애를 먹었음.

  • 그러나 docker 덕분에 예전에는 지침으로 넘겨줬던 사정을 docker 파일에 담아서 이미지를 생성할 수 있게 되었고, docker가 설치된 환경이라면 이 이미즈를 다운로드 받아 실행할 수 있었다. 따라서 운영팀에서 제작 환경과 동일한 환경을 구축할 필요도 없게 되었고, 구축 단계에서 이미지는 이미 완성이 되어 운영팀에서 이를 수정할 필요가 없어졌으므로, 제작 환경과 동일한 동작을 배포 환경에서도 보장할 수 있게 되었다.

0개의 댓글