이미지 생성 방법은 다음과 같은 3가지가 존재합니다.
또한 이미지 생성에 있어 우분투 환경에서 docker와 CUDA, nvidia driver 및 toolkit(docker)가 설치되어 있는 환경이라고 가정합니다.
베이스 이미지를 pull 하여 이미지를 얻을 수 있습니다. 예를 들어 pytorch로 컨테이너를 생성하고 싶으면, 터미널창에서 search로 찾아도 되고 도커 허브로 접속하여 해당 이미지를 찾을 수 있습니다.
docker search pytorch
docker pull pytorch/pytorch
별이 가장 많은 첫번째로 pull을 하여 이미지를 다운 받아 오겠습니다.
pull로 이미지를 다운 받은 후 docker images / docker images 이미지이름 으로 확인 하시면 됩니다.
docker images
docker images 이미지 이름
하지만 자신의 CUDA 버전에 맞는 토치 버전을 포함하는 도커 이미지를 다운받아야 합니다.
여기 또는 여기 확인하면 되고 CUDA 버전은 nvidia-smi로 확인 가능합니다.
docker pull pytorch/pytorch:1.9.0-cuda10.2-cudnn7-runtime
다운 받은 이미지로 컨테이너를 생성하여 pytorch를 사용해보겠습니다.
docker run -it --gpus all --name pytorch-test pytorch/pytorch:1.9.0-cuda10.2-cudnn7-runtime /bin/bash
Option | Description |
---|---|
-it | Iterative Terminal. Container 종료 없이 탈출 가능 |
–name, -n | Container의 이름을 지정한다. 안 쓰면 nice_spence 같은 임의의 이름으로 생성된다. |
–volume, -v | Container와 공유할 디렉토리를 지정한다. -v <외부 Dir>:<컨테이너 Dir> 형식으로 쓴다. 파일 생성/수정/삭제가 동기화된다. |
–gpus all | Container 내부에서 GPU를 쓸 수 있도록 한다. nvidia toolkit이 설치되어 있어야 한다. |
/bin/bash | Container 생성 시 시작할 프로세스이다. bash의 설치 위치에 따라 적당히 변경하면 된다. |
컨테이너 생성 후 docker ps 명령어로 확인을 할 수 있습니다.
docker ps
docker ps -a
docker ps -l
컨테이너를 실행 후 torch를 import하여 확인하면 정상적으로 작동이 됩니다.
일반적으로 도커 컨테이너 상에서 작업한 내용들은 컨테이너가 종료되면 함께 사라집니다. 따라서 도커 컨테이너 상에서 작업한 내용을 이미지로 커밋(commit)하여 나중에 해당 이미지로부터 다시 컨테이너를 실행함으로써 작업했던 내용을 다시 사용할 수 있습니다.
pytorch 이미지를 다운받아 실행 시킨 컨테이너를 다시 실행 시킨 후 추가적으로 필요한 jupyter notebook 패키지를 설치해줍니다.
docker run -itd --name pytorch-test3 -v /home/user/Downloads/check:/root/check -p 8888:8888 --gpus all pytorch/pytorch
위에서 표로 설명했지만 다시 한번 말하자면 -v 옵션은 볼륨 마운트로 컨테이너 디렉토리와 내 로컬 디렉토리의 공유를 지정해줍니다.
/home/user/Downloads/chek 부분이 내가 가지고 있는 로컬 디렉토리이며 : 다음으로 지정한 /root/check는 컨테이너 디렉토리 입니다.
-p 옵션은 local host의 8888 포트와 컨테이너의 8888 포트를 연결해준다는 의미입니다. 만약 포트 연결 작업을 하지 않으면 jupyter notebook이 오류가 납니다.
conda install jupyter
jupyter notebook을 설치 한 후 완료가 되면 웹브라우져와 연결해줍니다.
jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root
위 사진에 보이는 127.0.0.1:8888 또는 localhost:8888로 접속하여 token 번호를 입력하고 들어가면 jupyter notebook을 웹으로 접속 하실수 있습니다.
웹에 접속하여 파일을 만들고 똑같이 torch를 import하여 확인하면 정상적으로 작동이 됩니다.
이제 내가 만들어놓은 이미지를 COMMIT 하여 저장합니다.
docker commit [CONTAINER ID] [IMAGE NAME]
명령어 입력
docker commit 1cf77110bcc1 pytorch-test:new-version
new-version 이라는 새로운 이미지가 생성됩니다. 그 후에 run을 하여 컨테이너 상으로 접속하면 작업했던 내용을 그대로 확인할 수 있습니다.
Dockerfile는 컨테이너에 필요한 패키지, 소스코드 등을 기록해둔 파일로 빌드를 하면 도커 이미지가 생성됩니다.
가장 많이 쓰는 방법입니다. 이미지 생성 방법 기록 + 배포 측면에서 더 유리합니다.
FROM pytorch/pytorch:1.9.0-cuda10.2-cudnn7-runtime
RUN apt-get update && pip install jupyter
CMD ["jupyter", "notebook", "--allow-root", "--ip", "0.0.0.0"]
docker build -t pytorch-test:2.0 .
docker run --name pytorch-test-2 -p 8880:8888 -d -it pytorch-test:2.0
FROM pytorch/pytorch:1.9.0-cuda10.2-cudnn7-runtime
RUN apt-get update && pip install jupyterlab
CMD ["jupyter", "lab", "--allow-root", "--ip", "0.0.0.0"]
docker build -t pytorch-test:1.0 .
docker run --name pytorch-test-1 -p 8800:8888 -d -it pytorch-test:1.0