Containerization Part.1 - 도커 시작하기
docker docs 의 Orientation and setup 을 정리한 글입니다.
시작하기
터미널에서 다음 명령을 실행합니다:
docker run -dp 80:80 docker/getting-started
- 명령에 포함된 플래그에 대한 설명입니다:
d
: 컨테이너를 detached mode(background) 에서 실행합니다p 80:80
:{호스트 포트}:{컨테이너 포트}
형식으로
호스트 포트 80 을 컨테이너 포트 80 에 매핑하여 컨테이너를 노출(expose)합니다.docker/getting-started
- 사용할 이미지입니다.
컨테이너를 확인하기 위해 브라우저에서 다음 URL을 오픈합니다:
http://localhost
컨테이너란?
간단히 설명하면, 컨테이너는 호스트 시스템의 다른 프로세스들과 격리된 시스템의 샌드박스 프로세스입니다.
이 격리(Isolation)는 Linux 의 Kernel namespaces 및 cgroups 기능을 활용합니다.
컨테이너를 요약하면:
- 이미지의 실행 가능한 인스턴스입니다.
Docker API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있습니다. - 로컬 머신, 가상 머신에서 실행하거나 클라우드에 배포할 수 있습니다.
- 이식 가능(모든 OS에서 실행 가능)합니다.
- 컨테이너는 서로 격리되어 있으며 자체 소프트웨어, 바이너리 및 구성을 실행합니다.
컨테이너 처음부터 만들기
Aqua Security의 Liz Rice는 Go에서 컨테이너를 처음부터 어떻게 만드는 지에 대해 강연을 했습니다.
이 강연은 네트워킹, 파일 시스템용 이미지 사용 및 기타 고급 주제에 대해 다루지 않지만 작동 방식에 대한 환상적인 심층 분석을 제공합니다.
Namespace
는 특정 프로세스 집합이 특정 리소스 집합을 볼 수 있도록 커널 리소스를 분할하는 Linux 커널의 기능입니다.
From: Linux namespaces
컨테이너 이미지란?
컨테이너를 실행할 때 격리된 파일 시스템을 사용합니다.
이 커스텀 파일 시스템은 컨테이너 이미지에 의해 제공됩니다.
이미지에는 컨테이너의 파일 시스템이 포함되어 있으므로 앱을 실행하는 데 필요한 모든 것(모든 종속성, 구성, 스크립트, 바이너리 등)이 포함되어야 합니다. 또 이미지에는 환경 변수,
실행할 기본 명령, 및 기타 메타데이터와 같은 컨테이너에 대한 다른 구성도 포함되어 있습니다.
Info:
chroot
에 익숙하다면 컨테이너를chroot
의 확장 버전으로 생각하세요.
파일 시스템은 단순히 이미지에서 가져옵니다.
하지만, 컨테이너는chroot
를 사용할 때는 없었던 추가 격리를 제공합니다.
댓글남기기