도커란 ?
최근 많은 어플리케이션등은 컨테이너(container)를 통하여 관리 되고 있습니다. 컨테이너에는 코드와 실행에 필요한 소프트웨어 패키지가 담겨져 있으며 어떠한 환경이든 빠르고 안전하게(격리를 통하여) 실행할 수 있습니다.
기존의 가상머신(VM)의 경우 어플리케이션 마다 물리적인 하드웨어 장치를 추상화 하였지만 docker 의 경우 컨테이너 단위로 추상화를 진행합니다. 이러한 방식을 통하여 하나의 docker 머신만을 사용해 가상화에 대한 오버헤드를 줄이며 또한 전체 물리 장치를 가상화 하지않고 OS kernel의 일부를 공유하므로서 VM에 비하여 성능의 이점을 가질수 있습니다.
관련 논문에서도 도커는 거의 native의 성능에 근접하며 KVM보다 대부분 빠르다고 하고 있습니다.
도커 설치 (ubuntu 기준)
sudo wget -qO- https://get.docker.com/ | sh
sudo usermod -aG docker $USER
docker run hello-world
Docker Compose 설치
Docker Compose는 yaml 파일을 이용하여 다수의 도커 컨테이너를 구성 및 실행하는 도커 어플리케이션 입니다. 자세한 내용은 링크에서 보실 수 있습니다.
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo docker-compose --version
Nvidia docker 설치
안정화된 저장소 및 GPGkey 등록
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
nvidia-docker 설치
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
자주 쓰는 명령어
실행중인 컨테이너 확인
-a
를 붙혀서 생성된 모든 docker container확인가능.
docker ps
docker의 하드웨어 사용량 확인 (cpu,memory ,IO etc)
docker stats
도커 컨테이너의 현재 상태를 이용하여 새로운 이미지 생성
docker commit
도커 컨테이너 받아오기
도커 허브에서 이미지를 받아온다. 링크를 특정하여 받을 수도 있음
docker pull image_name:tag
도커 이미지 확인
docker images
도커에서 필요없는 볼륨 및 이미지 삭제
docker system prune
도커 컨테이너 실행
예시
docker run --restart always --ipc=host -e LC_ALL=C.UTF-8 --name -v host:container -it -d --gpus '"device=0,1,2,3"' --cpuset-cpus="" container_name bash
docker run 에서 다양한 옵션이 존재
- gpu제한
- cpu숫자 제한
- 볼륨 연결
- 환경변수
- 재시작시 정책
- docker alias
도커 컨테이너 내부 명령어 실행
docker exec -it container_name command
도커 컨테이너에 명령어를 실행하는 명령어
ex)
docker exec -it ubuntu python3 train.py