[Docker] Docker 사용법
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
이외의 다른 버전에 대해서는 아래에서 받을 수 있다.
Docker Hub
hub.docker.com
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
[Docker] max depth exceeded / Image Layer 병합하기
필자는 회사에서 Server Applcation을 배포하는데, Docker를 사용하는데 container를 image에 commit하...
blog.naver.com