[Docker] Docker 란

Docker란 무엇인가?

사전적으로는 “애플리케이션 컨테이너화 플랫폼”이라고 하지만,
처음 접하는 사람에게는 와닿지 않는 말이다.

도커는 단순히 프로그램 하나가 아니라, 여러 기술 요소가 모여
배포 환경의 ‘불확실성’을 제거하는 하나의 생태계를 의미한다.

💡 도커라는 포괄적인 개념을 한 번에 삼키려 하기보다,
각 구성 요소를 먼저 이해한 뒤 “아, 이것들이 모여서 도커가 되는구나!” 라고 깨닫자.

본인은 ‘도커’ 에 포커스를 맞추게 이해하려다보니 중간에 여러번 포기할뻔했다.


구셩요소

이해하기 쉽도록 대중적인 게임에 비유를 하자.

구성 요소 기술적 정의 (Technical) 게임 비유 (MapleStory) 상세 설명
Docker Engine 도커의 심장. 컨테이너를 생성하고 실행하는 실제 구동부 넥슨 런처 / 게임 실행기 게임을 실행하고 관리하는 기본 프로그램.
이게 깔려 있어야만 월드(Docker Container)를 돌릴 수 있다.
Docker Image 앱 실행에 필요한 모든 것이 압축된 읽기 전용 상태 (스냅샷) 설정 완료된 게임 폴더 (배율 100배 등) 운영체제, 라이브러리, 배율 설정(경험치 100배 등)이 모두 포함된 ‘불변의 폴더’
이미 패치가 다 되어 있어 즉시 실행 가능하다.
Docker Container 이미지를 실행하여 생성된 격리된 가상 공간 (프로세스) 현재 접속 중인 월드 (실제 게임 플레이 중) 이미지를 실행한 상태.
월드 안에서 무슨 짓을 하든(파일을 지우든 몬스터를 잡든) 원본 이미지(설계도)는 변하지 않는다.
마음에 안 들면 월드를 끄고 다시 새 월드를 열면 초기 상태로 시작된다.
Docker Hub 이미지를 저장하고 전 세계 유저와 공유하는 원격 저장소 프리서버 설정 공유 게시판 “누가 경험치 100배 설정 다 끝내놨네? 나도 이거 받아서 바로 써야지!” 하고 가져오는 곳.
Docker Compose 여러 컨테이너를 정의하고 한꺼번에 실행하는 관리 도구 공대원 구성 보스를 잡기 위해 격수, 비숍, 팔라딘 등 필요한 직업군과 그들의 역할을 미리 적어둔 명단
명단(Docker Compose)만 있으면 복잡한 파티 구성을 한 번에 소환하여 레이드를 시작할 수 있다.

사용하는 이유

프론트엔드든 백엔드든 개발을 하면 결국 배포를 해야 한다.
그런데 이 배포라는 게 생각보다 까다롭다.

  • OS 환경의 차이: 윈도우에서는 잘 되는데, 리눅스 서버에 올리면 경로 설정부터 막힘.
  • 버전 지옥: 자바(Java)나 파이썬 버전이 미세하게 달라 실행이 안 되는 경우가 부지기수.
  • 반복되는 설정: 서버를 새로 구축할 때마다 WAS, 웹 서버, DB 설정을 처음부터 다시 하느라 진을 다 뺌.

해결책

도커의 해결책: “그냥 OS 위에 도커 하나 깔고 끝내자”

도커는 이 복잡한 과정을 표준화된 환경으로 묶어버린다.
결국 시간 비용이 줄어들게 되는것이다. (하지만 데스크탑의 리소스를 꽤 잡아먹는다.)

  1. 환경의 박제: 코드뿐만 아니라 OS 환경, 라이브러리, 설정값까지 통째로 ‘이미지’로 만든다.
  2. 어디서나 즉시 실행: 도커 엔진만 깔려 있다면, 어떤 OS(리눅스, 맥, 윈도우)에서든 명령 한 줄로 똑같은 환경을 즉시 구축할 수 있다.
  3. 손쉬운 공유: 잘 셋팅된 이미지를 팀원이나 서버에 그대로 전달하면 “내 컴퓨터에서는 되는데?”라는 소모적인 논쟁이 사라진다.

메이플스토리로 이해하는 도커 개념

글로만 보면 어려우니, 게임에 비유해 보자.

메이플 스토리는 몬스타를 잡아서 레벨업하는 RPG 게임이고,
몬스터를 잡을때마다 정해진 경험치를 획득한다.

하지만 사설(프리)서버의 메이플스토리를 보면 경험치 100배인곳도, 드랍율이 100배인 곳도 존재한다.

메이플스토리 페이지에 접속하여 다운로드 하면 넥슨 런처(=도커 엔진)가 다운로드 된다.
그 후 넥슨 런처를 실행하면 메이플 스토리(=도커 이미지) 설치가 진행 된다.
설치 완료 후 시작 버튼을 누르면 게임 서버(=도커 컨테이너)에 접속 된다.
사설 서버를 이용하고 싶으면 커뮤니티(=도커 허브)에 접속하여 다운로드 한다.


주의사항

도커는 강력한 도구이지만, 특성을 모르고 사용(플레이)하면 데이터(아이템)을 잃어버릴 수 있다.
아래 세 가지는 지키도록 하자.


데이터 휘발성

컨테이너는 ‘일회용’이다

  • 문제: 메이플스토리 월드(컨테이너) 안에서 레벨업을 하고 아이템을 먹었어도, 월드를 껐다 켜면(컨테이너 삭제) 모든 기록이 사라진다.
    기본적으로 컨테이너는 종료 시 내부 데이터를 보존하지 않기 떄문이다.
  • 해결: 소중한 데이터(DB, 로그 등)는 ‘도커 볼륨(Volume)’이라는 별도의 외부 저장소에 저장해야 한다.
    마치 캐릭터 정보는 게임 서버가 아니라 데이터베이스에 저장하는 것과 같다.

용량 관리

이미지는 최대한 가볍게 사용하자

  • 문제: 경험치 100배 설정을 하겠다고 게임 폴더(이미지)에 영화, 음악, 쓸데없는 파일을 다 집어넣으면 용량이 수십 GB가 된다.
    그러면 내려받는 속도도 느려지고 서버 저장 공간도 금방 부족해진다.
  • 해결: 실행에 꼭 필요한 파일만 포함 (불필요한 로그나 빌드 도구는 삭제)

버전 명시

‘최신 버전’ 보다 특정 버전을 명시하여 사용하자

  • 문제: 이미지 버전을 지정하지 않으면 항상 최신판(latest)을 가져온다.
    하지만 게임 패치 후 예전 스크립트가 안 돌아가는 것처럼, 도커 이미지도 업데이트되면서 갑자기 실행이 안 될 수 있다.
  • 해결: MappleStrory:latest 보다는 MappleStrory:5.0.1 처럼 명확한 버전(Tag)을 명시하여 환경의 일관성을 유지

💡 주의사항 요약 표

주의 사항 상세 내용 메이플 비유
데이터 영속성 컨테이너 삭제 시 데이터도 삭제됨 월드 나가면 캐릭터 삭제됨 (볼륨 설정 필수)
보안 컨테이너 내부에 비밀번호를 노출하지 말 것 비밀번호를 확성기로 뿌리지 말 것 (환경변수 활용)
리소스 제한 컨테이너가 호스트의 자원을 다 써버릴 수 있음 한 유저가 서버 렉을 유발하지 않게 제한하기

태그:

카테고리:

업데이트:

댓글남기기