Server Programming/DevOps

Docker 기본 사용법

Dev.BeryL 2022. 2. 1. 19:24
728x90

Docker

https://www.docker.com/

도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다. 여기에는 코드, 런타임, 시스템 도구, 시스템 라이브러리 등 서버에 설치되는 무엇이든 아우른다. 이는 실행 중인 환경에 관계 없이 언제나 동일하게 실행될 것을 보증한다. (출처: 도커 (소프트웨어))

 

설치

How To Install and Use Docker on Ubuntu 16.04 (Digitalocean)

sudo 없이 사용하기

  • $ sudo usermod -aG docker ${USER}
    • docker 그룹에 사용자 추가

이미지

이미지 목록

  • $ docker images

이미지 가져오기

  • $ docker pull <image name:tagname>
  • tagname 을 지정하지 않으면 기본 latest

이미지 삭제

  • $ docker rmi <image name:tagname>

컨테이너

컨테이너 목록

  • $ docker ps
  • $ docker ps -a

상태값

  • Up / Exited / Created

컨테이너 삭제

  • $ docker rm <container name|id>
    • f 옵션은 강제 삭제

종료된 모든 컨테이너 삭제

  • $ docker container prune

컨테이너 정보 보기

  • $ docker inspect <container name|id>

실행

  • Interactive 모드
    • $ docker run ti <image name> <command>
  • Detach 모드
    • $ docker run d <image name> <command>

옵션

  • -name <container name> - 컨테이너 이름 지정
  • -rm - 컨테이너 종료시 자동 삭제
  • p <host port>:<container port> - 외부 포트 바인딩
  • v <host path>:<container path> - 호스트 파일 경로 공유
  • e <환경 변수> - 환경 변수 설정
  • link <container name> - container 간 네트워크 연결
    • 컨테이너 내부에서 container name 에 해당하는 노드가 보이게 됨
    • 예) $ ping <container name>
  • -restart <option>
    • no (default), unless-stopped, always, on-failure

Detach

  • Ctrl + p + q
    • 주의) exit 으로 나오면 컨테이너가 종료됨

Attach

  • $ docker attach <container name|id>

Log

  • $ docker logs <container name|id>
  • $ docker logs -f <container name|id>
    • f : 로그를 계속 표시

새로운 세션 생성

  • $ docker exec -ti <container name|id> <command>
    • exit 으로 나와도 메인 세션은 살아 있어서 종료되지 않음

NVIDIA-DOCKER

NVIDIA/nvidia-docker: Build and run Docker containers leveraging NVIDIA GPUs

Ubuntu 16.04/18.04, Debian Jessie/Stretch/Buster

Add the package repositories

$ 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

$ sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit

$ sudo systemctl restart docker

사용법

$ nvidia-docker …

GPU 선택

  • $ NV_GPU='0,1' nvidia-docker <docker-options> <docker-command> <docker-args>

Test nvidia-smi with the latest official CUDA image

$ docker run --gpus all nvidia/cuda:9.0-base nvidia-smi

Start a GPU enabled container on two GPUs

$ docker run --gpus 2 nvidia/cuda:9.0-base nvidia-smi

Starting a GPU enabled container on specific GPUs

$ docker run --gpus '"device=1,2"' nvidia/cuda:9.0-base nvidia-smi

$ docker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:9.0-base nvidia-smi

Specifying a capability (graphics, compute, ...) for my container

Note this is rarely if ever used this way

$ docker run --gpus all,capabilities=utility nvidia/cuda:9.0-base nvidia-smi

Dockerhub

https://hub.docker.com

Dockerhub

push 하기

  • $ docker push bjtj/ubuntu18.04-torch7-pytorch-opencv3.4-caffe1.0:tagname
  • 안되면 로그인

pull 하기

  • $ docker pull bjtj/ubuntu18.04-torch7-pytorch-opencv3.4-caffe1.0:1.0-openpose

 

WebCAM 사용하기

  • -device /dev/video0:/dev/video0 --device /dev/bus:/dev/bus

Display 사용하기

  • e DISPLAY=$DISPLAY
  • v /tmp/.X11-unix:/tmp/.X11-unix
  • e QT_X11_NO_MITSHM=1
    • QT 사용시
  • 호스트 머신에서 xhost + 실행하여 X11 허용

시간 싱크 맞추기

  • v /etc/localtime:/etc/localtime:ro

nginx

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

redis

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

cuda

https://hub.docker.com/r/nvidia/cuda

pytorch

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

반응형

'Server Programming > DevOps' 카테고리의 다른 글

AWS - IAM 정책관리  (0) 2022.02.02
docker timezone  (0) 2022.02.01
Azure Key-valut를 이용한 백업 프로세스 구축  (0) 2022.01.28
MSA 설계  (0) 2022.01.28
MLOps 정의  (0) 2022.01.27