lsb_release
설치failed to commit changes to dconf
Terminator
실행 안될때nvidia-docker
에서 nvidia-docker2
로 바뀌면서 따로 복잡하게 nvidia GPU 사용을 위해 설정할 필요 없이 image 생성 시와 container 생성 시에 옵션 몇개만 추가해주면 된다고 한다.$ curl -fsSL https://get.docker.com/ | sudo sh
$ sudo usermod -aG docker $USER
##### NVIDIA-Docker, GPU
$ 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-docker2
$ sudo systemctl restart docker
docker pull IMG_NAME
명령어로도 이미지를 생성할 수 있는데, 여러가지 설정을 위해 dockerfile
을 만들어서 image를 생성한다
CUDA 11.4
를 사용하는 Ubuntu 18.04
이미지를 가져왔다.FROM nvidia/cudagl:11.4.0-devel-ubuntu18.04
# nvidia-container-runtime
ENV NVIDIA_VISIBLE_DEVICES \
${NVIDIA_VISIBLE_DEVICES:-all}
ENV NVIDIA_DRIVER_CAPABILITIES \
${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
RUN apt-get update && apt-get -y install sudo
RUN adduser --disabled-password --gecos '' ubuntu
RUN adduser ubuntu sudo
RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
RUN mkdir -p /home/ubuntu
RUN chown ubuntu /home/ubuntu
USER ubuntu
WORKDIR /home/ubuntu
CMD /bin/bash
dockerfile
을 만들고, 이미지는 다음과 같이 생성하면 된다.$ docker build -t IMG_NAME .
# IMG_NAME은 원하는 이미지 이름
$ docker images #image 생성 되었는지 확인
docker run -it IMG_NAME bash
와 같이 container를 만들면서 명령어를 실행한다 (이 명령어에서는 bash를 실행하라는 뜻, 터미널 실행됨)docker run --help
로 확인가능하다.--runtime=nvidia
: GPU를 사용하기 위해 필수, --gpus all
은 옛날 방식이라는데 그냥 넣어둠--net=host
는 docker내에서 host의 network를 그대로 사용함을 의미함. 예를들어 Docker내에서 ROS를 실행하면 Docker바깥의 host에서도 해당 ROS node와 통신이 된다.#!/bin/sh
XSOCK=/tmp/.X11-unix
XAUTH=/tmp/.docker.xauth
touch $XAUTH
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
docker run --runtime=nvidia --privileged --gpus all --rm -it \
--volume=$XSOCK:$XSOCK:rw \
--volume=$XAUTH:$XAUTH:rw \
--volume=$HOME:$HOME \
--shm-size=4gb \
--env="XAUTHORITY=${XAUTH}" \
--env="DISPLAY=${DISPLAY}" \
--env=TERM=xterm-256color \
--env=QT_X11_NO_MITSHM=1 \
--env="NVIDIA_DRIVER_CAPABILITIES=all" \
--net=host \
<IMAGE_NAME>
bash
run.sh
파일을 만들고, 다음과 같이 container를 생성한다.$ chmod +x run.sh
$ ./run.sh
$ docker ps -a # container list 확인
Control + p + q
: container 종료하지 않고 exit$ exit
: container 종료하면서 exit (저장 안되고 종료하므로 주의)docker exec -it CONTAINER_NAME bash
: 만들어진 container 다시 실행docker commit -p CONTAINER_NAME IMG_NAME:TAG
: 원하는 이름 및 태그로 컨테이너 저장 to image$ sudo apt install x11-xserver-utils
# 혹은 sudo apt install x11-server-utils
$ xhost +
apt install
에서 tab completion이 동작 안하는데, 여기 링크를 참고해서 해결했다.$ sudo apt install bash-completion
$ sudo gedit /etc/bash.bashrc
## 주석해제
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
$ source /etc/bash.bashrc
$ source ~/.bashrc
$ sudo rm /etc/apt/apt.conf.d/docker-clean
$ sudo apt update -y
docker cp 원래위치 원하는위치
lsb_release not found
$ sudo apt-get update && sudo apt-get install -y lsb-release && sudo apt-get clean all
$ sudo rm /etc/apt/sources.list.d/ros-latest.list
failed to commit changes to dconf
$ sudo apt install dbus-x11
Terminator
실행 안될때: terminator -u
옵션으로 실행하면 실행 된다.