Docker - kairproject/kair_algorithms_draft GitHub Wiki

Docker Installation (Ubuntu)

์šฐ๋ถ„ํˆฌ ์„ค์น˜ ๋ฐฉ๋ฒ•์€ https://docs.docker.com/install/linux/docker-ce/ubuntu/#extra-steps-for-aufs ๋ฅผ ์ฐธ๊ณ ํ•ฉ์‹œ๋‹ค.

์ตœ์ดˆ ์‹คํ–‰ ์‹œ์— ๊ถŒํ•œ์ด ์—†๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋œฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sudo adduser $USER docker
sudo gpasswd -a $USER docker 
# logout / login

nvidia-docker Installation (Ubuntu)

nvidia-docker ์„ค์น˜ ๋ฐฉ๋ฒ•์€ https://github.com/NVIDIA/nvidia-docker ๋ฅผ ์ฐธ๊ณ ํ•ฉ์‹œ๋‹ค.

docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
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-docker2
sudo pkill -SIGHUP dockerd

docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

Basic commands

docker run [image_name]  # ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ
docker ps  # ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก
docker ps -a  # ์ „์ฒด ์ปจํ…Œ์ด๋„ˆ ๋ชฉ๋ก
docker stop [container_id]  # ํŠน์ • ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ 
docker start [container_id]  # ํŠน์ • ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘
docker rm [container_id]  # ํŠน์ • ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
docker rm -v $(docker ps -a -q -f status=exited)  # ์ „์ฒด ์ค‘์ง€๋œ ์ปจํ…Œ์ด๋„ˆ ์‚ญ์ œ
docker images  # ๋„์ปค ์ด๋ฏธ์ง€ ๋ชฉ๋ก
docker pull [image_name]  # ๋„์ปค ์ด๋ฏธ์ง€ ๋‹ค์šด๋กœ๋“œ
docker rmi -f [image_name]  # ๋„์ปค ์ด๋ฏธ์ง€ ์‚ญ์ œ, -f๋ฅผ ์ฃผ๋ฉด ๊ฐ•์ œ๋กœ ์‚ญ์ œํ•œ๋‹ค. 
docker logs [OPTIONS] [container_id]  # ์ปจํ…Œ์ด๋„ˆ ๋กœ๊ทธ ํ™•์ธ
docker exec [container] [command]   # ์ปจํ…Œ์ด๋„ˆ์— ๋ช…๋ น์–ด ์‹คํ–‰ํ•˜๊ธฐ

.dockerignore

docker run์„ ์‹คํ–‰์‹œํ‚ค๋ฉด build context for docker image๋ผ๋Š”๊ฒŒ ๋œจ๋ฉด์„œ ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜๋Š”๋ฐ, ํ˜„์žฌ ํด๋” ๋‚ด์— ์žˆ๋Š” ๊ฒƒ๋“ค์„ ์ฐธ์กฐํ•˜๋Š” ๊ณผ์ •(context)์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. container์— COPY ๋“ฑ์„ ํ•˜์ง€ ์•Š์„ ํŒŒ์ผ๋“ค์ด๋ผ๋ฉด .dockerignore ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•ด์„œ build ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Dockerfile syntax

RUN  # run command when container is made
COPY  # copy file from local to image
CMD  # command when container runs
WORKDIR  # set work directory
FROM  # pull image
SHELL ["/bin/bash" "-c"]  # set default shell to bash
ENV  # ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • 
EXPOSE  # ์™ธ๋ถ€์— ๋…ธ์ถœํ•  port ์ง€์ •

Docker + Jupyter Notebook

docker run -it -p 8888:8888 [image_name]
Jupyter notebook --ip 0.0.0.0 --no-browser  # in container

Nvidia-Docker runtime

docker run -it --runtime=nvidia --ipc=host [image id] /bin/bash runtime, ipc ์˜ต์…˜์„ ์ค˜์•ผ nvidia driver๋ฅผ docker ๋‚ด์—์„œ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๊ณ  shared memory๋ฅผ ์‚ฌ์šฉํ•˜๋Š” framework(e.g. Pytorch)๋ฅผ ์œ„ํ•ด์„œ๋Š” ipc=host ์˜ต์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Docker access container data from host

docker run -v โ€œ/path/to/host/directory:/path/inside/containerโ€ [image_name]

Bash argument passing to Docker container

file.sh

#!/bin/bash
echo Your container args are: "$@"

Dockerfile

FROM ubuntu:14.04
COPY ./file.sh /
ENTRYPOINT ["/file.sh"]
CMD []

shell

docker build -t test .
docker run test hello world
Your container args are: hello world

Dockerfiles for Deep Learning

https://github.com/ufoym/deepo

ROS dockerfile

https://hub.docker.com/r/osrf/sros/dockerfile/