개념 사전 · 프로그램

Docker

도커 · Docker Engine

는 를 바탕으로 격리된 환경인 를 만들고 실행하는 플랫폼이다. 는 호스트 커널을 공유하고 ··파일 계층·권한 제한을 조합하므로 독립 커널을 가진 과 구조가 다르다.

밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.

로고: Docker 공식 자료. 제품 식별을 위해 표시하며 각 상표의 권리는 권리자에게 있습니다.

01무엇이고, 어떤 일을 하나

  • 사용자 공간 파일과 실행 설정을 로 배포한다.
  • 의 이름 공간·자원 사용·네트워크를 구성한다.
  • 수명과 데이터 지속성을 ·쓰기 계층·볼륨으로 분리한다.

02어떤 순서로 동작하나

  1. 엔진 요청

    CLI가 데몬의 API로 생성·실행을 요청한다. 데몬이 ··네트워크·저장 자원의 관리 작업을 진행하며 CLI 자체가 격리된 를 직접 실행하는 것은 아니다.

  2. 선택

    의 파일 계층과 ·CMD 등 실행 메타데이터를 준비한다.

  3. 구성

    쓰기 계층과 ··마운트·네트워크 조건을 만든다.

  4. 초기 실행

    설정된 명령이 의 초기 로 실행되며 종료 신호와 자식 정리가 실행 생애에 영향을 준다.

  5. 중지·재생성

    중지는 실행을 멈추지만 삭제하면 인스턴스 쓰기 계층을 잃는다. 지속 자료는 볼륨 등의 독립 저장소에서 관리한다.

03먼저 알아둘 용어와 구성요소

클라이언트는 사용자의 명령을 API 요청으로 보내고 데몬은 · 등의 자원을 관리한다. 로컬 소켓과 원격 API 중 어느 엔진에 연결했는지에 따라 작업 대상이 달라진다.
와 그 실행 환경을 네임스페이스·자원 제한 등으로 격리하는 운영 방식이다. 는 호스트 커널을 공유하며 는 이를 관리하는 엔진의 하나이다.
mount 는 가 보는 마운트 트리를, PID 는 번호 공간을, network 는 인터페이스·경로·포트 공간을 분리한다. 따라서 안의 PID 1과 호스트의 PID 1은 같은 가 아닐 수 있다.
은 CPU·메모리· 수 등의 사용을 집계하고 제한한다.
는 사용자 공간 파일과 실행 메타데이터를 재사용 가능한 계층으로 담는다.
OverlayFS 같은 구현에서는 lowerdir의 기존 파일을 수정할 때 upperdir 쪽으로 복사한 뒤 변경을 적용할 수 있고, 삭제 표시를 통해 아래 파일이 보이지 않게 한다.
는 실행할 기본 프로그램을 정하고 CMD는 기본 인자 또는 기본 명령 역할을 한다.
volume은 가 관리하는 저장 단위이고 mount는 지정한 호스트 경로를 경로에 연결한다.
LEARN THROUGH PRACTICE

호스트 9090·4651 포트와 컨테이너의 8080을 연결하기

브라우저 응답을 의 포트 공개 설정과 연결하고 서로 다른 의 서비스를 구별한다.

실습 구성과 전제

  • 첫 화면은 자체 Go 웹 애플리케이션, 두 번째는 Jenkins 의 별도 실행 사례다. 같은 의 전후 화면이 아니다.
  • 구성 예시는 주소· 이름을 재구성한다. Jenkins의 오래된 화면 버전은 관찰 자료이며 현재 설치 권장 버전으로 사용하지 않는다.
  1. 컨테이너가 수신하는 포트와 호스트 포트를 구별한다

    • Go 웹 애플리케이션은 내부 8080에서 동작하고, 실행 설정의 -p 9090:8080이 호스트 9090을 그 포트로 연결한다. 브라우저는 호스트 주소의 9090으로 요청한다.
    • run의 -t는 가상 TTY를 할당하는 옵션이다. 태그를 지정하는 옵션이 아니며, 의 :태그 표기와 구별한다.
    bash
    docker ps --format "table {{.Names}}\t{{.Image}}\t{{.Ports}}"
    docker port lab-web

    lab-web은 재구성한 이름이다. 포트 매핑을 조회하는 명령이다.

    Docker·Compose 서비스 초기화원본 크기로 보기 ↗
    • 브라우저 주소에는 호스트의 9090 포트가 사용된다.
    • 본문에 Hello Docker!!가 보여 해당 웹 요청에 애플리케이션 응답이 돌아왔음을 확인할 수 있다.
    확인 기준

    9090 응답만으로 어떤 가 담당하는지 확정하지 않는다. port와 실행 목록으로 매핑을 대조한다.

  2. 다른 호스트 포트에 별도 애플리케이션을 공개한다

    • Jenkins 예시의 Compose 설정은 호스트 4651을 8080에 연결한다. 서로 다른 는 각 네트워크 공간에서 같은 내부 포트를 사용할 수 있다.
    • Jenkins의 설정 화면은 HTTP 요청 처리와 초기 설치 UI가 동작한 증거다. 빌드 작업이나 자료 영속성이 검증되었다는 뜻은 아니다.
    yaml
    services:
      app:
        image: example/lab-web:verified
        ports:
          - "127.0.0.1:9090:8080"

    구조 설명용 재구성 설정이다. example/lab-web:verified는 준비한 실습 로 바꾸며, 로컬 호스트에서만 공개하는 예다.

    Docker·Compose 서비스 초기화 · Docker-composes원본 크기로 보기 ↗
    • 브라우저는 4651 포트를 사용한다.
    • Jenkins의 Customize Jenkins와 플러그인 설치 선택 화면이 표시되어 첫 화면과 다른 애플리케이션임을 알 수 있다.
    확인 기준

    두 가 같은 호스트 IP·포트를 동시에 점유하려 하면 충돌할 수 있다. 내부 포트가 같은 것과 호스트 공개 포트가 같은 것을 구별한다.

  3. HTTP 성공과 컨테이너·저장 상태를 분리한다

    • 실행 중 여부, 포트 공개, 의 실제 리슨, 애플리케이션 응답을 차례로 확인한다. 가 Up이어도 서버가 다른 주소나 포트에서 기다릴 수 있다.
    • Jenkins의 작업 자료를 유지하려면 별도의 volume 또는 mount를 확인해야 한다. 화면의 설치 UI만으로 재생성 후 데이터 보존까지 증명되지는 않는다.
    bash
    curl -i http://127.0.0.1:9090/
    docker inspect --format "{{json .NetworkSettings.Ports}}" lab-web
    docker inspect --format "{{json .Mounts}}" lab-web

    응답·포트·마운트를 서로 다른 관찰 지점에서 확인한다.

    확인 기준

    재구성 환경에서 curl의 응답과 inspect의 매핑·마운트를 함께 기록한다. 로그에는 초기 비밀 값이 포함될 수 있어 본문에 전재하지 않는다.

실습에서 확인한 동작 원리

  • HOST_PORT:CONTAINER_PORT는 요청이 어느 네트워크 경계로 전달되는지 나타낸다.
  • 브라우저 응답, 실행, 초기화 완료, 자료 영속성은 각각 별도로 검증해야 한다.
관련 개념·전체 실습 화면 이어서 읽기 →
동작·명령 참고 문서

04예제로 따라가기

  • 같은 로 만든 새 에는 이전 의 쓰기 계층이 자동 복사되지 않으므로 그 안에만 저장한 업로드를 기대할 수 없다.
  • EXPOSE 8000은 메타데이터이며 실제 호스트 공개는 publish 설정과 애플리케이션 listen 조건이 함께 결정한다.
  • v2의 cpu.max가 50000 100000이면 100ms 주기당 총 CPU 시간 50ms를 허용하는 모델이다. RAM 크기나 CPU 코어 고정 배정 값이 아니다.

05혼동하기 쉬운 점과 확인 기준

  • 격리 기능이 있다는 사실만으로 모든 공격이 차단되지는 않는다. 과도한 권한, 호스트 디렉터리 공유, 런타임 제어 소켓 노출은 호스트에 큰 영향을 줄 수 있다.
  • 비밀값을 의 RUN이나 ENV에 넣으면 계층·메타데이터·inspect 결과 등에 남을 수 있으므로 접근이 제한된 파일이나 외부 비밀 관리 방식으로 전달하고 수명을 관리한다.
  • 볼륨 복사도 DB가 쓰는 중이면 일관되지 않을 수 있어 애플리케이션 백업 절차와 연결해야 한다.

06상세 노트 · 실습 자료

헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.

READ · OBSERVE · CONNECT

함께 보는 학습 자료

아래 공식 자료를 본문의 개념·예제와 함께 읽어 보세요. 자료별로 확인할 위치와 관찰할 내용을 적었습니다.

도해

Docker 클라이언트·데몬·레지스트리 구조

architecture 그림에서 CLI가 어느 데몬에 요청하는지 따라간 다음 Example run command의 순서를 읽는다. 가져오기와 생성·시작을 분리해 이해하는 경로다.

읽으면서 확인할 것
  • CLI와 데몬이 같은 호스트에 있어야 하는지
  • ··레지스트리가 각각 보관하는 것
  • 삭제와 외부 저장소 데이터의 수명

공식 문서 · 표준

기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.