Last update: @4/18/2024
개요
Docker를 사용하면 모든 ROS 버전을 사용할 수 있다. 이때 컨테이너에서 실행되는 Gazebo와 Rviz2 같은 GUI를 호스트 머신에서 조작하기 위해서는 아래처럼 환경을 구성해줘야 한다.
이 포스트는 Linux Ubuntu 22.04 버전의 호스트 머신을 기준으로 한다.
Docker 설치
$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh ./get-docker.sh
Shell
복사
만약 권한이 없는 디렉터리에서 작업을 하면 curl: (23) Failed writing body (0 != 15890)과 같은 에러를 만나게 되니 주의해야 한다.
root 명령어로 실행하는게 불편하니까 docker 그룹을 등록해주자
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
Shell
복사
docker enabled 확인
$ systemctl is-enabled docker
Shell
복사
enabled가 안 뜬다면 아래 명령어 입력
$ sudo systemctl enable docker.service
$ sudo systemctl enable containerd.service
Shell
복사
터미널 재실행해서 유저 새로고침 후 아래 명령어로 테스트하자.
$ docker run hello-world
Shell
복사
Permission denied가 뜨면 reboot 명령어로 재부팅 해보자. 아니면
$ newgrp docker
Shell
복사
위 명령어를 쳐도 안 되면 그냥 docker 앞에 sudo를 쓰자.
아래처럼 뜨면 성공
nvidia-container-toolkit 설치
NVIDIA 그래픽 드라이버가 설치되어 있어야 한다.
Docker 컨테이너에서 NVIDIA 그래픽 드라이버를 사용하려면 호스트 머신에 nvidia-container-toolkit이란 것을 설치해줘야 한다.
아래 페이지 따라 NVIDIA toolkit 설치
다 설치했으면 상기 페이지의에 아래 부분에 있는 runtime 설정까지 해준다.
$ nvidia-ctk runtime configure --runtime=docker --config=$HOME/.config/docker/daemon.json
$ sudo systemctl restart docker
Shell
복사
nvidia-container-toolkit이 정상적으로 설치되었다면 아래 명령어로 테스트해볼 수 있다.
$ sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
Shell
복사
x server 설정
리눅스 시스템에서 GUI를 사용할 수 있게 해주는 것이 X-Server. GUI를 사용하기 위해서는 X에 접근할 수 있는 유저로 컨테이너를 실행해야 한다. 호스트와 같은 유저로 실행하면 문제가 없지만, 그렇지 않은 경우 xhost를 통해 권한을 부여해야 한다.
$ xhost + # give permission to all users
$ xhost +local: # give permission to local users
$ xhost +local:root # give permission to specific local users
Shell
복사
docker nvidia-container-toolkit runtime 설정
/etc/docker/daemon.json 파일에 아래 내용을 추가. 없다면 만들자.
$ sudo vi /etc/docker/daemon.json
Shell
복사
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
YAML
복사
이후 docker를 재실행해주자.
$ sudo systemctl restart docker
Shell
복사
테스트
Container 내에서 Gazebo를 실행하면 호스트 머신에서 nvidia-smi를 실행하면 아래처럼 gazebo가 GPU를 물고 실행되는 것을 확인할 수 있다.
$ nvidia-smi
# 또는
$ watch -n0.1 nvidia-smi
Shell
복사
위처럼 설정이 끝나야 아래처럼 docker compose의 runtime 옵션을 사용할 수 있다.
version: '3'
services:
amr_humble:
# ...
runtime: nvidia
YAML
복사