Docker - 기본 개념

임채령·2024년 8월 13일

오늘은 도커를 공부해보려고한다. 평소에 웹 개발할때 자주 사용하던 플랫폼인데 개념을 정확하게 한번 더 짚고가면 이후에 쿠버네티스 공부할때 좋을거같아 도커를 한번 더 정리 하려고 한다 !

하지만 ! (나에게)도커는 어렵다. 그래서 나는 도커를 “요리”에 빗대어서 설명해보려한다 !

먼저, 구글에게 물었다. Docker란 ?

Docker는 개발자가 컨테이너를 구축, 배포, 실행, 업데이트 및 관리할 수 있게 해주는 오픈 소스 플랫폼입니다. 컨테이너는 애플리케이션 소스 코드를 운영 체제(OS) 라이브러리 및 모든 환경에서 해당 코드를 실행하는 데 필요한 종속성과 결합하는 표준화된 실행 가능한 구성 요소입니다.

역시 어렵다. 지금부터 “요리”에 빗대어 설명해보겠다 !

도커(Docker)란 무엇인가?

도커는 애플리케이션을 독립된 환경에서 실행할 수 있도록 해주는 도구다. 마치 요리를 위해 모든 재료를 하나의 상자에 넣어두는 것과 비슷하다. 이 상자에는 필요한 모든 재료가 담겨있어, 어디서든 상자만 열면 똑같은 요리를 만들 수 있다. 도커를 통해 개발자는 애플리케이션을 만들고, 이를 다양한 환경에서 일관되게 실행할 수 있다.

컨테이너화란 무엇인가?

컨테이너화(Containerization)는 앞서 말한 상자에 재료를 담는 과정과 같다. 이 상자 안에는 애플리케이션이 실행되기 위해 필요한 모든 것이 포함된다. 예를 들어, 피자를 만들기 위해서는 도우, 소스, 치즈, 토핑 등이 필요하다. 만약 이 재료들을 각각 준비해야 한다면, 장소가 바뀔 때마다 다시 준비해야 할 것이다. 하지만 상자에 모든 재료를 담아두면, 어디서든 상자만 열면 쉽게 피자를 만들 수 있다는 것이다 !

이 상자는 다른 상자와 완전히 독립적으로 존재하며, 하나의 상자에 문제가 생겨도 다른 상자에는 영향을 주지 않는다. 또한, 이 상자는 매우 가벼워서 빠르게 이동할 수 있고, 다른 환경에서도 똑같이 작동한다. 이처럼 컨테이너화는 애플리케이션을 일관되고 효율적으로 관리할 수 있도록 해준다.

도커의 핵심 구성 요소

도커는 몇 가지 중요한 구성 요소로 이루어져 있다. 이를 통해 컨테이너를 관리하고 운영할 수 있다.

  • 도커 이미지(Docker Image): 도커 이미지는 요리를 위한 레시피와 같다. 이 레시피에는 요리를 만드는 데 필요한 모든 재료와 방법이 담겨있다. 이미지는 여러 층으로 이루어져 있으며, 이를 기반으로 컨테이너를 생성한다.
  • 도커 컨테이너(Docker Container): 도커 컨테이너는 레시피를 따라 실제로 만들어진 요리와 같다. 이 컨테이너 안에는 애플리케이션을 실행하는 데 필요한 모든 것이 포함되어 있으며, 독립적으로 실행된다.
  • 도커 파일(Dockerfile): 도커 파일은 레시피를 작성하는 가이드다. 이 파일에는 이미지(레시피)를 만드는 방법이 명령어로 기록되어 있으며, 도커는 이를 읽어 이미지를 생성한다.
  • 도커 허브(Docker Hub): 도커 허브는 요리 재료를 보관하는 중앙 저장소와 같다. 여기서 이미 만들어진 레시피(이미지)를 가져다 쓸 수 있고, 자신이 만든 레시피를 다른 사람들과 공유할 수도 있다.
  • 도커 데몬(Docker Daemon): 도커 데몬은 주방의 셰프와 같다. 이 셰프는 레시피를 받아서 실제로 요리를 만들어내고, 주방을 관리한다. 도커 클라이언트에서 요청이 들어오면, 도커 데몬이 이를 처리한다.
  • 도커 클라이언트(Docker Client): 도커 클라이언트는 셰프에게 명령을 전달하는 도구다. 사용자는 이 도구를 통해 "컨테이너를 만들어라", "이미지를 다운로드해라" 등의 명령을 내릴 수 있다.

도커의 핵심 개념을 간단하게 시각화해보았다 !!


1. Dockerfile에서 도커 이미지를 빌드합니다.
2. 이 Docker Image는 여러 환경에서 동일하게 사용될 수 있는 애플리케이션의 "완성된 템플릿"입니다.
3. 이 이미지를 실행하면 Docker Container가 생성되며, 애플리케이션이 실제로 동작하게 됩니다.

이 과정은 위에서 언급했듯이, 레시피(Dockerfile)를 보고 요리(Docker Image)를 만들고, 그 요리를 실제로 서빙하는 것(Docker Container)과 비슷하다 !

도커의 장점

  • 경량화 및 효율성: 도커는 경량화된 컨테이너를 통해 애플리케이션을 매우 효율적으로 실행할 수 있습니다. 이는 마치 요리를 위해 필요한 최소한의 재료만으로 빠르게 요리를 완성하는 것과 같은 이치입니다. 컨테이너는 불필요한 요소를 배제하고, 꼭 필요한 요소만 포함하여 가볍고 빠르게 애플리케이션을 실행합니다.
  • 이식성: 도커 컨테이너는 환경에 상관없이 동일하게 작동합니다. 개발자가 만든 애플리케이션은 어디서든 동일한 컨테이너를 사용해 실행할 수 있습니다. 이는 마치 개발자가 만든 요리를 다른 장소에서도 똑같이 재현할 수 있는 것과 같습니다.

도커의 단점

  • 복잡성: 도커는 처음 사용하는 사람들에게 다소 복잡하게 느껴질 수 있습니다. 특히, 네트워킹 설정이나 보안 구성과 같은 부분에서 익숙해지기까지 시간이 걸릴 수 있습니다.
  • 데이터 영구성 문제: 도커 컨테이너는 기본적으로 일시적이기 때문에, 영구적인 데이터 저장이 필요할 때 추가적인 설정이 필요합니다. 이를 해결하기 위해 도커 볼륨을 사용해야 하지만, 이 역시 설정이 다소 복잡할 수 있습니다.

도커의 사용 사례

도커는 다양한 상황에서 활용될 수 있다. 개발 환경에서는 개발자들이 동일한 환경에서 작업할 수 있도록 하여, "내 컴퓨터에서는 잘 되는데 서버에서는 안 된다"는 문제를 방지한다. 또한, CI/CD 파이프라인에서 도커는 애플리케이션의 빌드, 테스트, 배포를 자동화하는 데 사용된다.

마이크로서비스 아키텍처에서도 도커는 각 서비스를 독립적으로 컨테이너로 패키징하여 관리할 수 있다. 이 외에도 테스트 환경을 신속하게 구성하거나, 클라우드 환경에서 애플리케이션을 배포하는 데도 도커가 유용하게 사용된다.

결론적으로, 도커는 개발자가 애플리케이션을 만들고, 이를 다양한 환경에서 일관되게 실행할 수 있도록 도와주는 강력한 도구다. 이를 통해 개발자는 더 효율적으로 작업할 수 있고, 사용자에게는 일관된 경험을 제공할 수 있다.

1개의 댓글

comment-user-thumbnail
2024년 8월 16일

잘 읽었습니다. 화이팅!

답글 달기