컨테이너로 실제 어플리케이션 실행 환경 만들기
한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.

리눅스 컨테이너는 컴퓨팅 가상화 같은 인프라 리소스를 비롯해 어플리케이션 빌드 및 배포 방식과 라이프사이클 그리고 서비스 운영환경도 바꿔놨다. 어플리케이션이 컨테이너 단위로 패키징 되기 시작하면서 서비스에 유연함이 더해졌고 이것이 발전해 현재의 컨테이너 오케스트레이션 세상까지 도달했다.
이러한 상황속에서 개발자는 자신의 어플리케이션을 컨테이너 환경으로 배포 해야 하는데 그 첫걸음이 바로 도커다. 이 책은 개발자 관점에서 나의 어플리케이션을 어떻게 컨테이너 라이프사이클에 녹일 수 있는지 잘 설명한다. 도커 스웜이나 쿠버네티스 같은 오케스트레션 보다 어플리케이션 환경에 집중한 책이다.
나 역시 Dockerfile 을 CI/CD 파이프라인에 포함시켜 자동화를 해봤지만 도커를 비롯한 인프라가 으례 그렇듯 제대로된 학습이 되지 않으면 실행 해보기 전엔 어떤 사이드 이팩트가 있을지 알 수 없고, 운영 중에도 어떤 문제가 발생할지 알 수 없다. 어플리케이션은 이 레이어 위에서 운영되기 때문에 인프라는 상대적으로 민감하기 마련이다. 방대한 레퍼런스를 모두 머릿속에 넣고 다닐게 아니라면 철저히 경험에 기반한 영역은 배움에 전략이 필요하다. 이런 바탕의 의구심과 제대로 사용하기 위한 정보를 습득한다는 것은 많은 시간과 노력이 필요하지만 이 책은 저자의 노하우를 바탕으로 컨테이너 작성와 빌드 그리고 배포에서 일어나는 여러 단계들을 알기 쉽게 설명한다.
책은 컨테이너 방식의 가상화가 하이퍼바이저 가상화와 무엇이 다른지, 컨테이너가 무엇으로 이루어져있는지, 컨테이너 환경이 다른 환경과 달리 주의할 점은 어떤것인지 알려준다. 특히 도커는 CPU 아키텍처와 호스트 OS에 의존하는데, 이런 단점들도 적혀있어서 좋았다.

인상 깊었던 부분은 컨테이너의 상태 머신이 풀컬러로 그려져 있던 것인데 컨테이너 뿐만 아니라 이 책에서 다루는 이미지, 컨테이너 추출, 네트워킹, 볼륨 마운트, Dockerfile 같은 부분들이 컨테이너와 어떻게 관계를 이루는지 한눈에 볼 수 있어서 좋았다.

도커의 전반적인 아키텍처들을 소개하면서도 명령에 대한 소개도 소홀하지 않다. 심지어 ‘주로 사용하는 명령어’ 위주로 설명하며 자주 쓰일 커맨드들에 대해서 상세하게 알려주는 점이 좋았다. 주요 명령어들을 소개하는 소단원 가장 앞에는 항상 명령어에 대한 결과와 상태 변화를 도식화 해놓은 다이어그램이 있어서 이해하는데 큰 도움이 됐다. 이런 점이 저자의 노하우가 고스란히 녹아있다는 생각이 들게 했다.
늘 사용하던 패턴으로만 사용하니 몰랐던 사실들도 알게 되었는데 그것은 컨테이너 레이어와 메타데이터의 차이, 컨테이너 commit과 export+image의 차이, Dockerfile의 이력 추적방법, 볼륨과 바인드 마운트의 차이 같은 흥미로운 내용들이 있어 도움이 되었다. 또한 책의 마지막에는 데이터베이스, WAS, 메일 솔루션을 도커환경으로 운영해보는 시나리오도 있어서 실제로 어떤식으로 컨테이너를 조합하는지 알수 있어서 좋았다.
한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.