AI VIDEO BRIEFING

도커 입문 가이드: 컨테이너·이미지 개념과 docker run·ps·stop 기본 명령어

여러 서비스의 OS·라이브러리 호환성이 얽히는 '매트릭스 지옥'을 도커가 어떻게 푸는지, 컨테이너와 이미지의 차이, docker run·ps·stop 등 기본 명령을 입문자 눈높이로 정리했다.

도커 입문: 컨테이너가 '의존성 지옥'을 끝내는 방법 영상 대표 이미지

핵심 메시지

  • 도커는 각 구성요소를 자체 의존성·라이브러리와 함께 별도 컨테이너에 담아, 서비스·라이브러리·OS가 얽히는 '매트릭스 지옥'을 해결한다.
  • 컨테이너는 가상머신과 달리 같은 OS 커널을 공유하므로, 메가바이트 단위로 가볍고 수 초 만에 부팅된다.
  • 이미지는 컨테이너를 만드는 템플릿이고, 컨테이너는 그 이미지로 실행된 격리된 인스턴스다.
  • docker run, ps, stop, rm, images, rmi, pull, exec, logs 같은 기본 명령으로 컨테이너의 생애주기를 다룰 수 있다.

쉽게 이해하기

강사는 과거 Node.js 웹서버, MongoDB, Redis, Ansible 같은 서로 다른 기술로 애플리케이션 스택을 구성하다 겪은 고통에서 이야기를 시작한다. 각 서비스와 OS의 호환성, 서비스와 라이브러리 버전 간 충돌, 새 개발자가 들어올 때마다 수백 개 명령을 따라 환경을 세팅해야 하는 문제 등이 얽혔는데, 이를 흔히 '매트릭스 지옥(matrix from hell)'이라 부른다.

도커는 이 얽힌 서비스·라이브러리·의존성·OS를 각각 자체 컨테이너로 포장한다. 한 번 도커 설정을 만들어 두면 모든 개발자가 OS와 무관하게 docker run 한 줄로 동일한 환경을 띄울 수 있다. 컨테이너는 자체 프로세스·네트워크·마운트를 갖는 완전히 격리된 환경이지만, 가상머신과 달리 호스트의 OS 커널을 공유한다는 점이 핵심이다.

그래서 도커 호스트가 우분투라도 데비안·페도라·openSUSE 같은 다른 리눅스 배포판 기반 컨테이너를 돌릴 수 있다. 다만 커널이 다른 윈도우 컨테이너는 리눅스 호스트에서 바로 돌릴 수 없다. 윈도우에서 리눅스 컨테이너를 돌리는 경우도 실제로는 그 아래 리눅스 가상머신 위에서 동작한다. 영상은 도커가 초기 LXC에서 출발해 libcontainer, 이어 OCI 표준의 runC와 containerD로 옮겨온 역사도 짚는다.

가상머신과 비교하면 차이가 분명하다. VM은 각자 전체 OS를 품어 기가바이트 단위로 무겁고 부팅에 수 분이 걸리지만, 컨테이너는 커널을 공유해 메가바이트 단위로 가볍고 수 초 만에 뜬다. 대신 컨테이너는 격리 수준이 VM보다 낮다. 실무에서는 둘을 함께 써서 가상 도커 호스트 위에 수많은 컨테이너를 올리는 구성이 흔하다. 한편 도커는 2019년 엔터프라이즈 에디션을 Mirantis에 매각했고, 현재는 무료 오픈소스 Docker Engine과 그 위의 구독 티어(personal·pro·team·business)로 제공된다.

이미지는 컨테이너를 만드는 템플릿이고, 컨테이너는 그 이미지로 실행된 격리 인스턴스다. 기본 명령은 다음과 같다. docker run은 이미지로 컨테이너를 실행하며 로컬에 없으면 Docker Hub에서 내려받는다. docker ps는 실행 중 컨테이너를, -a는 종료된 것까지 보여준다. docker stop은 중지, docker rm은 컨테이너 삭제, docker images는 이미지 목록, docker rmi는 이미지 삭제(해당 이미지를 쓰는 컨테이너가 없어야 함)다. docker pull은 실행 없이 이미지만 받고, docker exec는 실행 중 컨테이너 안에서 명령을 실행한다.

주요 인사이트

  • 컨테이너는 OS를 호스팅하려는 게 아니라 특정 프로세스 하나를 돌리기 위한 것이다. 그래서 우분투 이미지를 그냥 실행하면 안에 돌아갈 프로세스가 없어 즉시 종료된다. 컨테이너는 내부 프로세스가 살아 있는 동안만 산다.
  • -d(detached)로 백그라운드 실행, -i(interactive)로 표준 입력 연결, -t(pseudo terminal)로 터미널을 붙인다. 보통은 -it를 함께 쓰지만, 데이터를 파이프로 흘려보낼 때는 -i만, 색상·진행바 같은 출력만 필요할 때는 -t만 쓰는 좁은 쓰임도 있다.
  • 컨테이너의 파일시스템은 격리돼 있어 컨테이너를 지우면 내부 데이터도 사라진다. -v 플래그로 호스트 디렉터리를 컨테이너 내부 경로에 마운트하면 컨테이너를 지워도 데이터가 외부 볼륨에 남는다.
  • 컨테이너 내부 포트는 호스트에서 직접 접근되지 않으므로, -p 플래그로 호스트 포트를 컨테이너 포트에 매핑해야 외부 사용자가 접근할 수 있다. 단, 호스트의 같은 포트를 두 번 매핑할 수는 없다.
  • 이미지 태그(예: redis:7.4)로 버전을 지정하며, 태그를 생략하면 latest가 적용된다. latest는 움직이는 표적이라 재배포 시 조용히 업그레이드될 수 있으므로, 운영 환경에서는 특정 태그로 고정하는 것이 안전하다.

자주 묻는 질문

컨테이너와 가상머신의 가장 큰 차이는 무엇인가요?

가상머신은 각자 전체 OS와 커널을 품어 기가바이트 단위로 무겁고 부팅에 수 분이 걸립니다. 컨테이너는 호스트의 OS 커널을 공유해 메가바이트 단위로 가볍고 수 초 만에 뜨지만, 그만큼 격리 수준은 VM보다 낮습니다.

이미지와 컨테이너는 어떻게 다른가요?

이미지는 컨테이너를 만드는 패키지이자 템플릿이고, 컨테이너는 그 이미지로 실행된 격리 인스턴스입니다. 하나의 이미지로 여러 컨테이너를 만들 수 있습니다.

컨테이너를 지워도 데이터를 보존하려면 어떻게 하나요?

컨테이너의 파일시스템은 격리돼 있어 컨테이너 삭제 시 내부 데이터도 사라집니다. -v 플래그로 호스트의 디렉터리를 컨테이너 내부 경로(예: MySQL의 /var/lib/mysql)에 마운트하면, 컨테이너를 지워도 데이터가 외부 볼륨에 남습니다.

docker run 시 우분투 같은 이미지가 바로 종료되는 이유는?

컨테이너는 OS를 호스팅하는 게 아니라 특정 프로세스를 실행하기 위한 것입니다. 우분투 이미지는 기본으로 실행할 서비스가 없어, 실행할 프로세스가 없으면 컨테이너가 즉시 종료됩니다. sleep 같은 명령을 주면 그 시간만큼 살아 있습니다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식

#도커#컨테이너#DevOps#이미지#입문