빠른 Docker 입문 (아주 빠른 딥러닝 실행환경 구축 방법)
Docker를 써야하긴 써야겠는데 뭔지 잘 모르겠고 일단 아주 간단하고 빠르게 환경 구축이 필요한 사람들을 위한 포스팅
사실 Docker를 공부할 때 아주 간단한 개념정도만 알아두고 직접 사용해가면서 불편하거나 필요한 기능이 있을 때 그때그때마다 검색해가며 배우는 게 제일 효율적이라고 생각합니다.
책이나 유튜브 강의도 좋지만.... 우린 시간이 많이 없잖아요.
1. 도커란?
도커가 무엇인지 자세히 알아두는 건 중요합니다! 그래야 도커를 쓸 수 있습니다.
하지만 이 포스팅은 일단 빠르게 환경 구축하는 방법을 포스팅하므로 간단하게 VMware, virtual box의 경량화 버전 이런느낌으로만 설명하고 넘어가겠습니다.
2. 도커 이미지 다운로드
Docker hub : https://hub.docker.com
아래 사이트에서 필요한 프로그램(OS포함)을 검색해 명령어로 이미지를 다운합니다.
docker pull pytorch (별도 태그가 없으면 lastest를 가져옵니다)
Docker Hub Container Image Library | App Containerization
Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.
hub.docker.com
이 포스팅에서는 pytorch/pytorch:2.4.1-cuda12.1-cudnn9-devel 를 다운받았음.
3. 도커 컨테이너 실행
sudo docker run -it --gpus all -v (local file):(docker file) pytorch/pytorch:2.4.1-cuda12.1-cudnn9-devel
deep learning 학습을 위해선 GPU가 거의 필수 (--gpus all)
-> 예전엔 nvidia-docker를 설치해야하지만 docker version 19.0.2? 이 버전 이상부터는 자동 지원한다고 합니다.
따라서 최신 버전을 사용하는 사람들은 nvidia-driver정도만 로컬에 설치하면됩니다.
-v (local file):(docker file)-> 로컬 파일시스템과 도커 컨테이너 파일시스템을 매핑.
(도커 컨테이너에서 파일 수정하면 로컬 파일시스템의 파일도 수정됨)
4. bash shell 시작
exit로 컨테이너를 닫고 나오면 docker ps가 exited로 되있습니다.
따라서
docker start {Container_ID}
로 컨테이너를 실행해주고
docker exec -it {Container_ID} bash
로 bash shell를 실행해주면 bash shell 이 실행됩니다.
5. docker container, image 관리
docker 컨테이너 중지/재시작
docker stop/start {Container_ID}
docker 컨테이너 삭제
docker rm {Container_ID}
docker 이미지 삭제
docker rmi {Image ID}
docker 컨테이너를 image로 저장하기
docker commit {Container_ID} {Image name} [:tag]
6. 만든 docker image를 Docker Hub에 Push
1. docker login --username = {DockerHub_Username}
2. docker tag {Image name} {DockerHub_Username} / {Repository Name} [:tag]
-> DockerHub_Username과 Repository 명이 docker image와 같아야함!
3. docker push {DockerHub_Username}/{Repository Name} [:tag]
성공!
6.1 Docker hub에 올리지 않고 scp등을 활용해 옮길 경우
docker save -o {path for generated tar file} {image_name}
(파일 옮기기)
docker load -i {path to image tar file}
References
https://www.youtube.com/watch?v=Ur9nssvw4Sk