TroubleShooting
[Docker] ros:melodic을 python3.7버전으로 업그레이드(도커 파일 있음)
개발자_티모
2022. 10. 29. 01:16
반응형
프로젝트를 하는 중 python3.7에서 지원하는 pkg를 사용해야만 하는 상황에 직면했다. 우리는 build된 docker 이미지만 있는 상황이었다.
먼저 ros version을 확인하기 위해 docker inspect 명령어를 이용해 조사헸더니 ros:melodic버전이었다.
따라서 docker hub에서 제공하는 공식 ros:melodic을 이용하기로 했다. 특이한 점은 ros:melodic의 기본 파이썬 버전이 아니라 3.7파이썬을 사용하기 위해서 python3.7을 다운로드해준다.
FROM osrf/ros:melodic-desktop-full-bionic
RUN apt-get update && apt-get install -y python3.7 python3-pip
python 명령어가 3.7버전으로 실행 할 수 있도록 하기 위해서 모든 심볼릭 링크 변경해준다
이젠 ros가 python3의 site-pkg에 다시 설치되면 되는데 아래의 두 명령어를 사용하면 간단하게 해결할 수 있다. 모종의 이유에서 rosbridge-server는 자동으로 설치되지 않아 직접 설치하는 방식으로 변경했다.
RUN apt install -y python3-pip python3-all-dev python3-rospkg
RUN apt install -y ros-melodic-desktop-full --fix-missing
RUN apt-get install -y ros-melodic-rosbridge-server
다음으로 pip freeze로 설치된 패키지를 추출했다.해당하는 패키지들을 설치하도록 진행했다.
python3 -m pip freeze > docker-requirement.txt
COPY ./docker-requirements.txt .
RUN python3 -m pip install -r docker-requirements.txt
엄청난 꿀팀은 패키지 설치하는 부분을 맨 밑으로 옮기는 것이다. 왜냐하면 파이썬3.7에서 지원하는 버전으로 업그레이드를 해야 하기 떄문에 build가정에서 실패가 난다. 해당 명령어가 상위에 위치되어 있다면 파일의 수정 후 build하는 과정으로 인해 밑으로는 캐시를 쓸 수 없기 때문이다.
-- no-cache--build start
COPY ./docker-requirements.txt .
RUN python3 -m pip install -r docker-requirements.txt
- no-cache--build on-going
하지만 해당 구문이 최하위로 가게 된다면 해당 부분만 --no-cache로 진행될 것이다
--build - using - cache
--build - using - cache
--build - using - cache
-- no-cache--build start
COPY ./docker-requirements.txt .
RUN python3 -m pip install -r docker-requirements.txt
- no-cache--build on-going
최종 완성된 도커 파일입니다.
FROM osrf/ros:melodic-desktop-full-bionic
RUN apt-get update && apt-get install -y python3.7 python3-pip
RUN python3.7 -m pip install pip
RUN python3 -m pip install --upgrade pip
RUN rm /usr/bin/python
RUN rm /usr/bin/python3
#Add default symbolic link
RUN ln -s /usr/bin/python3.7 /usr/bin/python3
RUN ln -s /usr/bin/python3.7 /usr/bin/python
RUN apt-get update && apt-get install -y \
build-essential \
libsm6 \
libglib2.0-0 \
libxrender1 \
libxext6 \
python3.7-dev \
build-essential \
libsnappy-dev \
aptitude \
vim
#For ROS
RUN apt install -y python3-pip python3-all-dev python3-rospkg
RUN apt install -y ros-melodic-desktop-full --fix-missing
RUN apt-get install -y ros-melodic-rosbridge-server
RUN python3 -m pip install --upgrade --ignore-installed pip setuptools
#For package
COPY ./docker-requirements.txt .
RUN python3 -m pip install -r docker-requirements.txt
반응형