[Docker] Docker 사용법
https://jstar0525.tistory.com/202
위와 같이 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
- 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
- ros
$ docker pull osrf/ros:melodic-desktop-full
이외의 다른 버전에 대해서는 아래에서 받을 수 있다.
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/