📌 이 포스팅에서는 Docker가 무엇이고, 왜 중요한지에 대해 정리한 포스팅 입니다.
✔️ Docker란 다른 도구들과 마찬가지로 어떤 문제를 해결하기 위해 만들어진 컨테이너 기반의 오픈 소스 가상화 플랫폼이다.
✔️ 개발을 하다보면 서버 환경이 바뀌거나(AWS, AZUER, Google Cloud) 개발 환경(Node.js, Python, Ruby)이 바뀌는 경우도 생긴다. 버전이 업데이트되기도 한다.
✔️ 서버 관리는 복잡하다. 과정에서 어떠한 하나가 문제가 생기면, 작동하지 않는다는 문제가 있다.
✔️ Docker는 runtime에 필요한 소스코드 뿐만아니라 환경(OS)까지 포함시켜 build해주는데 이를 이미지라한다.
✔️ 즉, Mac에서 애플리케이션을 실행시키던, Ubuntu에서 실행시키던 상관없이 OS까지 build했기 때문에 실행에 문제가 발생하지 않는다.
✔️ 어떤 서버 환경이던 소스를 이미지로만들어 컨테이너를 실행하면 다른 환경에서 발생되는 문제를 해결할 수 있고, 무엇보다 간편하다.
✔️ Docker의 등장으로 서버관리 및 개발방식이 완전히 바뀌게 되었다. 어떤 프로그램도 Docker를 이용해 컨테이너로 만들 수 있고, 컨테이너는 어디서든 실행할 수 있기 때문이다.
✔️ 과거에는 서버를 실행시키기 위해서 사용자를 추가하고, 가상환경을 만들고, 네트워크 설정, 프로그래밍 언어 설치, Git Clone, 다양한 패키지 설치, 설정, Migration, Proxy 설정 등 수많은 과정을 거쳐 서버를 Run할 수 있었다.
✔️ 이런 상황에서 Python을 버전업 하거나 패키지들 중 업데이트해야할 게 발생한다면 어디서 어떤 문제가 발생할지 예상하기 어렵고, 한 곳에서 문제가 생기면 와르르 무너지기 때문에 해결하기는 더 어렵다.
✔️ 이런 문제를 해결해결 하기 위해서 인프라 엔지니어들이 많은 노력했고, 이에 이런 문제로부터 자유로워질 수 있도록 Docker가 등장하게 되었다.
✔️ Docker의 등장은 2013년 DotCloud에서 첫 공개되었고, 격리된 환경에서 작동하는 프로세스로 컨테이너 개념을 이용했다.
✔️ 또한 Docker는 리눅스 커널의 여러 기술을 활용하여 하드웨어 가상화 기술보다 훨씬 가벼운 성능을 보여주었고, 이미지 단위로 프로세스 실행 환경을 구축할 수 있다.
✔️ 가상머신(VM)을 사용할 때 리눅스 OS가 필요하다하면, Hypervisor 위에 Guest OS라는 영역에 설치된다.
✔️ 이 Hypervisor와 또 다른 OS의 설치 때문에 성능상 부담을 준다.
✔️ Docker는 Hypervisor, Guest OS가 필요없기 때문에 성능에 영향을 끼치지 않는다.
✔️ 즉, Docker는 가상머신처럼 독립적으로 실행되지만, 더 빠르고, 더 쉽고, 더 효율적이다.
✔️ Docker는 다른 프로세스와 격리되어 가상머신처럼 사용하지만, 성능저하가 거의 없는게 Docker이다.
✔️ Docker는 이미지에 컨테이너를 생성하기 때문에 반드시 이미지가 필요한데, Dockerfile을 이용하여 이미지를 만들고 운영서버에 이미지를 불러와 배포가 가능하기 때문에 어디서든 컨테이너를 실행할 수 있다.
✔️ 또한 오픈소스이기 때문에 특정 회사나 서비스에 종속적이지 않다. 특히, Docker를 활용하면 쉽게 개발서버를 만들 수 있고, 테스트 서버 생성도 간편하다.
✔️ 도커를 사용하지 않은 경우, 각 언어에 따라 서비스 배포 방식이 제각각 다르지만 컨테이너라는 표준을 사용하기 때문에 모든 서비스들의 서버 배포가 동일하다.
✔️ Docker는 환경변수로 설정관리를 제어할 수 있기 때문에 각 각의 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어져야 한다.
✔️ Docker는 삭제 후 새로 만들면 모든 데이터가 초기화되기 때문에 업로드 파일을 AWS와 같은 외부 스토링지와 연결하여 사용할 수 있다.