Docker 개념은 자료가 방대하기에 차치하고, 내가 필요한 부분만 정리해보겠다
Docker 개념
Docker 클라이언트 (docker)
- 사용자가 docker와 상호작용하는 기본 메서드
- 사용자가 docker run와 같은 명령을 사용하면 클라이언트가 이 명령을 dockerd에 전송하여 실행
- 이 docker명령은 Docker API를 사용
- Docker 클라이언트는 둘 이상의 데몬과 통신 가능
Docker 데몬 (dockerd)
- Docker 데몬은 Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리
- 데몬은 다른 데몬과 통신하여 Docker 서비스를 관리할 수도 있습니다.
Docker 레지스트리
- Docker 레지스트리는 Docker 이미지를 저장
- Docker Hub는 누구나 사용할 수있는 공용 레지스트리
- Docker는 기본적으로 Docker Hub에서 이미지를 찾도록 구성됨
- 자신의 개인 레지스트리를 실행할 수도 있음
- docker pull 또는 docker run 명령을 사용하면 구성된 레지스트리에서 필수 이미지를 가져옴
- docker push 명령을 사용하면 이미지가 구성된 레지스트리로 푸시됩니다.
Docker 객체
- Docker를 사용하면 이미지, 컨테이너, 네트워크, 볼륨, 플러그인 및 기타 객체를 생성하고 사용
- 이 섹션은 이러한 개체 중 일부에 대한 간략한 개요
Docker 이미지
- 도커 컨테이너를 만들기 위한 읽기 전용 템플릿
- 대부분 이미지는 몇 가지 추가 사용자 정의와 함께 다른 이미지를 기반으로 구성
- 자신의 이미지를 만들거나 다른 사람이 만들고 레지스트리에 게시 한 이미지만 사용할 수 있음
- 고유한 이미지를 빌드하려면 이미지를 만들고 실행하는 데 필요한 단계를 정의하는 간단한 구문으로 Dockerfile 을 만들어야 한다.
- Dockerfile의 각 명령어는 이미지에 레이어를 만듦
- Dockerfile을 변경하고 이미지를 다시 빌드하면 변경된 레이어만 다시 빌드
- 이것은 다른 가상화 기술과 비교할 때 이미지를 매우 가볍고, 작고, 빠르게 만드는 요소의 일부임
Docker 컨테이너
- 컨테이너는 이미지의 실행 가능한 인스턴스를 의미
- Docker API 또는 CLI를 사용하여 컨테이너를 생성, 시작, 중지, 이동 또는 삭제할 수 있음
- 컨테이너를 하나 이상의 네트워크에 연결하거나, 스토리지를 연결하거나, 현재 상태를 기반으로 새 이미지를 만들 수 있음.
- 기본적으로 컨테이너는 다른 컨테이너 및 호스트 시스템과 비교적 잘 격리되어 있음.
- 컨테이너의 네트워크, 스토리지 또는 기타 기본 하위 시스템이 다른 컨테이너 또는 호스트 시스템에서 분리되는 방식을 제어 할 수 있음.
- 컨테이너는 이미지와 사용자가 생성하거나 시작할 때 제공하는 구성 옵션에 의해 정의됨.
- 컨테이너가 제거되면 영구 저장소에 저장되지 않은 상태 변경 사항이 사라짐
(영구 저장소에 저장된 채로 리빌딩 시, 원하는 결과가 나오지 않을 수 있음)
Docker Architecture
- Docker 클라이언트는 Docker 컨테이너를 빌드, 실행 및 배포하는 무거운 작업을 수행하는 Docker 데몬과 통신
- Docker 클라이언트와 데몬은 동일한 시스템에서 실행되거나 Docker 클라이언트를 원격 Docker 데몬에 연결할 수 있음
- Docker 클라이언트와 데몬은 UNIX 소켓 또는 네트워크 인터페이스를 통해 REST API를 사용하여 통신
- 또 다른 Docker 클라이언트는 Docker Compose로, 컨테이너 세트로 구성된 애플리케이션으로 작업 할 수 있음
Docker command
$ docker run -i -t ubuntu /bin/bash
위의 명령을 실행하면 다음 과정이 발생 (기본 레지스트리 구성을 사용하고 있다고 가정)
1. ubuntu 로컬에 이미지가 없는 경우 docker pull ubuntu 명령을 실행 한 것처럼 구성된 레지스트리에서 이미지를 가져옴
2. Docker는 docker container create 명령을 실행 한 것처럼 새 컨테이너를 생성
3. 읽기-쓰기 파일 시스템을 최종 레이어로 컨테이너에 할당
- 이를 통해 실행중인 컨테이너는 로컬 파일 시스템에서 파일과 디렉토리를 만들거나 수정할 수 있음
4. Docker는 네트워킹 옵션을 지정하지 않았으므로 컨테이너를 기본 네트워크에 연결하는 네트워크 인터페이스를 생성
- 여기에는 컨테이너에 IP 주소 할당이 포함된다.
- 기본적으로 컨테이너는 호스트 머신의 네트워크 연결을 사용하여 외부 네트워크에 연결할 수 있음.
5. Docker는 컨테이너를 시작
- /bin/bash : 컨테이너가 대화형으로 실행되고 터미널에 연결되어 있기 때문에 ( -i및 -t 플래그 로 인해 ) 출력이 터미널에 기록되는 동안 키보드를 사용하여 입력을 제공할 수 있음.
- exit : 명령을 종료하기 위해 입력하면 컨테이너가 중지되지만 제거되지는 않음
'IT_Study > Ops' 카테고리의 다른 글
[MLOps] Kubeflow 계정 관리, PV와 PVC 개념 (0) | 2023.11.01 |
---|---|
[MLOps] AWS EC2 Ubuntu 환경에서 Kubeflow 세팅 방법 (1) | 2023.11.01 |
[MLOps] 코드 품질 관리(Quality Control) 관련 개념 (0) | 2023.10.30 |
[MLOps] Kubeflow 개요 : 아키텍쳐 및 파이프라인 이해 (1) | 2023.10.27 |
[MLOps] Machine Learning Pipeline에 대한 이해 (2) (0) | 2023.10.26 |