1. 도커 설치 및 초기설정
(해당 과정은 Docker가 설치되어 있지 않을 때 하시면 됩니다. 설치되어 있다면 2번으로 이동 !)
1.1. 도커 설치
$ curl -fsSL https://get.docker.com/ | sudo sh
설치가 불가능 하다면,
1.1.1. 도커 제거
$ sudo apt-get remove docker docker-engine docker.io containerd runc
1.1.2 관련 apt 설치 & docker official GPG key 추가
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
$ sudo apt-get update
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
1.1.3 docker repository 추가
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
ModuleNotFoundError: No module named 'apt_pkg' 에러가 뜨면 Python 기본 버전을 잠시 바꿔줬다가 해봅니다.
$ update-alternatives --set python3 /usr/bin/python3.5
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ update-alternatives --set python3 /usr/bin/python3.6
경우에 따라 3.5 대신 다른 버전일 수 있습니다. sudo update-alternatives --config python3 으로 버전을 확인합니다.
1.1.4 도커 설치
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
특정 버전 설치는 apt-cache madison docker-ce로 버전을 확인 후 sudo apt-get install docker-ce= docker-ce-cli= containerd.io와 같이 설치하자.
1.2. 도커 권한 설정
$ sudo usermod -aG docker $USER # 현재 접속중인 사용자에게 권한주기
$ sudo usermod -aG docker oem # oem 사용자에게 권한주기
1.3. Nvidia Toolkit 설치
도커 컨테이너 내에서 GPU를 사용할 수 있도록, Host(Local) GPU Driver와 Docker Container를 연동시켜주는 NVIDIA-Docker를 설치합니다.
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
$ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
$ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker
1.3.1. GPU 확인
CUDA 11 기준 다음 명령어를 통해 GPU 할당 여부를 확인할 수 있습니다.
$ docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
2. 이미지 및 컨테이너 다루기
2.1. 도커 Image 다운
다음 명령어를 통해 Host(Local)의 pytorch 버전을 확인 할 수 있습니다.
$ nvidia-smi
$ nvcc -V
# version 8 이전
$ cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
# version 8 이후
$ cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
Host(Local)에 맞는 torch 버전, cudnn 버전의 설치 명령어를 도커 허브에서 찾아 설치해줍니다.
(저의 경우 pytroch 1.7.1 & cuda 11.0 & cudnn 8 을 사용하였습니다 - GTX3090)
$ docker pull pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime
참고

2.2. 다운 받은 Images 확인
$ docker images
2.3. 다운 받은 Image 삭제
Image를 잘못 다운 받았을 때 다음 명령어를 통해 삭제가 가능합니다.
$ docker rmi -f <Image ID>
2.4. 컨테이너 실행하기
$ sudo docker run -d -it --name [컨테이너 이름] --gpus all --ipc=host -v [로컬 디렉토리]:/workspace -p 8888:8888 [실행할 이미지]
$ sudo docker run -d -it --name pytorch --gpus all --ipc=host -v /home/test:/workspace -p 8888:8888 pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime
서비스 배포가 아닌 실험환경 구축이 목적이기 때문에 Container를 사용자 폴더에 mount 시키도록 하겠습니다.
그리고 사용자별로 다른 Container를 사용할 수 있기 때문에 port도 지정해두도록 하겠습니다.
- -d : 백그라운드에서 실행
- --name : 컨테이너 이름 지정
- --gpus : 사용할 gpu 할당
- --ipc : numworker 사용
- --mount type=bind,source=(우분투 폴더 절대경로),target=(Container에서의 작업 경로)
- -v [Ubuntu(Local) 작업 경로]/[Container에서의 작업 경로]
- -p : 포트 포워딩 \(\rightarrow\) jupyter를 사용하기 위해 8888로 설정
- python -m http.server : docker를 background에서 실행할 명령어
2.5. 도커 볼륨 생성 및 확인
$ docker volume [볼륨 이름]
$ docker volume ls
$ docker volume inspect [볼륨 이름]
2.6. 컨테이너 상태 확인
$ docker ps -a
2.7. 도커 내부 접속하기
$ docker exec -it [CONTAINER NAME] bash
2.8. GPU 동작 확인
$ python
>>> import torch
>>> torch.cuda.is_available()
3. Docker Hub에 업로드하기
3.1. Docker Hub 로그인
$ docker login
User name : gukss # 이메일이 아니라 사용자명 입니다.
Password : # 로그인 -> Account Setting -> Access Tokens 발급 코드
3.2. 이미지화 하기 전 컨테이너 중단
$ docker stop [컨테이너 이름]
3.3. 배포할 컨테이너 이미지화
$ docker commit [컨테이너 이름] [hub ID]/[image명]:[tag]
3.4. 이미지 업로드
$ docker push [hub ID]/[image명]:[tag]
내가 사용할 것 정리
1. pytorch & jupyter lab images \(\rightarrow\) container
$ sudo docker run -d -it --name [컨테이너 이름] --gpus all --ipc=host -v [서버 디렉토리]:/workspace -p 8888:8888 [컨테이너 이름] jupyter lab --allow-root
2. bash 접속
$ docker exec -it [컨테이너 이름] bash
3. 생성한 Container Start
$ docker container start [컨테이너 ID]
4. 생성한 Container Remove
$ docker rm -f [컨테이너 ID]
[추천] Dockerfile 세팅
2.1 까지 진행 후 다음을 진행하면 된다.
1. Dockerfile 생성
$ vim Dockerfile
# Dockerfile
FROM pytorch/pytorch:1.7.1-cuda11.0-cudnn8-runtime
# Remove any third-party apt sources to avoid issues with expiring keys.
RUN rm -f /etc/apt/sources.list.d/*.list
# Install some basic utilities & python prerequisites
RUN apt-get update -y && apt-get install -y --no-install-recommends\
wget \
vim \
curl \
ssh \
tree \
sudo \
git \
libgl1-mesa-glx \
libglib2.0-0 \
zip && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Set up time zone
ENV TZ=Asia/Seoul
RUN sudo ln -snf /usr/share/zoneinfo/$TZ /etc/localtime
# Set Jupyter
RUN python -m pip install --upgrade pip && \
pip install jupyter && \
pip install jupyterlab
RUN jupyter notebook --generate-config
RUN echo "c.NotebookApp.password = u'sha1:5799b6a14b52:06b42abb34e2349370b37e014f0f608b6d61c099'" >> /root/.jupyter/jupyter_notebook_config.py
RUN echo "c.NotebookApp.ip = '0.0.0.0'" >> /root/.jupyter/jupyter_notebook_config.py
RUN echo "c.NotebookApp.allow_root = True" >> /root/.jupyter/jupyter_notebook_config.py
RUN echo "c.NotebookApp.open_browser = False" >> /root/.jupyter/jupyter_notebook_config.py
RUN echo "c.NotebookApp.password_required = True" >> /root/.jupyter/jupyter_notebook_config.py
RUN echo "c.NotebookApp.use_redirect_file = False" >> /root/.jupyter/jupyter_notebook_config.py
여기서 주의할 점은 jupyter notebook의 password 형식을 'sha1' 알고리즘으로 생성해야 한다. 'argon2' 알고리즘 방식으로 생성 후 적용하면 비밀번호를 틀렸다고 출력한다.
$ python
>>> from notebook.auth import passwd
>>> passwd('비밀번호', 'sha1')
'sha1:~'
또한, 자신의 서버에 맞는 pytorch 버전을 찾아야 한다.
2. Dockerfile \(\rightarrow\) Docker Image
$ docker build -t [이름]:[태그] .
3. 컨테이너 생성
$ sudo docker run -d -it --name [CONTAINER NAME] --gpus all --ipc=host -v [LOCAL DIR]:/workspace -p 8888:8888 [IMAGE NAME]:[IMAGE TAG] jupyter lab --allow-root
$ sudo docker run -d -it --name [CONTAINER NAME] --gpus '"device=1"' --ipc=host -v [LOCAL DIR]:/workspace -p 8888:8888 [IMAGE NAME]:[IMAGE TAG] /bin/bash
참고
https://greeksharifa.github.io/references/2021/06/21/Docker/
Python, Machine & Deep Learning
Python, Machine Learning & Deep Learning
greeksharifa.github.io
https://pebpung.github.io/development/2022/01/11/Docker-1.html
Docker로 쾌적한 딥러닝 실험 환경 구성하기 · ML감자
1. Docker의 이해와 설치 방법
pebpung.github.io
딥러닝 개발환경 세팅기(Docker, PyCharm) (1)
딥러닝 실험환경을 구축하고 관리하기 가장 쉬운 방법을 정리하고자 합니다. 1. Docker 기반의 딥러닝 환경 구축 2. PyCharm에서 서버 환경 접속 및 세팅 1. Docker를 활용한 딥러닝 환경 구축 서버 환경
soundprovider.tistory.com
https://yeko90.tistory.com/entry/how-to-run-jupyter-docker
[Docker] 도커에서 주피터 노트북 원격 접속 방법
도커에서 주피터노트북을 설치하고 실행하는 방법에 대해 알아보겠습니다. 도커 이미지 다운로드 후 컨테이너 실행 예제용 도커이미지 https://hub.docker.com/r/pytorch/pytorch docker pull pytorch/pytorch docker
yeko90.tistory.com
'Dev > Docker' 카테고리의 다른 글
[Postgre SQL] (0) | 2025.02.07 |
---|---|
WSL Ubuntu에 Docker 설치 (0) | 2024.12.27 |
[Docker] 도커 명령어 (0) | 2023.07.20 |
[Docker] docker-compose 설치 (0) | 2023.03.18 |