먼저 이미지를 받은 뒤 컨테이너를 실행해 보세요.
원리와 활용
Docker 클라이언트·호스트·레지스트리가 명령을 처리하는 과정을 살펴봅니다.
클라이언트가 보낸 요청을 데몬이 처리하고, 필요한 이미지는 레지스트리에서 가져옵니다.
이미지는 컨테이너 생성에 사용하는 읽기 전용 파일시스템과 설정입니다. 컨테이너는 이 이미지로 만든 실행 환경이며, 같은 이미지에서 여러 개를 생성할 수 있습니다.
pull·build·run 명령의 차이를 구분하고, 명령이 전달되는 위치와 이미지 저장 위치를 확인할 때 사용합니다.
Docker 이미지는 여러 읽기 전용 레이어로 구성됩니다. Dockerfile의 파일 변경 작업이 이 레이어를 만듭니다.
원리와 활용
Docker 이미지의 레이어 구성과 빌드 캐시, 멀티스테이지 빌드를 살펴봅니다.
변경되지 않은 앞선 빌드 단계는 재사용하고, 실행에 필요한 파일만 최종 이미지에 포함합니다.
의존성 목록을 소스보다 먼저 복사하면 소스만 바뀔 때 설치 결과를 재사용할 수 있습니다. 빌드용 도구를 별도 단계에 두면 실행 이미지에서 제외할 수 있습니다. 화면의 크기와 시간은 예시입니다.
Dockerfile의 명령 순서를 정하거나 캐시가 무효화되는 이유와 이미지 크기를 줄이는 방법을 이해할 때 사용합니다.
가상 머신 · 별도 게스트 OS 실행
가상 머신은 하이퍼바이저 위에서 게스트 운영체제와 애플리케이션을 실행합니다.
컨테이너 · 호스트 커널 공유
컨테이너는 호스트 커널을 공유하고 애플리케이션과 실행에 필요한 라이브러리를 포함합니다.
원리와 활용
가상 머신과 컨테이너가 운영체제와 커널을 사용하는 방식을 비교합니다.
VM은 별도 게스트 OS를 실행하고, 컨테이너는 호스트 커널을 공유합니다.
컨테이너는 게스트 OS의 부팅 부담을 줄이는 대신 커널을 공유합니다. namespace로 자원의 범위를 구분하고 cgroups로 사용량을 제어하며, 격리 요구에 따라 VM과 함께 사용할 수도 있습니다.
실행 환경의 격리 수준, 시작 비용, 자원 사용과 운영체제 호환성을 비교할 때 활용합니다.
컨테이너는 생성·실행·일시정지·종료·삭제 상태를 거칩니다. 각 명령이 이 상태를 어떻게 바꾸는지 살펴봅니다.
원리와 활용
컨테이너를 생성·시작·일시정지·종료·삭제하는 명령과 상태 변화를 살펴봅니다.
컨테이너 종료는 프로세스를 멈추고, 컨테이너 삭제는 쓰기 레이어까지 제거합니다.
run은 생성과 시작을 함께 수행합니다. stop은 종료 신호를 보낸 뒤 기다리고, 제한 시간이 지나면 강제로 종료합니다. 종료된 컨테이너를 다시 시작하면 기존 쓰기 레이어를 유지합니다.
컨테이너 상태를 확인하거나 종료와 삭제를 구분하고, 보관할 데이터를 어디에 저장할지 판단할 때 사용합니다.
볼륨 없음 · 컨테이너 내부에 저장
볼륨 없이 데이터베이스를 실행하면 데이터 파일은 컨테이너의 쓰기 레이어에 저장됩니다.
볼륨 사용 · 외부 저장소에 연결
볼륨이나 바인드 마운트를 사용하면 컨테이너 외부의 저장소를 내부 디렉터리에 연결할 수 있습니다.
원리와 활용
컨테이너의 쓰기 레이어와 볼륨·바인드 마운트의 데이터 수명을 비교합니다.
컨테이너 교체 후에도 필요한 파일은 컨테이너 외부 저장소에 보관합니다.
이름 있는 볼륨은 Docker가 저장 위치를 관리하고, 바인드 마운트는 호스트 경로를 직접 연결합니다. 컨테이너를 삭제해도 외부 저장소는 별도로 관리할 수 있습니다.
데이터베이스와 업로드 파일을 보관하거나 개발용 소스를 컨테이너와 공유할 때 활용합니다.
사용자 정의 네트워크 app-net에 컨테이너 3개를 연결했습니다. 각 컨테이너는 개별 IP를 사용합니다.
원리와 활용
Docker 네트워크의 이름 기반 연결과 외부 포트 공개를 살펴봅니다.
같은 사용자 정의 네트워크의 컨테이너는 이름으로 연결하고, 외부 접근에는 호스트 포트를 공개합니다.
포트 매핑은 호스트로 들어온 요청을 지정한 컨테이너 포트로 전달합니다. 별도 브리지 네트워크는 기본적으로 서로 격리되며, 필요한 통신만 명시적으로 설정합니다.
여러 컨테이너의 연결 구조를 설계하거나 내부 포트와 외부 접속 포트를 구분할 때 사용합니다.
레지스트리는 이미지의 매니페스트와 레이어를 보관합니다. 매니페스트에는 필요한 레이어의 다이제스트가 기록됩니다.
원리와 활용
이미지를 레지스트리에 업로드하고 배포 서버에서 다운로드하는 과정을 살펴봅니다.
매니페스트로 이미지 구성을 확인하고, 없는 레이어만 전송해 기존 레이어를 재사용합니다.
레이어는 내용의 다이제스트로 식별합니다. 태그는 다른 이미지로 바뀔 수 있지만 다이제스트는 특정 내용을 가리킵니다.
이미지 배포, 태그와 다이제스트의 차이, 반복 배포 시 전송량이 줄어드는 이유를 이해할 때 활용합니다.
여러 컨테이너를 개별 명령으로 실행하면 네트워크와 볼륨 설정도 각각 관리해야 합니다.
원리와 활용
여러 서비스와 네트워크·볼륨을 Compose 파일로 정의해 함께 실행합니다.
같은 실행 구성을 파일에 저장하고 서비스 이름으로 컨테이너를 연결합니다.
depends_on의 시작 순서와 서비스의 실제 준비 상태는 다릅니다. 의존 서비스가 연결을 받을 때까지 기다리려면 상태 검사와 준비 조건을 설정합니다.
웹·API·데이터베이스 등 여러 컨테이너로 구성된 개발 환경과 실행 설정을 관리할 때 사용합니다.