컨테이너 기술이란?
컨테이너 기술은 애플리케이션과 그 실행 환경을 함께 포장해서 배포할 수 있도록 해주는 기술이에요. 쉽게 말하면, "어떤 컴퓨터든 환경이든, 같은 방식으로 내 앱이 잘 돌아가게 만들어주는 방법"이죠.
컨테이너는 코드 + 실행에 필요한 라이브러리, 설정 등 모든 걸 포함해서 패키징되기 때문에, 환경 차이로 인한 오류를 줄여줘요. 자신의 컴퓨터에서 돌아갔지만 친구의 컴퓨터에선 돌아가지 않는 경우나 개발 환경에서는 잘 돌아가는데 운영 서버에서는 안 되는 문제, 겪어보신 적 있죠? 컨테이너는 그런 문제를 거의 없애줍니다.
왜 컨테이너가 필요할까요?
📌 애플리케이션은 점점 더 복잡해지고 있다.
오늘날의 애플리케이션은 단일 서버에만 의존하지 않습니다. MSA, 클라우드, CI/CD 등 다양한 기술 환경에서 수시로 배포되고 확장되죠. 그런데 이 복잡한 환경에서 개발자가 로컬에서 만든 코드가 운영환경에서 제대로 동작하지 않는 문제가 있습니다.
📌 가상머신(Virtual Machine) 등장
이를 해결하기 위해 가상머신(Virtual Machine)이 등장했습니다. 하드웨어 수준에서 자원을 가상화해 애플리케이션을 격리된 환경에서 실행할 수 있게 해주었죠. 하나의 물리 서버에서 여러 개의 VM을 돌릴 수 있었고, 각각의 VM은 독립된 OS를 갖기 때문에 충돌 없이 다양한 앱을 구동할 수 있었습니다.
📌 VM의 한계
하지만 시간이 흐르면서 VM에도 한계가 드러났습니다.
- VM마다 OS가 별도로 올라가 리소스 사용량이 많고, 부팅 속도가 느립니다.
- 이미지를 만들고 배포하는데 시간이 오래 걸리고 복잡해요.
특히 클라우드 시대가 도래하면서, 더 빠르게 배포하고, 더 가볍게 실행되며, 더 유연하게 확장할 수 있는 기술이 필요해졌습니다.
📌 컨테이너(Container)
이런 배경에서 컨테이너 기술이 부상했어요. 컨테이너는 애플리케이션을 운영체제 수준에서 격리하는 기술이에요. 즉 VM처럼 OS 전체를 가상화하지 않고, 호스트 OS의 커널을 공유하면서도 앱을 독립적으로 실행할 수 있어요.
- 가볍다: 운영체제를 포함하지 않으니 실행 속도도 빠르고 리소스 사용도 적어요.
- 이식성: 로컬에서 만든 컨테이너가 서버든 클라우드든 그대로 실행돼요.
- 확장성: 수십 개의 컨테이너를 쉽게 늘렸다 줄였다 할 수 있어요. (MSA 구조에 적합해요.)
Docker의 등장 – 컨테이너를 누구나 쉽게!
컨테이너 기술은 예전부터 리눅스에서는 존재했어요. LXC(Linux Containers)라는 리눅스 컨테이너 기술이 있었죠.
하지만 LXC는 너무 복잡했고, 직접 커널 설정을 만져야 할 만큼 진입장벽이 높았어요. Docker는 이 기술을 기반으로 컨테이너를 누구나 쉽게 사용할 수 있도록 만들어준 도구에요.
💡초기 Docker 버전은 LXC를 활용해 컨테이너를 생성하였고, 지속된 컨테이너 엔진의 발전으로 Docker는 containerd, runC를 이용하는 방식으로 변경되었습니다.
컨테이너는 소프트웨어 개발과 배포의 전체 방식을 바꾼 혁신이에요.
VM의 무거움을 넘어, 빠르고, 이식 가능하고, 유연한 개발 환경을 가능하게 한 컨테이너.
그리고 이를 누구나 쉽게 사용할 수 있게 만든 Docker.