Docker는 대표적인 컨테이너를 만들고 사용할 수 있도록 하는 플랫폼 중 하나입니다.
컨테이너는 동작 환경과 함께 격리한 프로세스입니다. 격리했기 때문에 외부와는 특정 인터페이스로만 상호작용이 가능합니다.
이전까지 서버에서 여러 서비스를 실행시키기 위해서는 서버에 OS뿐만 아니라 해당 서비스를 실행하기 위한 다양한 다른 프로그램들을 설치했어야 했습니다. 더해서 서로 사용하는 라이브러리나 프로그램의 버전이 다르다는 등 한 서버에서 서비스들을 위한 환경을 맞추는 과정과 관리가 복잡해 문제가 생기기 쉬웠습니다. 차라리 CPU나 RAM이 남아돌아도 다른 서버 컴퓨터에 설치하는 것이 효율 면에서는 안 좋을지 몰라도 관리 면에서는 더 낫다고 생각할 만큼 여러 서비스를 하나의 서버에서 잘 작동하도록 환경을 만들어주는 것은 여간 어려운 일이 아니었습니다.
이후 시간이 지나 마이크로 서비스 아키텍처(MSA)를 사용하게 되면서 하나의 서비스는 더 작은 서비스들로 잘게 쪼개졌고 이를 기존의 방법으로 관리하는 것은 거의 불가능에 가까울 정도가 되었습니다. 이러한 문제를 해결하기 위해 나온 방법 중 하나가 컨테이너를 사용해서 각각의 마이크로 서비스를 관리하는 것이었습니다.
컨테이너의 가장 큰 장점은 컨테이너를 사용할 수 있는 플랫폼(ex. Docker)이 존재만 하면 외부 설정과 상관없이 실행할 수 있다는 점입니다. 그렇기 때문에 서버에 Docker가 돌아갈 수 있도록 환경을 만들어준다면 어떠한 컨테이너든 실행시킬 수 있습니다. 이렇게 컨테이너 방식은 실행시키고 싶은 프로그램을 위해 굉장히 복잡하게 관리를 했던 기존 시스템의 단점을 해결해주었습니다.