도커(Docker) 이미지 생성

Heetae Han·2022년 5월 29일
1

도커

목록 보기
2/2
post-thumbnail

docker 이미지 생성 방법

이미지 생성 방법은 다음과 같은 3가지가 존재합니다.
또한 이미지 생성에 있어 우분투 환경에서 docker와 CUDA, nvidia driver 및 toolkit(docker)가 설치되어 있는 환경이라고 가정합니다.

1. 기본 이미지로 컨테이너 생성

베이스 이미지를 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

컨테이너 생성 옵션

OptionDescription
-itIterative Terminal. Container 종료 없이 탈출 가능
–name, -nContainer의 이름을 지정한다. 안 쓰면 nice_spence 같은 임의의 이름으로 생성된다.
–volume, -vContainer와 공유할 디렉토리를 지정한다. -v <외부 Dir>:<컨테이너 Dir> 형식으로 쓴다. 파일 생성/수정/삭제가 동기화된다.
–gpus allContainer 내부에서 GPU를 쓸 수 있도록 한다. nvidia toolkit이 설치되어 있어야 한다.
/bin/bashContainer 생성 시 시작할 프로세스이다. bash의 설치 위치에 따라 적당히 변경하면 된다.

컨테이너 생성 후 docker ps 명령어로 확인을 할 수 있습니다.

docker ps
docker ps -a
docker ps -l

컨테이너를 실행 후 torch를 import하여 확인하면 정상적으로 작동이 됩니다.


2. commit를 이용해서 이미지 생성하기

docker commit이란?

일반적으로 도커 컨테이너 상에서 작업한 내용들은 컨테이너가 종료되면 함께 사라집니다. 따라서 도커 컨테이너 상에서 작업한 내용을 이미지로 커밋(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 하여 저장합니다.

  1. 실행 중인 도커 컨테이너를 종료합니다.
  2. 종료된 도커 컨테이너의 ID를 확인합니다.
  3. COMMIT 명령을 입력하여 종료된 도커 컨테이너 상태 그대로의 이미지를 생성합니다.
docker commit [CONTAINER ID] [IMAGE NAME]

명령어 입력

docker commit 1cf77110bcc1 pytorch-test:new-version

new-version 이라는 새로운 이미지가 생성됩니다. 그 후에 run을 하여 컨테이너 상으로 접속하면 작업했던 내용을 그대로 확인할 수 있습니다.


3. Dockerfile를 만들어 이미지 커스터마이징 하기

Dockerfile는 컨테이너에 필요한 패키지, 소스코드 등을 기록해둔 파일로 빌드를 하면 도커 이미지가 생성됩니다.
가장 많이 쓰는 방법입니다. 이미지 생성 방법 기록 + 배포 측면에서 더 유리합니다.

  1. Dockerfile 만들기
    위에서 pytorch 이미지를 pull로 다운 받고 이미지에 접속하여 컨테이너 상에서 jupyter를 설치 후 웹으로 접속하여 확인을 했지만 이번에는 도커 파일을 만들어서 바로 접속을 해보겠습니다.
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"]
  1. Dockerfile 이미지 build 후 Run
docker build -t pytorch-test:2.0 .
docker run --name pytorch-test-2 -p 8880:8888 -d -it pytorch-test:2.0

  1. log를 확인하여 token 비밀번호 복사 후 웹에서 접속
  1. dockerfile 수정 후 jupyterlab으로도 접속하여 확인
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

profile
성장하는 애기 개발자~

0개의 댓글