docker와 docker-compose에 대해 간단히 알아보자

이상민·2024년 11월 18일

TIL

목록 보기
46/50

docker란?

docker란 Go언어로 작성된 리눅스 컨테이너 기반으로하는 오픈소스 가상화 플랫폼이다.

가상화를 사용하는 이유?

이제는 향상된 컴퓨터의 성능을 더욱 효율적으로 사용하기 위해 가상화 기술이 많이 등장하였다.

서버 관리자 입장에서 CPU사용률이 10% 밖에 되지 않는 활용도가 낮은 서버들의 리소스 낭비일 수밖에 없다. 또 그렇다고 모든 서비스를 한 서버안에 올린다면 안정성에 문제가 생길수도 있다. 그래서 생겨난 것이 바로 안정성을 높이며 리소스도 최대한 활용할 수 있는 방법으로 나타난게 서버 가상화이다. 가상화 플랫폼으로는 대표적으로 VM이 있다.

컨테이너란?

컨테이너는 가상화 기술 중 하나로 대표적으로 LXC(Linux Container)가 있다. 기존 OS를 가상화 시키던 것과 달리 컨테이너는 OS레벨의 가상화로 프로세스를 격리시켜 동작하는 방식으로 이루어지고 있다..

VM 가상화 플랫폼 vs Docker 가상화 플랫폼

그럼 VM 가상화 플랫폼을 이용하면 될거같은데 굳이 Docker 라는게 생겨난 이유는 뭐일까 ? 일단 VM같은 경우엔 Host OS 위에 가상화를 시키기 위한 Hypervisor 엔진 그리고 그 위에 Guest OS를 올려 사용한다. 이는 가상화된 하드웨어 위에 OS가 올라가는 형태로 거의 완벽하게 Host와 분리된다고 봐도 무방하다.
반면에 컨테이너 기반 가상화는 Docker는 엔진 위에 Application 실행에 필요한 바이너리만 올라가게 된다. OS 가상화를 보면 Host OS와 완전히 분리되는 장점은 있지만 OS위에 OS를 올리기 때문에 무겁고 느릴수 밖에 없다. 하지만 docker 와 같은 컨테이너 기반 가상화는 Host OS 그리고 Docker 엔진 위에서 바로 동작하며 Host의 커널을 공유하게 된다.
커널을 공유하게 되면 io처리가 쉽게 되어 성능의 효율을 높일 수 있다는 장점이 있다.

즉 , 컨테이너를 사용하는 것은 가상 머신을 생성하는 것이 아니라 Host OS가 사용하는 자원을 분리하여 여러 환경을 만들 수 있도록 하는 것.

이렇게 쓰고보니 컨테이너기반이 OS가상화보다 뛰어나다라고 말하는 것 같지만 그렇지는 않다.
OS가상화는 컨테이너기반 가상화보다 더 높은 격리 레벨을 지원하기 때문에 보안적인 측면에서 더욱 유리하다. 또한 OS가상화의 커널을 공유하지 않는 장점 또한 있다. 커널을 공유하지 않는 만큼 멀티 OS가 가능하다는 것. 커널을 공유하지 않아 멀티 OS가 불가능 하다는 것은 Linux위에 Window를 올릴 수 없다는 단점이 있다.

그럼에도 Docker를 쓰는 이유는 성능향상, 뛰어난 이식성, 쉽게 Scale Out(서버 분산)을 할 수 있는 유연성때문이라고 할 수 있다.

Docker Image

Docker Image는 컨테이너를 실행할 수 있는 실행파일, 설정 값 들을 가지고 있는 것이라고 생각 하면 된다.
위에 그림과 같이 Image를 컨테이너에 담고 실행을 시킨다면 해당 프로세스가 동작하게 되는 것.

docker-compose 란?

docker-compose는 여러개의 docker 컨테이너로 이루어진 서비스를 구축및 실행하는 순서를 자동으로 하여 관리를 간단하게 해주는 기능으로,
docker-compose.yml같은 compose파일을 준비하고 커맨드를 한번 실행하는것으로 파일에 정의한 설정들을 사용해 모든 컨테이너 서비스를 시작, 정지, 삭제 할 수 있다.
만약 docker-compose를 사용하지않는다면 아래 처럼 불편한 과정을 거쳐야 한다.

  • 네트워크 만들기
    • docker network create [network]
  • 각 컨테이너를 네트워크에 연결
    • docker run -d --name [container] --network [network][이미지]
      을 해주어야 한다.

따라서 docker-compose는 여러 개의 컨테이너의 욥션과 환경을 정의한 파일을 읽어 컨테이너를 순차적으로 생성하는 방식으로 동작한다. 도커 컴포즈의 설정 파일은 도커 엔진의 run 명령어의 옵션을 그대로 사용할 수 있으며, 각 컨테이너의 의존성, 네트워크, 볼륨 등을 함께 정의 할 수 있다. 또한 스웜모드의 서비스와 유사하게 설정 파일에 정의된 서비스의 컨테이너 수를 유동적으로 조정할 수 있으며, 컨테이너의 서비스 디스커버리도 자동으로 이루어진다. 이처럼 컨테이너의 수가 많아지고 정의해야 할 옵션이 많아진다면 도커 컴포즈를 사용하는 것이 바람직하다.

0개의 댓글