도커(Docker) 란 무엇인가? + docker-compose

도커(Docker) 란 무엇인가? + docker-compose

안녕하세요. 달소입니다.

사실 약 1년전쯤에 도커에 관해서 글을 작성했었는데 그때는 회원으로 저만 활동할시기라 ㅎㅎ 많이들 안보시고 그냥 지나치셨을거라 생각합니다.

@초보나스 님께서 질문해주신 건도있으니 이전에 썼던 글 보다는 좀더 상세히 작성되도록 노력해보겠습니다.

선 요약 결론

도커는 기존에 설치된 OS(윈도우,Linux,헤놀로지,시놀로지)등에 구애받지않고 새로운 서비스를 올리기에 가장 좋은 방법입니다.
도커라는 플랫폼만 설치되어 있다면 이미 생성된 이미지를 통해 각 상황에 맞춘 커스텀 컨테이너를 완벽히 생성할 수 있으며 각 컨테이너들끼리의 통신만 필요한 경우 격리된 네트워크 환경을 만들기에도 용이합니다.

간단하게 도커에 대한 이해만 하신다면 이미 만들어진 많은 이미지를 통해서 웬만한 서비스들은 다 이용하실 수 있을거라 생각합니다.
*wordpress,nextcloud, nginx, web, wireguard, 각종vpn 서비스 등등

심화과정으로는 쿠버네티스, 도커스웜등이 있는데 이 부분은 제 지식이 모자라기때문에 ㅎㅎ 추후에 작성해보겠습니다.

도커란 ?

도커를 이해하시려면 이전에 나온 가상화의 개념부터 이해하시는편이 좋을거라고 생각합니다.
기존의 가상화란 제한된 하드웨어 환경에서 여러가지 OS 및 서비스를 구축하기 위해 하이퍼 바이저 위에 각각의 OS를 따로 구축해서 사용했었습니다.

이렇게 가상머신 위에 사용하다보니 자연스레 각각의 Virtual Machine마다 OS를 설치해 주어야했고 OS가 사용하는 리소스가 따로 소모되기 때문에 낭비되는 자원이 상당히 많았으며 OS버전의 EOS(End Of Service)가 만료될 경우 신규 OS를 설치하고 거기에 다시 App을 설치하려면 꽤나 복잡하고 호환성도 테스트 해야되는 많은 번거로움이 있었습니다.

그래서 2013년 출시된 도커는 다른방향으로 구현이 됐습니다

여러개의 Guest OS에서 각각의 App을 띄우는게 아닌 하나의 종속된 OS에서 Docker 위에 각각의 컨테이너에 App을 하나씩 띄우게 되면서 OS 커널을 다른 컨테이너와 공유 할 수 있으며, 각 컨테이너는 사용자 공간에서 격리 된 프로세스로 실행됩니다. 컨테이너는 VM보다 적은 공간을 차지하고 적은 리소스를 사용하기 때문에 효율이 더 좋아졌습니다.

이미지&컨테이너

기본적으로 도커에서 이미지&컨테이너는 도커를 효율적으로 사용하게끔 도와주는 기능입니다.

이미지

먼저 이미지는 OS image와 같다고 보시면됩니다.
Windows OS를 설치할때 ISO파일을 보셨듯 ISO로 설치되는 윈도우에는 기본적으로 윈도우에 필요한 모든것들이 설치되어있습니다.
마찬가지로 도커에서 사용되는 각각의 이미지들에는 이미지이름에 맞춰필요한것들이 기본적으로 설치되어있으며 추가적으로 필요한경우 직접 이미지에 필요한 툴을 추가설치해서 새로운 이미지를 만들수도있습니다.

예를들어 hub.docker.com에 있는 ubuntu 이미지를 예를 들어 설명드리겠습니다.

위 도커 이미지를 사용해서 컨테이너를 생성하게 된다면 기본적으로 Docker위에 Ubuntu 환경이 구축되는것이며 이미지를 생성할때 apt install nginx 과정을 추가한다면 Ubuntu + Nginx의 이미지가 생성되는것 입니다.

다만 ubuntu 이미지 자체가 용량이 꽤나 크고 무거운 이미지에 속하므로 nginx만 docker로 사용하려면 아래처럼 nginx 공식이미지가 따로있습니다.

공식이미지의 경우 문서를 보면 OS Layer가 어떤걸로 사용됐는지 나와있습니다.
가벼운 OS종류인 Alpine 이나 데비안 종류가 많이 사용되는거같네요.

컨테이너

컨테이너는 위에 말씀드린 이미지를 통해서 만들어진 결과물(?) 이라고 보시면 될거같습니다.

기존 VM이 하나 생긴다고 이해하시면 될것입니다.

아래 컨테이너를 보면 도커의 관리를 도와주는 portainer이미지로 만들어진 컨테이너임을 확인할 수 있습니다.
사용하고 있는 port나 언제 생성되었는지 정보도 포함되어있네요.

portainer를 이용하면 도커에서 실행되는 컨테이너, 이미지등을 편하게 확인할 수 있기때문에 저 처럼 초보자 분들께는 추천드리는 이미지입니다.

각각의 컨테이너는 용도에 맞춰서 만들어주고 잘 배치해주면 하나의 OS 하나의 Docker아래 여러가지 서비스를 쉽게 운영할 수 있으며
추후에 OS환경, 클라우드 환경을 바꾸더라도 쉽게 마이그레이션 할 수 있습니다.

Docker-compose 란?

추가적으로 댓글에 달린 섭린이님이 말씀하신 docker-compose에 관한 간단한 설명도 첨가하고자합니다.

docker-compose는 docker를 사용하는 방법중 하나로 docker의 많은 설정값들을 설정파일하나(docker-compose.yml)에 저장해서 간단한 up/down 명령어로 실행되게끔 도와줍니다.

예를들어 wireguard의 docker를 실행한다고했을때 기본 도커 명령어로는 아래처럼 긴 명령어를 쳐야하고 컨테이너를 중지하고 재 실행시키기 위해서는 컨테이너 id를 확인하고 다시 중지/실행시키는 과정이 필요합니다.

여기서 docker-compose를 사용한다고 한다면 위와같은 옵션에 대한값들을 docker-compose.yml에 모두 저장한 다음

실행 중지시에 docker-compose up -d / docker-compose down 과 같은 명령어를 통해 컨테이너의 실행/중지를 모두할 수 있게됩니다.

변경값이 필요하다고한다면 해당 config값만 수정하고 down/up만하면되니 더 간편하구요

처음 사용하신다면 다소 생소하실수도있지만 일일히 설정값을 기억하지않고 문서로 작성만해놓아도 되기때문에 마이그레이션때도 훨씬 편합니다.

설치 방법

설치방법은 기본적인 Linux OS인(Cent OS, Ubuntu)부터 윈도우, 라즈비안, 헤놀로지 등등 많은 버전이 있기때문에 자신이 구축한 환경에 맞춰서 설치하시면 됩니다.

서버포럼 - Linux에서 스크립트로 Docker를 1분만에 설치하기.(Feat. Portainer)
안녕하세요. 달소입니다. 오늘은 Docker를 스크립트를 통해 도커 최신버전을 1분만에 설치하는방법입니다. 기존에 작성했던 글도있지만 아무래도 깔끔하게 다시 적는게 나아보여서 겸사겸사 작성해봅니다. 스크립트에...