[MLOps] 01 Docker Basic
Docker
Build Once, Run Anywhere
container는 격리된 환경에서 프로세스를 실행시킬 수 있는 기술이며, containerization은 모델을 container화하는 기술입니다. 즉, container화를 통해 우리는 프로그램의 코드를 새로 작성하지 않아도 여러 환경에서 코드가 작동되게 할 수 있으므로, 실험 환경에서 개발된 머신러닝 모델이 서비스 환경에서도 작동할 수 있으며, 나아가 컴퓨터의 운영 체제에 상관 없이 실행 가능한 단일한 소프트웨어를 만들 수 있겠습니다. Docker는 이러한 container을 만들고 사용할 수 있도록 하는 containerization 기술 중 하나입니다.
Dockerfile, Docker image, Docker container
Docker image는 어떠한 애플리케이션에 대하여, 단순히 그 애플리케이션의 코드 뿐만 아니라 관련한 모든 것을 함께 패키징한 데이터를 담고 있습니다. 이러한 Docker image를 만들기 위해서는 Dockerfile을 필요로 하는데, Dockerfile은 container을 실행하는 데 필요한 파일과 설정값 등을 포함하고 있습니다. 이 파일을 빌드하여 Docker image를 만들 수 있습니다.
Docker container는 Docker image를 실행한 상태입니다. image로 container를 생성하면, image에서 명시된 바에 따라 시스템 자원 및 네트워크를 사용할 수 있는 독립된 공간이 형성됩니다.
Docker image와 container의 관계는 음식의 레시피와 레시피에 따라 만든 음식에 비유할 수 있습니다. Docker image가 레시피라면, container는 image라는 레시피에 따라 만든 음식입니다. 하나의 레시피로 여러 번 음식을 만들 수 있듯, 하나의 image로 여러 개의 container를 만들 수 있습니다. 또한, 레시피를 수정해도 이미 만든 음식에는 영향을 주지 않는 것처럼, container를 생성한 후에 image를 수정하여도 이미 실행 중인 container에는 영향을 주지 않습니다.
Docker Hub, Docker Registry
Docker hub와 Docker registry는 Docker image를 다른 사람들과 공유할 수 있도록 하는 ‘Docker image 저장소’입니다. 이 둘은 Docker image를 저장하고 사용자들이 pull, push할 수 있도록 한다는 같은 목적을 가진 프로그램이나, 사용자 범위에서 그 차이가 드러납니다.
먼저 Docker hub는 Docker hub에서 제공하는 public한 repository로, 누구든지 Docker hub에 image를 pull 및 push할 수 있습니다.
Docker registry는 Docker hub에서 제공하는 ‘registry’라는 container를 통해 생성할 수 있는 private한 image 저장소로, 제한된 사용자 사이에서만 image를 공유할 수 있도록 합니다.