본문 바로가기

잡다한 것

Docker 설치 및 Nvidia docker로 GPU 사용하기 (feat. 자주쓰이는 명령어)

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 옵션으로 실시간 로그 생성 가능