Environment: Ubuntu 18.04
1. Docker란?
Docker는 GO 언어로 작성되어 있으며 애플리케이션 deployment를 자동화하기 위한 도구입니다. 그럼 애플리케이션 자동화는 어떻게 하느냐? 바로 container를 통해 가능한데요. 컨테이너(container)는 docker engine으로부터 생성 가능하고 컨테이너에 여러 기능을 추가하여 application을 쉽게 사용가능하게 합니다.
정리하면, Docker Engine이 컨테이너를 생성 및 관리하는 주체가 될 것이며 컨테이너는 library, code, runtime 등 소프트웨어 및 애플리케이션을 구동시키는 하나의 서버처럼 작동합니다.
Docker는 가상머신(환경)과 많이 비교되는 데요. 기존의 가상머신은 host Operating System(OS)를 가지므로 엄청 무겁습니다. 하지만 Docker는 host OS를 공유(share)하기 때문에 가볍다는 장점을 가지죠. 그래서 요즘 docker를 많이 씁니다!
Docker의 필요성에 대한 예시로 AI개발자들은 겪어 봤을 예시를 하나 알려드립니다.
- Docker를 사용하지 않은 경우
- 'A'라는 개발자가 자신의 Host OS에 library(pytorch 1.7, cuda 10.1 cuddn 7.1)을 설치하여 code를 작성하고 AI 모델을 학습했습니다. 그리고 github에 해당 code를 올리게 됩니다.
- 'B'라는 개발자가 'A'가 github에 배포한 코드를 실행하려면 위에서 언급된 pytorch, cuda, cuddn이 필요하게 되죠. Docker가 없다면 해당 개발자는 'A'가 환경 설정한대로 설치를 해야 code가 실행됩니다.
- 환경이 조금이라도 다르게 설치가 되었다면 'B'는 코드를 실행해보지 못합니다.
- Docker를 사용한 경우
- 'A'가 위에서 언급된 library들을 docker container안에서 설치를 하였고 docker image형태로 code와 함께 github에 올립니다.
- 'B'는 code와 docker image를 다운받습니다. 먼저 docker image를 build하면 docker container가 생성되고 그 안에는 code를 돌리기 위해 필요한 lib이 모두 설치되어있습니다.
- 'B'는 lib설치 없이 container안에서 'A'의 코드를 실행하게 됩니다.
이 외에도 다음과 같은 이유로 Docker를 사용하게 됩니다.
2. Docker의 필요성
- application 개발과 배포의 편의성
- container안에서 software을 설치하고 설정 파일을 수정해도 Host OS에는 영향을 끼치지 않음.
- container안에서 여러 작업을 하고나서 이를 운영 환경에 배포하려고 할때 docker image라는 패키지로 만들어 전달만 하면 됨.
- 해당 container안의 환경 및 파일들을 다른 서버에서 똑같이 복제 가능해서 개발/운영 환경의 통합이 유연
- 여러 application의 독립성과 확장성
- 여러 모듈을 독립된 형태로 구성하기 때문에 언어에 종속되지 않고 변화에 빠르게 대응, 각 모듈의 관리가 쉬워짐.
- 웹서비스에서 database container와 web server container를 분리
3. Docker engine 설치
위에서 언급드린 대로 저는 docker Engine과 가장 호환이 잘되는 ubuntu(18.04) 64bit를 사용합니다.
다음 명령어를 통해 docker engine을 설치합시다.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-get install docker-ce
잘 설치 되었다면 다음과 같이 버전 확인이 가능합니다.
다음글에서는 docker engine을 설치하였으므로 docker engine에 더 이해하고 docker engine을 통해 컨테이너(container)를 만드는 방법을 알려드리도록하겠습니다.
'AI Engineering > MLOps' 카테고리의 다른 글
Docker/Kubernetes - (6) Docker daemon (0) | 2022.03.15 |
---|---|
Docker/Kubernetes - (5) Dockerfile (0) | 2022.03.14 |
Docker/Kubernetes - (4) docker image 이해 및 배포 (0) | 2022.03.14 |
Docker/Kubernetes - (3) docker container 네트워크/로깅/제한 (0) | 2022.03.13 |
Docker/Kubernetes - (2) Docker image/container (0) | 2022.03.12 |