본문 바로가기

Programming

Docker Container 설치: 우분투 환경

1. Docker Container 설치 (일반설치)

 

1) 업데이트 및 HTTP 패키지 설치

$ sudo apt update
$ sudo apt-get install -y ca-certificates \ 
    curl \
    software-properties-common \
    apt-transport-https \
    gnupg-agent \
    lsb-release

 

2) GPG 및 저장소 추가

$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# key 찾아서 설치해 줌
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys (NO_PUBKEY,ex.) A4B469963BF863CC)

# key 설치 확인
$ sudo apt-key fingerprint


# Repository 설치
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

 

3) 도커 엔진 설치

$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

 

2. Container 생성

- Docker 위에 올릴 Container 생성하기

- Container의 경우, Host OS와 격리되어 있기 때문에 Host OS의 GPU 사용 불가함. 그래서 nvidia-docker를 통해 연결함.

  (Infra -> Host OS -> Docker -> Container 구조)

 

1) Nvidia Docker 설치

- Prerequisite: Nvidia Driver가 미리 설치되어 있어야 함

$ 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 install -y nvidia-container-toolkit
$ sudo systemctl restart docker

$ sudo apt-get update

 

2) Pytorch Container 생성

# Pytorch 이미지 찾아보기
# STARS의 숫자가 가장 높은 것이 범용적인 것
$ docker search pytorch

# Pytorch 이미지 다운로드
# 아래 명령어는 dockerhub 사이트에서 pytorch 검색 시 나와 있음
$ docker pull pytorch/pytorch

# Docker 이미지 확인
$ docker images

 

3) Nvidia-docker와 Pytorch Container 연동

- Pytorch Container (--name pytorch)를 pytorch/pytorch라는 이미지로 사용 선언

- 내 컴퓨터의 share 폴더는 pytorch 컨테이너의 share 폴더와 공유됨

# User 디렉토리 아래에 Share 폴더 미리 생성 필요
# '-v' 옵션은 user/share 폴더에 있는 파일들을 pytorch 컨테이너의 share 폴더와 공유한다는 의미임.
# '-p' 옵션은 내 컴퓨터의 8888 포트와 pytorch 컨테이너의 8888 포트를 연결해 준다는 의미임
$ docker run -itd --name pytorch -v /home/(user_dic)/share:/root/share -p 8888:8888 --gpus all --restart=always pytorch/pytorch  

# Ref.
# 1) Container list 확인
$ docker ps -a

# 2) Background에서 실행되는 Docker 종료
$ sudo docker systemctl restart docker

# 3) Restart 시 
# 3-1) '--restart=always' 옵션주는 경우
$ docker exec -it pytorch bash
# 3-2) '--restart=always' 옵션없는 경우, pytorch containet 시작 후 다시 실행
$ docker start pytorch
$ docker exec -it pytorch bash

3-1) 상기 명령어 Error 해결

- docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].

$ 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

# docker 재시작
$ sudo systemcrl restart docker

https://bluecolorsky.tistory.com/110

 

[정보] docker: Error response from daemon: could not select device driver with capabilities: [[gpu]] 문제 해결하기

도커를 사용하다 보면 다양한 문제에 맞닥뜨리게 된다. 해결하기 쉬운 문제부터 어려운 문제까지 수많은 문제들이 존재하는데 사용할때마다 항상 다른 오류가 발생하여 문제가 발생할때마다

bluecolorsky.tistory.com

3-2) 3-1) 실행 후 Error 해결:

-docker: Error response from daemon: Conflict. The container name "/pytorch" is already in use by container "de99d604f2ddde3f0168a37d29291bb5ae1b852e9f140967b66d5c3a115b0b96". You have to remove (or rename) that container to be able to reuse that name.

- 아래 명령어 통해 pytorch container 삭제

$ sudo rm pytorch

4) Pytorch Container 실행

$ docker exec -it pytorch bash

 

5) GPU 동작 확인 (링크 참조)

6) 추가 패키지 설치 (Jupyter)

7) Jupyter Notebook 실행

$ jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root

- Jupyter Notbook의 토큰 인증

https://financedata.github.io/posts/jupyter-notebook-authentication.html

 

Tip

다른 사람의 코드를 다운 받아 사용할 때는 Pytorch 컨터이너의 share 폴더에서 git으로 다운 받아 쓰면 됨.

 

8) 배포하기

 

1단계: 현 실행 중인 Container 확인

$ docker ps -a

2단계: 배포할 Contrainer 중단

$ docker stop pytorch

3단계: 배포할 Container를 Image 파일로 만들기

# 이미지 파일 이름 및 배포 버젼 저장
$ docker commit pytorch pytorch_distribution_test:1

# 이미지 목록 확인
$ docker image ls 혹은 docker images

4단계: Docker Hub에 로그인

# docker hub 사이트에 미리 가입 필요함
# docker hub 사이트에서 가입한 ID/PW 입력
$ docker login

5단계: 배포 및 확인

$ docker push (Docker Hub ID)/pytorch_distribution_test:1

Docker hub 사이트에 접속해서 Repository 확인

 

 

Tip. (Pytorch) Docker 컨테이너에서 아나콘다 가상환경을 만들 필요 없는 이유

- Pytorch는 Anaconda Package를 제공하므로, Pytorch 이미지에 Anaconda가 기 존재함

 

참고:

1. https://dongle94.github.io/docker/docker-ubuntu-install/

 

[Docker] Ubuntu에 Docker 설치하기

리눅스 OS 중 우분투 OS에서 도커(Docker) 프로그램을 설치하는 방법을 알아본다.

dongle94.github.io

2. https://89douner.tistory.com/96

 

6-2. Docker에서 pytorch 환경 구축하기 with jupyter notebook

안녕하세요~ 이번에는 리눅스 환경에서 Docker를 이용하여 pytorch를 구축하려고해요! (윈도우 환경에서는 GPU docker가 제공이 안되요 ㅜㅜ) (명령어 입력은 아래 사이트를 참고하고 복붙하시면될거

89douner.tistory.com

 

 

 

cf.)

1) apt 와 apt-get 차이

https://ksbgenius.github.io/linux/2021/01/13/apt-apt-get-difference.html

 

[Linux] apt와 apt-get 차이점

데비안 계열(Ubuntu, Mint 등)에서 사용하는 apt와 apt-get의 차이점

ksbgenius.github.io

2) curl (Client url): 프로토콜을 이용해 URL로 데이터를 전송하여 서버에 데이터를 보내거나 가져올 때 사용하기 위한 명령줄 도구 및 라이브러리

3) echo: 문자열을 컴퓨터 터미널에 출력하는 명령