Development/Docker

[Docker] Docker 사용법

jstar0525 2022. 9. 1. 03:15
반응형

https://jstar0525.tistory.com/202

 

[Docker] Deep Learning 및 ROS 연구 개발 환경 setting

내가 사용하는 딥러닝 개발 환경에 대하여 서술하고자 한다. Deep Learning과 관련하여 우리 연구실에서 다수의 연구원들이 개별 PC에서 서버로 ssh를 통하여 접속하고 GPU들을 사용을 한다. 지금까지

jstar0525.tistory.com

위와 같이 Docker 환경 설정 후

docker의 사용방법을 정리하면 아래와 같다.

 

Docker 사용법


PC에서 mobaxterm을 이용하여 서버로 ssh 접속하여

아래와 같은 설정을 진행한다.

 

도커 권한 부여

$ sudo usermod -aG docker [username]
$ sudo service docker restart

 

docker pull

  • tensorflow
$ docker pull tensorflow/tensorflow:2.7.0-gpu

tensorflow docker image에 대한 tag는 아래에서 확인할 수 있다.

(각 tags에 대한 설명은 아래 링크의 overview에서 확인할 수 있다)

 

https://hub.docker.com/r/tensorflow/tensorflow/tags

 

Docker Hub

 

hub.docker.com

 

  • pytorch
$ docker pull pytorch/pytorch:1.10.0-cuda11.3-cudnn8-devel

pytorch docker image에 대한 tag는 아래에서 확인할 수 있다.

(각 tags의 runtime과 devel에 대한 설명은 nvidia cuda docker image overview에서 확인할 수 있다)

 

https://hub.docker.com/r/pytorch/pytorch/tags

 

Docker Hub

 

hub.docker.com

 

  • ros
$ docker pull osrf/ros:melodic-desktop-full

이외의 다른 버전에 대해서는 아래에서 받을 수 있다.

https://hub.docker.com/u/osrf

 

Docker Hub

 

hub.docker.com

https://hub.docker.com/_/ros

 

ros - Official Image | Docker Hub

Quick reference Supported tags and respective Dockerfile links melodic-ros-core, melodic-ros-core-bionic melodic-ros-base, melodic-ros-base-bionic, melodic melodic-robot, melodic-robot-bionic melodic-perception, melodic-perception-bionic noetic-ros-core, n

hub.docker.com

 

docker images

$ docker images
REPOSITORY              TAG                            IMAGE ID       CREATED         SIZE
tensorflow/tensorflow   2.7.0-gpu                      0b7c1e7aa055   2 months ago    5.71GB
pytorch/pytorch         1.10.0-cuda11.3-cudnn8-devel   46961cbf2ac7   2 months ago    14.4GB
nvidia/cuda             11.0-base                      2ec708416bb8   16 months ago   122MB

 

docker run

(여기서부터는 tensorflow docker image를 예시로 진행하겠습니다)

$ docker run -it --rm --gpus all --name="js-tf" --volume="/home:/home" tensorflow/tensorflow:2.7.0-gpu
  • Container 실행시 root 권한으로 Container ID를 가지고 실행되는 것을 확인 할 수 있다.
root@a68745e3ec10:/#

 

docker ps

새로운 터미널로 ssh를 이용하여 서버에 접속하여 아래와 같은 container가 실행되었음을 알 수 있다. 

$ docker ps -a
CONTAINER ID   IMAGE                             COMMAND   CREATED         STATUS         PORTS     NAMES
a68745e3ec10   tensorflow/tensorflow:2.7.0-gpu   "bash"    7 minutes ago   Up 6 minutes             js-tf

 

docker exec

실행중인 도커에서 다른 termial에서 접속하는 방법은 아래와 같다.

a687은 위에서 실행된 CONTAINER ID이다. (개별 상황에 맞게 수정하여 적용)

$ docker exec -it a687 /bin/bash
root@a68745e3ec10:/#

 

docker commit

container에서 필요한 라이브러리를 설치하고

자신만의 이미지를 만들기 위한 절차는 아래와 같다.

  • container에서 필요한 라이브러리 설치
root@a68745e3ec10:/# install something....
  • 서버에서 아래의 명령 실행 (docker commit)
# Container ID를 사용하는 경우
$ docker commit [CONTAINER_ID] [IMAGE_NAME]
$ docker commit a68745e3ec10 js/tensorflow:2.7.0-gpu
$ docker commit a687 js/tensorflow:2.7.0-gpu # Container ID는 앞 4자리만 사용하여도 인식 가능

# Container name을 사용하는 경우(docker run --name="js-tf" 명령을 사용하였을 경우)
$ docker commit [CONTAINER_NAME] [IMAGE_NAME]
$ docker commit js-tf js/tensorflow:2.7.0-gpu

이미지가 아래와 같이 추가된 것을 볼 수 있다.

$ docker images
REPOSITORY              TAG                            IMAGE ID       CREATED         SIZE
js/tensorflow           2.7.0-gpu                      7ddfe99240e0   3 minutes ago   5.71GB
tensorflow/tensorflow   2.7.0-gpu                      0b7c1e7aa055   2 months ago    5.71GB
pytorch/pytorch         1.10.0-cuda11.3-cudnn8-devel   46961cbf2ac7   2 months ago    14.4GB
nvidia/cuda             11.0-base                      2ec708416bb8   16 months ago   122MB

 

docker container 종료

실행 중인 container를 빠져나가면

docker run --rm 옵션으로 인하여 container가 제거된다.

root@a68745e3ec10:/# exit
$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 

만약 exited한 모든 container를 삭제하고 싶을 경우 아래의 명령을 사용한다.

$ docker rm $(docker ps -q -f status=exited)

 

alias

docker를 실행하거나 container를 삭제하기 위한 명령이 길어서 귀찮을 경우
alias를 ~/.bashrc에 아래와 같이 추가한다.

$ gedit ~/.bashrc
alias drun='docker run -it \
		--rm \
		--gpus all \
		--name="js-tf" \
		--volume="/home:/home" \
		js/tensorflow:2.7.0-gpu'  

alias drm='docker rm $(docker ps -q -f status=exited)'

.bashrc 파일 수정 후 터미널을 다시 시작하기 않고 적용하기 위해

아래의 명령을 실행한다.

$ source ~/.bashrc

 

현재의 alias를 확인하고 싶다면 아래의 명령을 실행한다.

$ alias

 

따라서 아래의 간단한 명령으로 docker를 실행, 종료할 수 있다.

$ drun
$ drm

 

docker export/import

docker를 commit할 때 기존의 사용된 이미지가 layer로 쌓이게 된다.

 

이러한 의존성을 없애고 하나의 layer로 만들기 위해서

아래의 명령을 수행한다.

// 컨테이너를 대상으로 파일 시스템 추출 -> .tar 파일로 추출됨
$ docker export -o <output_file.tar> <container>

// 추출된 파일로 새로운 image 생성
$ docker image import <output_file.tar> <image> --change 'CMD ["/bin/bash"]'

 

ref.

https://docs.docker.com/engine/reference/run/

 

Docker run reference

 

docs.docker.com

https://blog.naver.com/PostView.naver?blogId=shino1025&logNo=222500479888&categoryNo=0&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView 

 

[Docker] max depth exceeded / Image Layer 병합하기

필자는 회사에서 Server Applcation을 배포하는데, Docker를 사용하는데 container를 image에 commit하...

blog.naver.com

 

반응형