코딩관계론

[Docker] ros:melodic을 python3.7버전으로 업그레이드(도커 파일 있음) 본문

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
반응형