컨테이너를 생성하고 관리하기 위한 도구..! 가 도커라고 소개한다.
어... 그래. 그래서 그게 뭔데? 컨테이너가 뭔데
코드 묶음, 코드 패키지이며, 해당 코드를 실행하는데 필요한 종속성과 도구가 포함된다.
동일한 코드, 동일한 환경, 동일한 버전등은 거진 같은 동작과 결과를 제공할 것이다.
즉, 이런 상태에서 내 앱은 정상적으로 잘 동작하고 있어. 이 상태로 컨테이너에 박아넣을꺼야.
그렇다. 컨테이너에 모두 때려박고 관리하는 것이다.
나는 처음 도커를 접했을 때 도커에서 나오는 단어들에 굉장히.. 뭐랄까? 함정에 빠졌다고 표현해야 하나? 아무튼 왜 컨테이너인지 당최 이해를 하지 못했다. 지금이라고 뭐 잘 알겠나 싶지만, 그때는 정말이지 공감을 하지 못했다. 컨테이너의 특징을 살펴보면, 다양한 물건이 들어갈 수 있고, 컨테이너를 채운 뒤에는 자체적으로 보관 및 격리, 고립된다. 다른 컨테이너가 섞이지도 않는다. 또한 컨테이너는 이동수단이 바뀔수 있다.
이걸 다르게 얘기하면, 우리의 코드를 싣고, 도구를 싣고, 자체적으로 관리되며, 독립적이기 때문에 다른 어떤것과 섞이지 않을것이며, 도커가 실행되는 어느 서비스에 띄워도 된다는 이야기로 들린다.
도커가 돌아가고 있다면, 이 컨테이너안에서 지지고 볶으며서 그대로 그 서비스 위에서 돌리면 되는것이다. 그렇게 되면, 앞서 말했듯이 컨테이너 안에 있는 그 환경 그대로다가 실행이 되는것이다.
도커는 이러한 컨테이너를 구축하기 위한 도구이다.
개발환경은 무수히 많고, 버전은 미치도록 많다. 내가 개발한 앱이 분명히 잘 돌아가는걸 확인했지만, 어떤 환경에서는 그렇지 못할수 있다. 앞서 설명했듯이 컨테이너에 잘 돌아가는 그 환경을 때려박아 넣고, 앱은 해당 환경을 제공하는 컨테이너에서 실행될 것이기 때문에 이는 상당히 큰 이점이 될 수 있다!
이는 개발환경에서도 적용된다. 팀내에서도 완벽하게 동일한 환경에서 작업을 할 수 있다.
컨테이너의 블루프린터이다. 실제로 코드와 코드를 실행하는데 필요한 도구를 포함한다. 이미지는 모든 설정과 모든 코드가 포함된 공유 가능한 패키지다. 이 이미지를 기반으로 여러 컨테이너를 생성할 수 있다. 반면 컨테이너는 이러한 이미지의 실질적인 실행 인스턴스인 것이다.
이미지가 클래스고, 컨테이너가 클래스로 생성한 인스턴스같은 느낌일까
도커말고 버츄얼 머신이란게 우리한테는 있잖아요!
물론이다. 실제로 가상머신이 좋은 해결책이 되는 경우도 있을것이다. 다음은 도커와 가상환경을 비교한 것이다.
기본틀이 잡혔다. 다음번에는 실제 명령어를 기반으로 실습해야지.