대학 친구와 취업 전까지 각자 특정 주제에 대해 학습하고 정리해봄으로써 각자의 것으로 만들기 위해 하는 정리입니다!
부족하거나 잘못된 부분이 있다면 댓글을 남겨주세요!
나는 무언가 배울때 '이거 배워서 어디에 써먹지?'를 많이 생각한다.
왜냐하면 배움의 필요성을 못느낀 배움의 학습력이 현저히 떨어지기 때문.
그래서 먼저 Docker를 왜 배워야할가를 찾아보고 내 경험과 함께 내가 이해해본 대로 작성했다.
이전 '국민학교'라는 커뮤니티를 만들때, 프론트엔드로 참여했지만 내 local환경에서 전체적인 서비스를 실행해보려고 백엔드 친구들에게 jar파일을 받은 적이있다.
하지만 내 Intelli J에서는 실행되지 않았다.
왜? jar파일을 구성한 친구의 컴퓨터 환경과 설정이 다르고, 버전이 달라 에러가 발생했기 때문이다.
그래서 똑같은 환경을 구축하기위해 물어봤지만 친구는 진행했던 모든 환경설정을 기억할 수 없었고, 진행하기 위해서는 많은 시간이 소요되는 걸 알았다.
바로 이러한 경우를 해결하기 위해, 아니 해결보단 더 간편하게 다른 친구의 컴퓨터에서도 내 jar파일을 실행시킬 수 있도록 해줄 수 있는 소프트웨어가 바로 'Docker'이다.
위에 나의 예시와 같이 각 컴퓨터의 버젼이 다름으로써 그로 인한 불편함들이 발생하자 이를 해결하기위해 가상 머신이라는 기술이 등장 했다. 하지만 가상머신은 하이퍼바이저라는 소프트웨어를 반드시 거쳐야하여 매우 속도가 느렸다. 그래서 2013년 이를 보완한 컨테이너를 이용하는 Docker가 등장하게 되었다.
'그래서 Docker가 뭐야?'라는 의문을 갖고 여러 블로그, 사이트들을 돌아다녔다.
사전에 있는 단어가 아니라 딱 뭐다 라는 정의가 없어, 여러 사이트들을 살펴보고 섞어 정의해보았다.
Docker란 애플리케이션을 포장하고(패키징) 컨테이너 방식으로 실행할 수 있게 해주는 소프트웨어이다.
Docker에는 이미지와 컨테이너가 있다.
이미지와 컨테이너를 설명하는 많은 내용들이 있었고, 이를 이해하고 내 나름대로 적용시켜 정의해보려고 한다.
Docker 이미지는 컨테이너의 정의이다.
즉, Java에서 하나의 '클래스'라고 생각했다.
Java의 경우 클래스에서 멤버 변수, 메소드 등을 정의한다.
그리고 이를 나중에 이용하는데 Java에서 클래스가 Docker의 이미지라고 비유하고 싶다.
즉, 개발자는 Docker의 이미지를 구축한다.
이미지가 클래스라면, 컨테이너는 하나의 객체라고 생각한다.
즉, 이미지에 전달하고자 하는 애플리케이션, 그리고 구동되는 환경이 구축되어 있어 이를 컨테이너로 만들어 전달하면 사용하려한 동료는 환경설정없이 컨테이너를 통해 애플리케이션을 실행할 수 있을 것이다.
rhkswls98 벨로그 : 도커는 왜 쓸까?
MarkAny Techlog벨로그 : 도커란 무엇인가
thyoondev.log 벨로그 : 왜 도커(Docker)가 필요한가?