Git이나 취업할 때 공고 같은걸 보면, 기술 스택에 "Docker"가 있는 것을 자주 볼 수 있다.
Docker를 사용하면, 자신이 사용하고 있는 os와 라이브러리들과 완전히 별개의 환경을 엄청 쉽게 구성할 수 있다.
이러한 장점 때문에 Git에서는 개발자가 Docker를 올려놓아서, 코드 사용자가 훨씬 더 쉽게 코드 실행 환경을 조성할 수 있게됐다.
특히, 논문에 있는 모델 돌려보고 싶은데 호환성 맞추기 까다로워서 며칠씩 날려먹어본 경험이 있다면 이게 얼마나 쩌는 건지 이해할 것이다.
이렇게 좋은 Docker, 우리도 쓸 줄 알아야하지 않을까? Docker란 무엇이고, 어떻게 쓰고, 관리하는지 알아보자.
전문가가 될 필요는 없지만, 적당히 꺼드럭 거릴 수 있는 정도가 되는 것이 우리의 목표다.
Docker?
우선, Docker를 설명하려면 컨테이너(Container)라는 개념을 알아야한다. 컨테이너는 쉽게 말해서 어떤 "뚝배기" 같은 거라고 생각하면 편하다.
예를들어, 된장찌개를 끓이려면 뚝배기 안에 된장이나 두부, 애호박 등등 필요한 재료를 넣고 끓이면 되는 것처럼 우리가 쓸 os, 라이브러리, 어플리케이션 및 그에 필요한 것들을 담아주는 어떤 표준화된 소프트웨어 유닛이다.
컨테이너의 좋은 점은, 일단 어떤 환경에서 돌아간다면 다른 환경에서는 무조건 돌아간다는 것이다.
뚝배기랑 그 안에 찌개 재료가 똑같다면 그걸 가지고 집에서 끓이던, 캠핑장에서 끓이던 똑같은 맛과 퀄리티의 찌개가 나오는 것과 동일하다.
이처럼 컨테이너는 주변 환경에 영향을 받지 않는 "독립성"과 한 환경에서 돌아가면, 다른 환경에서도 똑같이 돌아가는 "일관성"을 가지고 있다.
근데, 이렇게만 보면 뭔가 비슷한 녀석이 하나 떠오른다. 바로 가상머신(VM)이다. 가상 머신도, Docker랑 비슷한 기능을 제공하지만, 구조에 큰 차이가 있다.
VM의 경우, 하드웨어를 가상화해서 각 VM마다 독립된 Guest OS를 설정한다. 쉽게말해서, 현재 로컬에서 사용 중인 하드 웨어 자원과 별개로 잉여 하드 웨어 자원에 VM에 필요한 값들을 미리 할당해서 쓰는거다.
이러면, VM마다 겹치는 라이브러리가 있다고 하더라도 각각의 VM에 중복되서 설치하게 되고 VM의 부팅 속도도 굉장히 느리다.
즉, 속도 측면이나 하드웨어 리소스를 사용하는 방식 측면에서 상대적으로 비효율적이다.
반면 컨테이너는 새로운 OS(커널)을 전부 설치하는게 아니라, 해당 OS가 돌아가기 위한 최소한의 실행 파일과 라이브러리(User space)만 담아서 마치 새로운 OS처럼 보이도록 "잘 격리된 프로세스"가 돌아가는 것이다.
이 프로세스는 호스트의 하드 웨어 자원을 활용하기 때문에 훨씬 효율적이고, 라이브러리를 중복 설치할 문제점도 없어진다. 더 자세하게는 Layer 저장 방식을 사용해서 가볍고 빠른 동작과 중복 문제가 해결되는 거지만, 그런 딥한 것은 패스하자.
따라서, 서버 같은 장비에서는 수 백개의 컨테이너도 한 번에 실행할 수 있다.
Docker는 이런 멋진 컨테이너라는 기술을 표준화된 방식으로 쉽게 사용할 수 있게 해주는 플랫폼이다.
Docker에서 자주 사용하는 주요 용어는 아래와 같다.
- Image: 컨테이너를 실행하기 위한 모든 설정과 종속성이 포함된 읽기 전용 템플릿.
- Container: Image를 실행한 상태
- Dockerfile: Image를 만들기 위한 설계도
- Docker Hub: 이미지를 공유하고 저장하는 저장소
다음에는 Docker를 설치하는 방법을 알아보자.
'ETC > Docker' 카테고리의 다른 글
| Docker를 알아보자 - 회원가입 및 설치 (0) | 2026.03.08 |
|---|
