Docker 설치 및 Nvidia docker로 GPU 사용하기
Docker 설치 정리
Docker 설치
curl -fsSL <https://get.docker.com/> | sudo sh
Root권한 설정
(재부팅 하면 설정됨,안해도 sudo와 함께 사용해도 상관없음)
sudo usermod -aG docker $USER #현재 접속중인 사용자에게 권한주기
sudo usermod -aG docker your-user #your-user 사용자에게 권한주기
Docker 설치확인
docker version
Ouput :
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:36 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:01:06 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
Docker compose
docker compose 생성 및 실행
curl -L "<https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$>(uname -s)-$(uname -m)" -o
/usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# test
docker-compose version
docker-compose up
Docker 설치가 모두 끝난 후에 진행
nvidia-docker 설치
curl -s -L <https://nvidia.github.io/nvidia-docker/gpgkey> | \\
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
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-docker2
Docker에서 Cuda환경으로 시작하기
docker pull 로 당겨오기
(nvidia/cuda:10.0-cudnn7-runtime-ubuntu18.04 으로 당겨오면 안됨!! nvcc 헤드가 없다
반드시 nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04 로 당겨와야함)
sudo docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04
docker로 컨테이너 환경에 접속
nvidia-docker run -it nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04 /bin/bash
cuda 및 드라이버 확인
nvdia-smi
Docker에 로그인
sudo nvidia-docker login
Docker build
Docker를 빌드할때는 Dockerfile을 생성하여 그 경로에서 빌드하면 Dockerfile에 설정한대로
이미지가 생성이 된다.
Dockerfile 예시
FROM nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04
MAINTAINER keyog <rmsiddl12@naver.com>
RUN echo 'export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}' >> ~/.bashrc
RUN echo 'export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
RUN echo 'export PATH=/usr/local/cuda/bin:/$PATH' >> ~/.bashrc
RUN echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
RUN apt-get update
RUN apt-get install -y vim
RUN apt-get install -y git
RUN apt-get install -y build-essential unzip pkg-config libssl-dev
RUN apt-get install -y libjpeg-dev libpng-dev libtiff-dev
RUN apt-get install -y install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev v4l-utils libxvidcore-dev libx264-dev libxine2-dev
RUN apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
RUN apt-get install -y libgtk-3-dev
RUN apt-get install -y mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev
RUN apt-get install -y libatlas-base-dev gfortran libeigen3-dev
RUN apt-get install -y python2.7-dev python3-dev python-numpy python3-numpy
EXPOSE 80
EXPOSE 443
sudo nvidia-docker build --tag <이미지이름>:<태그이름> .
Docker 실행
sudo nvidia-docker run -it --name <컨테이너이름> <이미지이름>:<태그이름>
sudo nvidia-docker start <컨테이너이름>
sudo nvidia-docker exec -it <컨테이너이름> /bin/bash
만약 start로 했는데 exec명령어가 안먹는다면sudo nvidia-docker ps -a
로 종료 되었는지 확인하고
바로 종료된걸로 확인하면 -it 옵션 빼먹었는지 확인할 것!
옵션 | 설명 |
---|---|
-d | detached mode 흔히 말하는 백그라운드 모드 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리를 연결 (마운트) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
–name | 컨테이너 이름 설정 |
–rm | 프로세스 종료시 컨테이너 자동 제거 |
-it | -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 |
–link | 컨테이너 연결 [컨테이너명:별칭] |
자주 사용하는 명령어
history 조회
sudo nvidia-docker history <이미지이름>:<태그이름>
host 파일 docker로 이동하기
docker에서 host로 이동할때는 반대로 하면됨
sudo nvidia-docker cp <host파일경로> <컨테이너이름>:<docker파일경로>
Docker commit
sudo nvidia-docker commit -m "Update install" <컨테이너이름> <이미지이름>:<태그이름>
Docker push
sudo nvidia-docker push <이미지이름>:<태그이름>
컨테이너 확인
sudo nvidia-docker ps #현재 실행중인 것만 확인
sudo nvidia-docker ps -a #컨테이너 전부 확인
컨테이너 삭제
sudo nvidia-docker rm <컨테이너이름>
sudo nvidia-docker rm 'sudo nvidia-docker ps -a -q' #컨테이너 전부 삭제
이미지 확인
sudo nvidia-docker image
이미지 삭제
sudo nvidia-docekr rmi <이미지id>
docker log 확인하기
docker logs [OPTIONS] CONTAINER
- -tail 옵션으로 마지막 10줄만 확인할 수 있다.
- f 옵션으로 실시간 로그 생성 가능