본인 설치환경 :

OS : Ubuntu 18.04.5 LTS

CUDA : 11.1

Docker 20.10.6

nVidia-docker: https://github.com/NVIDIA/nvidia-docker


1. Deepo 이미지 설치


딥러닝 / 머신러닝 라이브러리 다수 포함한 이미지 (Jupyter Lab은 미설치)


$ docker pull ufoym/deepo


설치 확인


$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
...
ufoym/deepo         all-py36-cu101      5d5a5c342dbf        2 weeks ago         13.3GB
ufoym/deepo         latest              5d5a5c342dbf        2 weeks ago         13.3GB
...


2. Docker Container 실행


$ docker run -p {접속할 포트 번호}:8888 --gpus all -it -v {host-dir}:{container-dir} ufoym/deepo bash


  • run: 도커 실행 명령어
  • “-p 8888:8888”: 컨테이너의 8888번 포트를 호스트 OS 8888번 포트로 포워딩
  • -gpus all”: 컨테이너의 gpu를 사용
  • “-it”: 인터랙티브 터미널을 사용 (컨테이너 내에서 명령어 사용 가능해짐. 반대로 터미널로 접속 없이 외부에서 명령어 내릴땐 exec)
  • “-v {host-dir}:{container-dir}”: 호스트와 컨테이너가 각각 공유용으로 사용할 폴더
  • “bash”: 터미널에서 실행할 명령어


3. Jupyter Lab 설치


$ pip install jupyterlab   ## 터미널 내부에서 설치할 때
$ docker exec -it {container-name} pip install jupyterlab  ## 터미널 외부에서 설치할때


4. Jupyter Lab 실행


$ jupyter lab --ip 0.0.0.0 --port 8888 --allow-root --no-browser &


5. 변경사항이 반영된 이미지를 새로 저장


$ docker ps  ## 실행중인 도커 컨테이너 아이디 확인
$ docker commit {container-id} {new-image-name}
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
{new-image-name}    latest              19ea1eeb6d17        2 hours ago         13.3GB 
ufoym/deepo         all-py36-cu101      5d5a5c342dbf        2 weeks ago         13.3GB
ufoym/deepo         latest              5d5a5c342dbf        2 weeks ago         13.3GB


6. 도커 컨테이너 및 주피터 백그라운드 / 포그라운드 조작


  • 컨테이너 실행 유지하면서 인터랙티브 터미널 빠져나오기(deattach) : ctrl+p 후 ctrl+q
  • 컨테이너로 다시 접속(attach) :
    $ docker attach {container-id}
    
  • 컨테이너 종료 :
    $ exit
    
  • 주피터랩 백그라운드 전환 : ctrl+z (이 경우 프로세스는 일시정지 상태)
  • 백그라운드 프로세스 목록 확인 :
    $ jobs
    
  • 정지된 프로세스 백그라운드에서 실행 :
    $ bg  ## 모든 정지된 프로세스 전부 백그라운드 전환
    $ bg {num}  ## 특정 번호의 프로세스만 백그라운드 전환
    
  • 백그라운드 프로세스 포그라운드로 전환 :
    $ fg % {num}
    
  • 백그라운드 프로세스 PID 조회 및 강제 종료:
    $ ps -ef|grep {process}  ## PID 조회
    $ kill -9 {PID}  ## 강제종료
    $ kill -9 `ps -ef|grep {process}`  ## 한번에
    


출처 :