Docker
운영체제 수준의 가상화로 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술.
1. Docker 를 사용할 수 있는지 확인
grep docker /etc/group | grep $USER
docker --version
docker group 에 계정이 포함되어 있지 않다면 docker 명령을 실행할 수 없습니다.
docker 그룹에 포함될 수 있도록 관리자에게 요청하십시요.
docker run 명령을 실행하는 경우 항상 -u $UID:$GROUPS
옵션이 포함되어야 합니다.
2. Docker hub 에서 원하는 이미지 찾기
https://hub.docker.com/_/ubuntu?tab=tags&page=1&ordering=last_updated&name=20.04
3. Docker 기본 명령
# Docker 버젼 확인.
docker --version
# Download 되어 있는 docker image 목록 확인.
docker images
# 실행중인 Docker Process (컨테이너) 목록 확인.
docker ps
# 실행중 이지 않은 Docker Process (컨테이너) 까지 포함한 목록 확인.
docker ps -a
# ubuntu 20.4 image 내려받기.
docker pull ubuntu:20.04
# 내려받은 이미지가 목록에 추가 되었는지 확인.
docker images | grep ubuntu
# ubuntu:20.04 이미지를 이용한 생성되는 프로세스(컨테이너) 안에서 "cat /etc/os-release" 명령어 실행.
docker run ubuntu:20.04 cat /etc/os-release
# 비교를 위해 os 에서 "cat /etc/os-release" 명령어 실행.
cat /etc/os-release
# docker 프로세스(컨테이너) 로 들어가서 직접 명령 실행. (-it 옵션)
docker run -it ubuntu:20.0
# docker 프로세스(컨테이너) 삭제
docker ps
docker ps -a
docker stop <CONTAINER ID>
docker rm <CONTAINER ID>
docker ps -a
# docker 프로세스(컨테이너) 가 작업이 끝나는데로 삭제 (--rm)
docker ps -a
docker run ubuntu:20.04 cat /etc/os-release
docker ps -a
docker rm <CONTAINER ID>
docker ps -a
docker ps -a
docker run --rm ubuntu:20.04 cat /etc/os-release
docker ps -a
# docker image 삭제 / 이미지를 이용해 구동중인 프로세스(컨테이너) 가 없는 상태여야 함.
docker images
docker rmi <IMAGE ID>
docker images
4. TensorFlow Docker 컨테이너로 파이썬 코드 실행. (--runtime=nvidia 옵션)
docker run --runtime=nvidia --rm tensorflow/tensorflow:1.11.0-gpu-py3 pip list | grep tensor
docker run --runtime=nvidia --rm tensorflow/tensorflow:1.11.0-gpu-py3 \
python ~/TensorFlow-Examples/examples/3_NeuralNetworks/neural_network_raw.py
### 오류가 발생 합니다. TensorFlow-Examples 파일이 docker 이미지 내부에 없습니다.
docker run --runtime=nvidia --rm tensorflow/tensorflow:1.11.0-gpu-py3 pwd
docker run --runtime=nvidia --rm tensorflow/tensorflow:1.11.0-gpu-py3 ls -l
docker run --runtime=nvidia --rm tensorflow/tensorflow:1.11.0-gpu-py3 ls -l ~
### -v (Volume)옵션을 통해 사용자의 HOME directory 를 연결 시켜 줍니다.
docker run --runtime=nvidia --rm -v ~:/home/$USER tensorflow/tensorflow:1.11.0-gpu-py3 ls -l ~
### 작업 실행.
docker run --runtime=nvidia --rm -v ~:/home/$USER \
tensorflow/tensorflow:1.11.0-gpu-py3 python ~/TensorFlow-Examples/examples/3_NeuralNetworks/neural_network_raw.py
5. bash 스크립트 (Script) 파일로 만들어서 실행
# cat 명령으로 파일을 생성할 경우 $USER 등의 변수처리가 복잡해 지기 때문에 vi 편집기로 작성 합니다.
vi ~/docker-py3-tensor1.11-exapmle.sh
cat ~/docker-py3-tensor1.11-exapmle.sh
bash ~/docker-py3-tensor1.11-exapmle.sh
6. Docker 이미지의 생성 및 수정 그리고, 재사용
-
docker exec
-
docker shell
-
dockerfile
-
docker-compose
-
docker commit
-
개인 docker 저장소 생성 (dockerhub.com)
-
docker push & pull
-
7. HPC 클러스터 환경에서 Docker 의 문제
-
컨테이너를 통해 root 권한을 획득 할 수 있다.
-
1번의 문제에 따라 다른 사용자의 작업을 제어 하거나(컨테이너/프로세스), 심지어 다른 사용자의 데이터까지 접근할 수 있다.
-
docker image 가 /var/lib/docker 아래에 저장되어 local disk 가 필요하게 된다.
-
할당 받은 노드에 사용하려는 docker image 가 없을경우 download 받는 시간이 필요하다.