꿈꾸는 개발자

도커 Ubuntu 18.04 + CUDA 10.2 + cuDNN 7 + ROS2 dashing 이미지 만들기 본문

Docker

도커 Ubuntu 18.04 + CUDA 10.2 + cuDNN 7 + ROS2 dashing 이미지 만들기

Anssony 2022. 1. 2. 13:35

프로젝트를 진행하는 도중 docker 이미지 안에 GPU를 할당해야하는 작업이 필요해서 docker commit 명령어를 이용해 이미지를 만들어보았다. (기존 이미지는 CUDA 가 없었다.)

 

먼저 기존에 있던 이미지에 설치를 하면서 새로 이미지를 만든 점을 알아두길 바란다.

 

docker pull nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04

 

 

먼저 이미지를 가져왔다. 내가 사용할 이미지는 ubuntu 18.04 와 cuda 10.2, cudnn7 이 설치되어있는 이미지이다.

 

다른 cuda 이미지를 받고 싶다면 아래 링크를 클릭하면 된다.

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

 

Docker Hub

 

hub.docker.com

 

여기에 Ros2 dashing 을 추가로 설치할 것이다.

 

※ dashing 버전이 EOL(End Of Life) 인데도 불구하고 설치하는 이유는 Ros2 패키지 중 darknet_ros 를 실행하는데에 있어서 버전 호환성 문제 때문에 foxy 대신 dashing 을 선택하게 되었다.

 

darknet_ros -> opencv 3.x 버전 호환

but, CUDA 11 -> opencv 3.x 버전 호환성 문제가 있음 (CUDA 10 으로 버전 다운그레이드)

CUDA 10 -> ubuntu 20.04 버전 호환성 문제가 있음 (ubuntu 18.04 로 버전 다운그레이드)

ubuntu 18.04 -> ros2 foxy 버전 권장하지 않음. (ROS2 dashing 으로 버전 다운그레이드)

 

만약 위 사항에 해당하지 않는다면 ubuntu 20.04 와 cuda 11 + ros2 foxy 를 추천한다.

(물론 큰 차이는 없으나 foxy 가 EOL 이 아니기 때문에 조금 더 낫다고 생각한다.)

 

 

 

다시 본론으로 돌아가서 이미지를 받은 후 컨테이너를 생성하고 컨테이너에서 ros2 dashing 을 설치한다.

(설치할 때 컨테이너 상황은 Ubuntu Linux 이므로 아래 링크로 빌드해서 설치하길 바란다.)

 

https://docs.ros.org/en/dashing/Installation/Ubuntu-Development-Setup.html

 

Building ROS 2 on Ubuntu Linux — ROS 2 Documentation: Dashing documentation

If you have already installed ROS 2 another way (either via Debians or the binary distribution), make sure that you run the below commands in a fresh environment that does not have those other installations sourced. Also ensure that you do not have source

docs.ros.org

 

설치하고 나면 아래 명령어를 입력해보자

$ echo "source /opt/ros/<ros버전이름>/setup.bash" >> ~/.bashrc //source 자동 실행

$ printenv | grep -i ROS //ROS 환경변수 출력

ROS_DISTRO="ROS버전이름" 이 잘 뜬다면 설치가 완료된 것이다.

 

이제 이미지를 만드는 작업만 하면 된다.

$ docker commit [컨테이너이름] [원하는이미지이름]:[태그]

(원하는 이미지 이름을 적을 때 자신의 docker hub 프로필 이름과 같게 적으면 tag 명령어를 쓰지 않아도 된다.)

ex. 내 프로필 이름이 DREAM 이라고 한다면 DREAM/[이미지이름]:[태그]

 

 

commit 까지 완료했다면 마지막으로 docker 레지스트리에 로그인 한 후 push 작업까지 마치면 끝난다.

$ docker login

$ docker push [docker hub에 올릴 이미지이름]

 

최종적으로 만든 이미지

 

오늘은 기존 이미지를 pull 명령어로 받아와 commit 명령어를 이용해 새로 이미지를 만드는 연습을 해보았다.

아직 DockerFile 작성과 빌드는 익숙하지 않아서 추가적으로 공부를 해보고 추후 글로 남기도록 하겠다.

 

피드백이나 궁금한 점이 있다면 댓글로 남겨주세요!

'Docker' 카테고리의 다른 글

Docker 명령어 정리  (0) 2022.01.01