이번 글에서는 docker에 대해서 알아보고자 한다.
대학생 때 팀 프로젝트에서 docker를 사용해본적은 있지만.. 같은 팀원이 다 만들고 실행만해서 사용했어서 사실 사용했다고 하기엔 창피할 정도,,
대학교 때 docker에 대해서 공부해보려고 했지만 그때는 아무리 읽어도 왜 그렇게 이해가 안됐는지 모르겠다 ㅠㅠ
https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html 사이트 글을 읽고 이해한 내용을 작성한다.
글이 오래되서 버전이나 이런부분은 다르지만 docker에 대해서 개념을 잡을려고 한다면 이 글을 읽으면 많이 도움이 될 것으로 보인다.
docker에 대해서 알아보기 전에 docker를 하면 항상 따라오는 단어들을 먼저 이해하고 넘어가보고자 한다.
컨테이너
컨테이너는 docker의 로고에서도 표현되듯이 docker하면 가장 많이 따라오는 단어이다.
컨테이너란 라이브러리, 시스템 도구, 코드 등 소프트웨어 실행에 필요한 모든 것이 포함되어 있다. 컨테이너는 하나의 프로세스라고 볼 수 있다.
이미지
docker에서 이미지란 컨테이너를 만들고 실행시키는데 사용되는 읽기 전용 템플릿이라고 볼 수 있다.
linux container
리눅스 컨테이너란 리눅스에서 프로세스를 격리하는 방식이다. docker는 리눅스 컨테이너 방식을 인용해서 만들어졌다.
docker
이제 docker에 대해서 알아보자. docker는 컨테이너 환경에서 독랍적으로 애플리케이션을 실행할 수 있도록 컨테이너를 만들고 관리하는 것을 도와주는 도구, 즉 컨테이너를 관리하는 플랫폼이다. 이미지를 이용해서 컨테이너를 실행시키거나 만들고, git에서 github와 비슷한 docker에서는 dockerhub를 이용해서 다른 사용자에게 이미지를 배포할 수 있다.
docker의 장점
1. 하나의 서버에 여러개의 컨테이너를 실행해도 서로 영향을 미치지 않고 독립적으로 실행되어 가벼운 VM을 사용하는 느낌을 준다. 이는 실행중인 컨테이너에 접속하여 명령어를 입력할 수 있고 apt-get 이나 yum으로 패키지 설치가 가능하다
2. 새로운 컨테이너를 만드는데 1~2초 정도의 짧은 시간이 걸리며 이는 가상머신보다 훨씬 속도가 빠르다.
docker vs VM
대충 설명만 보면 docker랑 VM이랑 크게 달라 보이진 않아보인다. docker가 VM보다 빠르고 가벼운 장점은 있다는 건데 어떤게 크게 다를까?
VM은 host OS위에 하나의 물지적 머신에서 여러 가상 머신을 실행하는데 사용하는 소프트웨어인 hypervisor를 이용해서 Guest OS를 가상화하여 사용한다. 여러가지 OS를 가상화하여 사용할 수 있고 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에서는 사용하는데 제한이 된다.
하지만 docker은 host OS위에 docker engine으로 프로세스를 단순하게 격리하기 때문에 가볍고 빠르다. 프로세스(컨테이너)가 필요한 만큼만 CPU나 메모리를 사용하기 때문에 성능적인 손실이 적다.
군대에서 체계운용장교라는 보직으로 있으면서 여러 서버를 관리하고 유지했다. 군대에서는 서버 1대당 PC가 각각 1대씩 있었다. 이렇게 되면 하나의 서버를 만들기 위해서 PC 하나를 새로 만들어야하기 때문에 시간이나 자원, 비용이 많이 들었다.
'그냥 하나의 PC에서 여러개 설치하면 되잖아?' 생각할 수 있겠지만 군대인 만큼 호환이 잘 안된다.. 서버마다 사용하는 OS도 다르고 필요로 하는 프로그램 버전도 다르다. 회사에서도 마찬가지 일 것이다. 회사에서도 여러 서버를 관리할 일이 있을 것이고 서버당 필요로 하는 프로그램이나 OS 조건들이 많이 다를 것이다. VM은 위에서 설명했듯이 여러개의 Guest OS를 사용해서 관리하면 속도나 자원 문제가 발생하지만 docker를 이용해서 하나의 서버를 컨테이너로 관리하고 실행하면 프로세스로 쉽게 관리할 수 있다.