Docker Container 및 Kubernetes, 그리고 DevOps tool chain을 활용한 Digital Transformation 니즈가 많아지고 있습니다. 많은 분들과 이야기를 해보면 Container라는 단어를 많이 사용하시는데, 정확한 개념에 대해 헷갈려 하시는 경우가 있어서 설명해보고자 합니다. 또한, 활용시 장점도 같이 적어보겠습니다.
Container란? 애플리케이션이 실행되기 위해 필요한 코드와 실행에 필요한 환경을 함께 묶은 패키지, On-premise 또는 다른 Cloud 환경으로 빠르고 안정적으로 이관 가능함. 운영체제, Host 서버의 영향을 받지 않도록 패키지형태로 추상화되어 있음.
장점
1. Consistency (일관성)
Container는 운영되는 환경과 애플리케이션을 분리한다. 즉, Container화한 애플리케이션을 어떤 환경이든, Public Cloud, Private Cloud, 또는 On-premise 환경에 관계없이 빠르고 효과적으로 배포가능하다는 의미이다. Container에는 해당 애플리케이션이 동작하느넫 꼭 필요한 Runtime이나 라이브러리를 포함시킬 수 있기 때문에 개발자가 어떤 운영 환경이든 무관하게 활용 가능하다.
2. Productivity (생산성)
Container의 기본 특징이 가볍고, 여러 요소간의 연관성을 분리해놨기 때문에 IT 운영자가 환경 설정을 해야하는 고민을 덜어준다. 개발자가 애플리케이션 로직과 실행에 필요한 환경을 함께 개발해야 하기 때문에 IT 운영자가 고민하던 애플리케이션 버전 및 Configuration 값 설정등의 관리부담이 줄어든다. 테스팅 등에 소요되는 시간을 획기적으로 줄여준다. (DevOps 도입)
3. Portability, Agility, Flexibility (이식성, 민첩성, 유연성)
어떤 일이 잘 동작하는 경우 반복하는 것이 바람직하다. 전통적 개발 방법론에서는 해당 호스트 서버에 설정하는 것에서부터 IT 운영자가 운영중인 애플리케이션을 새로운 플랫폼이나 운영체제로 이관하는 것이 굉장히 어려웠다. Container는 Platform 독립적으로 이식성을 제공한다. 또한, 애플리케이션이 실행되기 위해 필요한 코드와 실행에 필요한 환경을 함께 묶은 패키지 방식이기 때문에 다른 운영체제 또는 Platform으로 쉽게 이동 가능하기 때문에 민첩성, 유연성, 그리고 생산성의 장점을 확보 가능하다.
4. Security (보안)
Container는 상호간에 교류가 없기 때문에 하나의 Container가 hacking을 당해도 다른 Container들은 문제없이 작동한다.