Deep Study - dingdongdengdong/astra_ws GitHub Wiki
FROM ros:humble-ros-base
1. ros:humble-ros-base
๋์ ๋ค๋ฅธ ์ด๋ฏธ์ง ์ฌ์ฉ:ros:humble-ros-core
: ROS์ ํต์ฌ ํจํค์ง๋ง ํฌํจ๋์ด ์์ดros-humble-desktop
์ ์ค์นํ ํ์ ์์ด ์ฉ๋์ด ๋ ์๊ณ ๊ฐ๋ณ์ต๋๋ค. ํ์ง๋ง GUI ํ๊ฒฝ์ด๋ ์๋ฎฌ๋ ์ด์ ๊ด๋ จ ํจํค์ง๋ค์ด ํฌํจ๋์ด ์์ง ์์ ํ์ํ๋ค๋ฉด ์ถ๊ฐ์ ์ผ๋ก ์ค์นํด์ผ ํฉ๋๋ค.ros:humble-ros-desktop
:ros-humble-desktop
ํจํค์ง๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋์ด ์์ด Docker ์ด๋ฏธ์ง ํฌ๊ธฐ๋ ์ปค์ง์ง๋ง, ๋ฐ๋ก ์ค์นํ ํ์ ์์ด ๋ฐ๋ก ๋ฐ์คํฌํ ํ๊ฒฝ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.ubuntu:22.04
๋๋ ๋ค๋ฅธ OS ์ด๋ฏธ์ง: ROS๊ฐ ์ฌ์ ์ค์น๋์ง ์์ ๊ธฐ๋ณธ ์ด์์ฒด์ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ฉด, ROS๋ฅผ ์ฒ์๋ถํฐ ์ง์ ์ค์นํด์ผ ํฉ๋๋ค. ์ด๋ ์ด๋ฏธ์ง ๋น๋ ์๊ฐ์ด ํจ์ฌ ์ค๋ ๊ฑธ๋ฆฌ๊ณ , ROS ์ค์น์ ํ์ํ ์์กด์ฑ ํจํค์ง๋ค์ ๋ชจ๋ ์๋์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ต๋๋ค. ํ์ง๋ง ์ํ๋ ROS ๋ฒ์ ์ด๋ ํน์ ํ๊ฒฝ์ ๋ํ ์ธ๋ฐํ ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
ARG USERNAME=rosdev
, ARG UID=1000
, ARG GID=$UID
2. ์ด ๋ณ์๋ค์ Docker ์ปจํ ์ด๋ ๋ด์์ ์์ฑ๋ ์ฌ์ฉ์ ๊ณ์ ์ ์ด๋ฆ(USERNAME), ์ฌ์ฉ์ ID(UID), ๊ทธ๋ฃน ID(GID)๋ฅผ ์ ์ํฉ๋๋ค.
USERNAME
๋ณ๊ฒฝ:- ์:
ARG USERNAME=myuser
: ์ปจํ ์ด๋ ๋ด์์rosdev
๋์myuser
๋ผ๋ ์ด๋ฆ์ ์ฌ์ฉ์ ๊ณ์ ์ด ์์ฑ๋ฉ๋๋ค.$HOME
๋๋ ํ ๋ฆฌ๋/home/myuser
๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ด๋ ์ปจํ ์ด๋ ๋ด์์ ์์ ํ๋ ์ฌ์ฉ์ ๊ณ์ ์ ์ด๋ฆ๋ง ๋ฐ๋๋ ๊ฒ์ด๋ฏ๋ก ๊ธฐ๋ฅ์ ์ธ ํฐ ์ฐจ์ด๋ ์์ง๋ง, ์ฌ์ฉ์๊ฐ ์ต์ํ ์ด๋ฆ์ผ๋ก ์ค์ ํ์ฌ ํธ์์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ์:
UID
,GID
๋ณ๊ฒฝ:- ์:
ARG UID=1001
,ARG GID=1001
: ์ปจํ ์ด๋ ๋ด์์ ์์ฑ๋ ์ฌ์ฉ์์ UID์ GID๊ฐ 1001๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. - ๊ฐ์ฅ ์ค์ํ ์ฐจ์ด์ : ํธ์คํธ ๋จธ์ (Docker๋ฅผ ์คํํ๋ ์ปดํจํฐ)๊ณผ ์ปจํ
์ด๋ ๊ฐ์ ํ์ผ ๊ถํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ค์ํฉ๋๋ค.
- ๋์ผํ๊ฒ ์ค์ : ๋ง์ฝ ํธ์คํธ ๋จธ์ ์์ ์์
ํ๋ ์ฌ์ฉ์ ๊ณ์ ์ UID/GID์ ์ปจํ
์ด๋ ๋ด ์ฌ์ฉ์ ๊ณ์ ์ UID/GID๊ฐ ๋์ผํ๋ค๋ฉด, ํธ์คํธ์ ์ปจํ
์ด๋ ๊ฐ์ ํ์ผ์ ๊ณต์ ํ ๋ ๊ถํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค. ์๋ฅผ ๋ค์ด, ํธ์คํธ์์ ์์ฑํ ํ์ผ์ ์ปจํ
์ด๋ ๋ด์์ ์์ ํ๊ฑฐ๋, ์ปจํ
์ด๋ ๋ด์์ ์์ฑํ ํ์ผ์ ํธ์คํธ์์ ์ ๊ทผํ ๋ ๊ถํ ์ถฉ๋์ด ๋ฐ์ํ์ง ์์
sudo
์์ด๋ ์์ ๋กญ๊ฒ ํ์ผ์ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. - ๋ค๋ฅด๊ฒ ์ค์ : UID/GID๊ฐ ๋ค๋ฅด๋ฉด, ํธ์คํธ์ ์ปจํ
์ด๋ ๊ฐ์ ํ์ผ์ ๊ณต์ ํ ๋ ๊ถํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ปจํ
์ด๋์์ ์์ฑ๋ ํ์ผ์ ํธ์คํธ์์ ๋ค๋ฅธ ์ฌ์ฉ์(UID๊ฐ ๋ค๋ฅธ)๊ฐ ์์ ํ ๊ฒ์ผ๋ก ์ธ์๋์ด ์ ๊ทผ ๊ถํ์ด ์๊ฑฐ๋,
sudo
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์ ๋ถํธํจ์ ์ด๋ํ ์ ์์ต๋๋ค.
- ๋์ผํ๊ฒ ์ค์ : ๋ง์ฝ ํธ์คํธ ๋จธ์ ์์ ์์
ํ๋ ์ฌ์ฉ์ ๊ณ์ ์ UID/GID์ ์ปจํ
์ด๋ ๋ด ์ฌ์ฉ์ ๊ณ์ ์ UID/GID๊ฐ ๋์ผํ๋ค๋ฉด, ํธ์คํธ์ ์ปจํ
์ด๋ ๊ฐ์ ํ์ผ์ ๊ณต์ ํ ๋ ๊ถํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค. ์๋ฅผ ๋ค์ด, ํธ์คํธ์์ ์์ฑํ ํ์ผ์ ์ปจํ
์ด๋ ๋ด์์ ์์ ํ๊ฑฐ๋, ์ปจํ
์ด๋ ๋ด์์ ์์ฑํ ํ์ผ์ ํธ์คํธ์์ ์ ๊ทผํ ๋ ๊ถํ ์ถฉ๋์ด ๋ฐ์ํ์ง ์์
- ์:
RUN apt install -y --no-install-recommends ... ros-humble-desktop
3. ros-humble-desktop
๋์ ๋ค๋ฅธ ROS ํจํค์ง ์ค์น:ros-humble-desktop-full
: ROS ๋ฐ์คํฌํ ํ๊ฒฝ๋ฟ๋ง ์๋๋ผ ์๋ฎฌ๋ ์ด์ ๋๊ตฌ(Gazebo), 2D/3D ์๋ฎฌ๋ ์ดํฐ, ๋ด๋น๊ฒ์ด์ ๋ฑ ๋ ๋ง์ ํจํค์ง๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด๋ฏธ์ง ํฌ๊ธฐ๊ฐ ๋ ์ปค์ง์ง๋ง, ์ถ๊ฐ์ ์ธ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์์ด ๋ฐ๋ก ๋ค์ํ ROS ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.ros-humble-ros-base
(์ด๋ฏธ์ง์์ ์ด๋ฏธ ํฌํจ): ROS์ ํต์ฌ ํจํค์ง๋ง ํฌํจ๋ฉ๋๋ค. ๋ง์ฝFROM
์์ros:humble-ros-base
๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ด ๋ถ๋ถ์ ๋ถํ์ํ๊ฑฐ๋, ๋ค๋ฅธ ์ต์ํ์ ํจํค์ง๋ง ์ค์นํ ๋ ์ฌ์ฉํฉ๋๋ค.- ํน์ ROS ํจํค์ง:
ros-humble-slam-toolbox
,ros-humble-navigation2
๋ฑ ํน์ ๊ธฐ๋ฅ์ ํ์ํ ํจํค์ง๋ง ์ค์นํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๊ณ ํ์ํ ๊ธฐ๋ฅ๋ง ํฌํจํ ์ ์์ต๋๋ค.
RUN groupadd -g $GID $USERNAME && useradd -lm -u $UID -g $USERNAME -s /bin/bash $USERNAME
4. ์ด ๋ถ๋ถ์ ์์์ ์ค๋ช
ํ UID
์ GID
๋ณ์์ ๋ณ๊ฒฝ์ ๋ฐ๋ผ ์ง์ ์ ์ผ๋ก ์ํฅ์ ๋ฐ์ต๋๋ค. ๋ณ์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์์ฑ๋๋ ์ฌ์ฉ์์ UID์ GID๊ฐ ๊ทธ ๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
WORKDIR /home/$USERNAME/ros2_ws
5. ros2_ws
๋์ ๋ค๋ฅธ ์ํฌ์คํ์ด์ค ์ด๋ฆ ์ฌ์ฉ:- ์:
WORKDIR /home/$USERNAME/my_project
: ์ปจํ ์ด๋์ ๊ธฐ๋ณธ ์์ ๋๋ ํ ๋ฆฌ๊ฐ/home/$USERNAME/my_project
๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ์ปจํ ์ด๋์ ์ ์ํ์ ๋ ์ฒ์์ผ๋ก ์์นํ๊ฒ ๋๋ ๋๋ ํ ๋ฆฌ์ด์,ros2_ws
๋์ ๋ค๋ฅธ ์ด๋ฆ์ ROS ์ํฌ์คํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ ๋ ๋ณ๊ฒฝํฉ๋๋ค. ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ ๊ฒฝ์ฐ ๊ฐ ํ๋ก์ ํธ๋ณ๋ก ์ํฌ์คํ์ด์ค ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ง์ ํ์ฌ ํผ๋์ ํผํ ์ ์์ต๋๋ค.
- ์:
.bashrc
์ค์ (์์ค ๊ฒฝ๋ก ๋ฐ ํ๊ฒฝ ๋ณ์)
6. source /opt/ros/$ROS_DISTRO/setup.bash
:ROS_DISTRO
๋ ์ด Dockerfile์์๋humble
๋ก ๊ณ ์ ๋์ด ์์ต๋๋ค. ๋ง์ฝFROM
์ด๋ฏธ์ง์์ ๋ค๋ฅธ ROS ๋ฐฐํฌํ(์:ros:iron-ros-base
)์ ์ฌ์ฉํ๋ค๋ฉด$ROS_DISTRO
๊ฐ๋iron
์ผ๋ก ๋ณ๊ฒฝ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ROS ํ๊ฒฝ ์ค์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ก๋๋์ง ์์ros2
๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
source /home/$USERNAME/ros2_ws/install/setup.bash
:ros2_ws
๋์ ๋ค๋ฅธ ์ํฌ์คํ์ด์ค ์ด๋ฆ์ ์ฌ์ฉํ๋ค๋ฉด, ์ด ๊ฒฝ๋ก๋ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด ์ฌ์ฉ์๊ฐ ๋น๋ํ ROS ํจํค์ง๋ฅผ ์คํํ ์ ์์ต๋๋ค.
COPY ./ros_entrypoint.sh /
7. ./ros_entrypoint.sh
๋์ ๋ค๋ฅธ ํ์ผ ์ฌ์ฉ:- ๋ง์ฝ ์ปจํ
์ด๋ ์์ ์ ์คํ๋ ์คํฌ๋ฆฝํธ์ ์ด๋ฆ์ด๋ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด ์ด ๋ถ๋ถ์ ์์ ํฉ๋๋ค.
ros_entrypoint.sh
๋ ์ผ๋ฐ์ ์ผ๋ก ROS ํ๊ฒฝ ์ค์ ์ ๋ก๋ํ๊ณCMD
๋ก ์ง์ ๋ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ค๋ฅธ ์์ ๋ก์ง์ด ํ์ํ๋ค๋ฉด ์๋ก์ด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ฌ ๋ณต์ฌํ๊ณENTRYPOINT
๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
- ๋ง์ฝ ์ปจํ
์ด๋ ์์ ์ ์คํ๋ ์คํฌ๋ฆฝํธ์ ์ด๋ฆ์ด๋ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด ์ด ๋ถ๋ถ์ ์์ ํฉ๋๋ค.
ENTRYPOINT ["/ros_entrypoint.sh"]
8. "/ros_entrypoint.sh"
๋์ ๋ค๋ฅธ ๋ช ๋ น์ด ์ฌ์ฉ:- ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ํญ์ ์คํ๋๋ ๊ธฐ๋ณธ ๋ช
๋ น์ด์
๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ ์ผ๋ฐ์ ์ผ๋ก ROS ํ๊ฒฝ์ ์ค์ ํ๊ณ
CMD
์์ ์ ๊ณต๋๋ ๋ช ๋ น์ ์คํํฉ๋๋ค. ๋ง์ฝ ๋ค๋ฅธ ์ข ๋ฅ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋ ์์ ์ ์คํํ๊ณ ์ถ๋ค๋ฉด ์ด ๋ถ๋ถ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. - ์:
ENTRYPOINT ["python3", "/app/my_script.py"]
: ์ปจํ ์ด๋ ์์ ์ ํญ์ Python ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
- ์ปจํ
์ด๋๊ฐ ์์๋ ๋ ํญ์ ์คํ๋๋ ๊ธฐ๋ณธ ๋ช
๋ น์ด์
๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ ์ผ๋ฐ์ ์ผ๋ก ROS ํ๊ฒฝ์ ์ค์ ํ๊ณ
CMD ["bash"]
9. ["bash"]
๋์ ๋ค๋ฅธ ๋ช ๋ น์ด ์ฌ์ฉ:ENTRYPOINT
๊ฐ ์ง์ ๋์ง ์์๊ฑฐ๋,ENTRYPOINT
๊ฐ ์คํฌ๋ฆฝํธ์ธ ๊ฒฝ์ฐ ํด๋น ์คํฌ๋ฆฝํธ๊ฐ ์คํ๋ ํCMD
์ ์ง์ ๋ ๋ช ๋ น์ด๊ฐ ์คํ๋ฉ๋๋ค.- ํ์ฌ ์ค์ ์
bash
์ ธ์ ์์ํ๋ฏ๋ก ์ปจํ ์ด๋์ ์ง์ ํ์ ๋ ๋ช ๋ น์ด๋ฅผ ์ง์ ์ ๋ ฅํ ์ ์์ต๋๋ค. - ์:
CMD ["ros2", "launch", "my_package", "my_node.launch.py"]
: ์ปจํ ์ด๋๊ฐ ์์๋ ๋ ํน์ ROS ๋ ธ๋๋ฅผ ์๋์ผ๋ก ์คํํฉ๋๋ค. ์ด๋ ROS ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ ๋ ์ ์ฉํฉ๋๋ค. - ์:
CMD ["sleep", "infinity"]
: ์ปจํ ์ด๋๋ฅผ ๊ณ์ ์คํ ์ํ๋ก ์ ์งํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค. (์ด ๊ฒฝ์ฐdocker exec
๋ฑ์ผ๋ก ์ปจํ ์ด๋์ ์ ์ํ์ฌ ์์ ํฉ๋๋ค.)
์์ฝ ๋ฐ ์ฃผ์ ๊ณ ๋ ค์ฌํญ:
๋ณ์ ๊ฐ๋ค์ ๋ณ๊ฒฝํจ์ผ๋ก์จ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ์ฐจ์ด๊ฐ ๋ฐ์ํฉ๋๋ค:
- ๊ธฐ๋ฐ ํ๊ฒฝ: ์ฌ์ฉํ๋ Docker ์ด๋ฏธ์ง์ ๋ฐ๋ผ ROS ์ค์น ์ํ, ํฌ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ์ด๊ธฐ ์ค์ ์ด ๋ฌ๋ผ์ง๋๋ค.
- ์ฌ์ฉ์ ๊ณ์ ๋ฐ ๊ถํ:
USERNAME
,UID
,GID
๋ ์ปจํ ์ด๋ ๋ด์์ ์์ ํ ์ฌ์ฉ์์ ๊ณ์ ์ ๋ณด์ ๊ถํ์ ๊ฒฐ์ ํ๋ฉฐ, ํธ์คํธ์์ ํ์ผ ๊ณต์ ์ ๊ถํ ๋ฌธ์ ์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ํนํUID
์GID
๋ ํธ์คํธ์ ์ปจํ ์ด๋ ๊ฐ์ ๊ถํ ์ผ์น๋ฅผ ์ํด ์ค์ํฉ๋๋ค. - ์ค์น๋๋ ROS ํจํค์ง:
apt install
์์ ์ค์นํ๋ ROS ํจํค์ง์ ๋ฐ๋ผ ์ปจํ ์ด๋์ ๊ธฐ๋ฅ๊ณผ ํฌ๊ธฐ๊ฐ ๋ฌ๋ผ์ง๋๋ค. ํ์ํ ์ต์ํ์ ํจํค์ง๋ง ์ค์นํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ต์ ํํ๊ฑฐ๋, ๋ชจ๋ ๊ธฐ๋ฅ์ ํฌํจํ์ฌ ํธ๋ฆฌ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. - ์ํฌ์คํ์ด์ค ๋ฐ ์์
๊ฒฝ๋ก:
WORKDIR
๋ฐ.bashrc
์ ์ํฌ์คํ์ด์ค ๊ฒฝ๋ก๋ ์ฌ์ฉ์์ ์์ ํ๊ฒฝ๊ณผ ROS ํจํค์ง ๋น๋ ๋ฐ ์คํ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. - ์ปจํ
์ด๋ ์์ ๋์:
ENTRYPOINT
์CMD
๋ ์ปจํ ์ด๋๊ฐ ์คํ๋ ๋ ์ด๋ค ๋ช ๋ น์ด๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ์คํ๋ ์ง๋ฅผ ์ ์ํ๋ฉฐ, ์ด๋ ์ปจํ ์ด๋์ ์ฉ๋(๊ฐ๋ฐ ํ๊ฒฝ, ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ ๋ฑ)์ ๋ฐ๋ผ ๋งค์ฐ ์ค์ํฉ๋๋ค.
์ด๋ฌํ ์ฐจ์ด์ ๋ค์ ์ดํดํ๊ณ ๊ฐ ๋ณ์์ ๊ฐ์ ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ๊ณผ ๊ฐ๋ฐ ํ๊ฒฝ์ ๋ง๊ฒ ์กฐ์ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
FROM ros:humble-ros-base
ํ RUN apt install ros-humble-desktop
vs. FROM ros:humble-ros-desktop
๋ฐ๋ก ์ฌ์ฉ)์ ์ฐจ์ด์
๋ ๊ฐ์ง ๋ฐฉ์(๋น์ : ์๋์ฐจ ๊ตฌ๋งค vs. ์กฐ๋ฆฝ
์ฐ๋ฆฌ๊ฐ ์๋์ฐจ๋ฅผ ๊ตฌ๋งคํ๋ค๊ณ ์๊ฐํด ๋ด ์๋ค.
-
FROM ros:humble-ros-desktop
๋ฐฉ์:- ์์ฑ๋ ์๋์ฐจ(ํ์ต์ ๋ชจ๋ธ)๋ฅผ ๊ตฌ๋งคํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ์ฅ์ :
- ๊ตฌ๋งค ์ฆ์ ์ด์ ํ ์ ์์ต๋๋ค. (Dockerfile์ด ๊ฐ๊ฒฐํ๊ณ , ๋น๋ ํ ๋ฐ๋ก ์ฌ์ฉ ๊ฐ๋ฅ)
- ํค๋๋ผ์ดํธ, ์์ด์ปจ, ๋ด๋น๊ฒ์ด์ ๋ฑ ํ์ํ ๊ธฐ๋ฅ์ด ๋ชจ๋ ๊ธฐ๋ณธ์ผ๋ก ์ฅ์ฐฉ๋์ด ์์ต๋๋ค. (ROS ๋ฐ์คํฌํ์ ํ์ํ Rviz, Gazebo ๋ฑ์ด ๋ชจ๋ ํฌํจ)
- ๋จ์ :
- ๋ด๊ฐ ํ์ ์๋ ๊ธฐ๋ฅ(์: ์ ๋ฃจํ๋ ๊ณ ์ฑ๋ฅ ์คํผ์ปค)๊น์ง๋ ํฌํจ๋์ด ์์ด, ์ฐจ๊ฐ์ด ๋น์ธ๊ณ (์ด๋ฏธ์ง ์ฉ๋์ด ํฌ๊ณ ), ๋ฌด๊ฒ๋ ๋ ๋๊ฐ๋๋ค. (๋ถํ์ํ ํจํค์ง ํฌํจ์ผ๋ก ์ด๋ฏธ์ง ํฌ๊ธฐ ์ฆ๊ฐ)
- ๋์ค์ ํน์ ๋ถํ๋ง ๋ค๋ฅธ ๋ธ๋๋๋ก ๋ฐ๊พธ๊ณ ์ถ์ด๋, ๊ธฐ์กด์ ์ฅ์ฐฉ๋ ๊ฒ์ ๋ผ์ด๋ด๊ณ ๋ค์ ์ค์นํด์ผ ํ๋ฏ๋ก ๋ฒ๊ฑฐ๋กญ์ต๋๋ค. (์ด๋ฏธ์ง ๋ ์ด์ด ๊ตฌ์กฐ์ ํน์ ํจํค์ง๋ง ์ ๊ฑฐํ๊ฑฐ๋ ๊ต์ฒดํ๊ธฐ ์ด๋ ค์)
-
FROM ros:humble-ros-base
ํRUN apt install ros-humble-desktop
๋ฐฉ์:- ์๋์ฐจ ๋ผ๋(์์)๋ฅผ ๊ตฌ๋งคํ๊ณ , ๊ทธ ์์ ํ์ํ ๋ถํ๋ค์ ํ๋์ฉ ์กฐ๋ฆฝํ๋ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
- ์ฅ์ :
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋ผ๋๋ง ์๊ธฐ ๋๋ฌธ์ ์ด๊ธฐ ๋น์ฉ์ด ์ ๋ ดํ๊ณ (base ์ด๋ฏธ์ง ์ฉ๋์ด ์์), ๋ ๋น ๋ฅด๊ฒ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. (์ด๊ธฐ ๋ ์ด์ด ๋ค์ด๋ก๋ ๋ฐ ์บ์ฑ ๋น ๋ฆ)
- ๋ด๊ฐ ์ํ๋ ํค๋๋ผ์ดํธ, ์์ด์ปจ, ๋ด๋น๊ฒ์ด์
์ ์ง์ ์ ํํด์ ์ฅ์ฐฉํ ์ ์์ต๋๋ค. (ํ์ํ
apt install
ํจํค์ง๋ฅผ ์ ํ์ ์ผ๋ก ์ถ๊ฐ ๊ฐ๋ฅ) - ๋์ค์ ๋ด๋น๊ฒ์ด์
์์คํ
๋ง ์ต์ ๋ชจ๋ธ๋ก ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด, ๋ด๋น๊ฒ์ด์
๋ถํ๋ง ๊ต์ฒดํ๋ฉด ๋ฉ๋๋ค. ๋ค๋ฅธ ๋ถํ๋ค์ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค. (์บ์ฑ ํจ์จ์ฑ:
base
๋ ์ด์ด๋ ๊ทธ๋๋ก ๋๊ณapt install
๋ ์ด์ด๋ง ๋ค์ ๋น๋) - ๊ผญ
ros-humble-desktop
์ด ์๋๋๋ผ๋,ros-humble-ros-core
๋ง ์ค์นํ๊ฑฐ๋, ํน์ ์๋ฎฌ๋ ์ดํฐ ํจํค์ง๋ง ์ค์นํ๋ ๋ฑ ๋งค์ฐ ์ ์ฐํ๊ฒ ๋ง์ถคํ ์๋์ฐจ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ๋จ์ :
- ์์ฑ๋ ์๋์ฐจ๋ฅผ ๋ง๋๋ ๋ฐ ์ถ๊ฐ์ ์ธ ์๊ฐ๊ณผ ๋
ธ๋ ฅ์ด ํ์ํฉ๋๋ค. (Dockerfile์
RUN apt install
๋ช ๋ น์ด๊ฐ ์ถ๊ฐ๋๊ณ , ์ด ๊ณผ์ ์์ ์๊ฐ์ด ์์๋จ) - ์กฐ๋ฆฝ ๊ณผ์ ์์ ์ค์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. (์ค์น ์ค ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ)
- ์ต์ข ์ ์ผ๋ก๋ ์์ฑ๋ ์๋์ฐจ์ ๊ธฐ๋ฅ์ ์ผ๋ก๋ ๊ฐ์ง๋ง, ๋ฏธ๋ฌํ ์ฐจ์ด(์: ๊ฐ ๋ถํ์ ๋ฒ์ , ์ค์น ์์์ ๋ฐ๋ฅธ ์ข ์์ฑ ์ฐจ์ด)๊ฐ ์์ ์ ์์ต๋๋ค.
- ์์ฑ๋ ์๋์ฐจ๋ฅผ ๋ง๋๋ ๋ฐ ์ถ๊ฐ์ ์ธ ์๊ฐ๊ณผ ๋
ธ๋ ฅ์ด ํ์ํฉ๋๋ค. (Dockerfile์
Docker ๋ ์ด์ด ๊ด์ ์์ ๋ ๊น์ด ์ดํดํ๊ธฐ:
Docker ์ด๋ฏธ์ง๋ ์ฌ๋ฌ ๊ฐ์ ์ฝ๊ธฐ ์ ์ฉ(read-only) ๋ ์ด์ด๊ฐ ์์ฌ ๋ง๋ค์ด์ง๋๋ค. ๊ฐ Dockerfile ๋ช
๋ น(ํนํ FROM
, RUN
, COPY
, ADD
)์ ์๋ก์ด ๋ ์ด์ด๋ฅผ ์์ฑํฉ๋๋ค.
-
FROM ros:humble-ros-desktop
์ ๊ฒฝ์ฐ:- Docker Hub์์
ros:humble-ros-desktop
์ด๋ฏธ์ง๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค. ์ด ์ด๋ฏธ์ง๋ ์ด๋ฏธ ์๋ง์ ๋ ์ด์ด๋ค์ด ํฉ์ณ์ ธros-base
ํ๊ฒฝ ์์ros-humble-desktop
๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ํจํค์ง๋ค์ ์ค์นํ ์ํ์ ๋๋ค. - ์ฆ,
ros-humble-desktop
์ ์ค์นํ๋ ๋ชจ๋apt install
๋ช ๋ น๊ณผ ๊ทธ ๊ฒฐ๊ณผ๋ฌผ๋ค์ด ์ด๋ฏธ ํ๋์ ๊ฑฐ๋ํ ์ฌ์ ๋น๋๋ ๋ ์ด์ด ๋ฌถ์์ผ๋ก ์กด์ฌํฉ๋๋ค. - ๋น์ ์ Dockerfile์ ์ด ๊ฑฐ๋ํ ๋ ์ด์ด ๋ฌถ์ ์์ ์๋ก์ด ๋ ์ด์ด(์: ์ฌ์ฉ์ ์์ฑ, ์ํฌ์คํ์ด์ค ์์ฑ ๋ฑ)๋ฅผ ์ถ๊ฐํ๊ฒ ๋ฉ๋๋ค.
- Docker Hub์์
-
FROM ros:humble-ros-base
ํRUN apt install ros-humble-desktop
์ ๊ฒฝ์ฐ:FROM ros:humble-ros-base
: ์ฒซ ๋ฒ์งธ ๋ ์ด์ด๋ros-base
์ด๋ฏธ์ง์ ๋๋ค. ์ด ์ด๋ฏธ์ง๋ros-desktop
์ ๋นํด ํจ์ฌ ์์ต๋๋ค.RUN apt update -q && apt upgrade -q -y
: ๋ ๋ฒ์งธ ๋ ์ด์ด๋ ์์คํ ์ ๋ฐ์ดํธ๋ฅผ ์ํํฉ๋๋ค.RUN apt install -y --no-install-recommends ... ros-humble-desktop
: ์ธ ๋ฒ์งธ ๋ ์ด์ด์์ros-humble-desktop
ํจํค์ง ๋ฐ ๋ค๋ฅธ ํ์ํ ํจํค์ง๋ค์ ์๋กญ๊ฒ ์ค์นํฉ๋๋ค. ์ด ๊ณผ์ ์์apt install
๋ช ๋ น์ ์ํด ํ์ผ ์์คํ ์ ๋ง์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๊ณ , ์ด ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ก์ด ๋ ์ด์ด์ ๊ธฐ๋ก๋ฉ๋๋ค.RUN apt clean && rm -rf /var/lib/apt/lists/*
: ๋ค ๋ฒ์งธ ๋ ์ด์ด์์ ์ค์น ํ ๋จ์ ์์ ํ์ผ์ ์ ๊ฑฐํฉ๋๋ค. ์ด๋ ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
ํต์ฌ ์ฐจ์ด์ ์ ์บ์ฑ(Caching)์ ๋๋ค.
๋ง์ฝ ๋น์ ์ด Dockerfile์ RUN apt install
๋ผ์ธ์ ๋ณ๊ฒฝํ๊ณ ์ถ๋ค๋ฉด:
-
FROM ros:humble-ros-desktop
๋ฐฉ์: ์ด ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ฉด,ros-humble-desktop
์ ๋ด์ฉ์ ์ด๋ฏธ ์ฒซ ๋ฒ์งธ ๋ ์ด์ด์ ๊ณ ์ ๋์ด ์์ต๋๋ค. ๋ง์ฝ ๋น์ ์ดros-humble-desktop
์ ํน์ ๊ตฌ์ฑ์์๋ง ๋ฐ๊พธ๊ฑฐ๋, ๋ค๋ฅธ ROS ํจํค์ง(์:ros-humble-navigation2
)๋ฅผ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด,apt install
์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ด ์ถ๊ฐ๋apt install
์ros-humble-desktop
์ด ์ด๋ฏธ ์ค์น๋ ๋ ์ด์ด ์์ ์๋ก์ด ๋ ์ด์ด๋ฅผ ์์ฑํ๊ฒ ๋๋ฏ๋ก, ์ค๋ณต๋๊ฑฐ๋ ๋ถํ์ํ ํ์ผ์ด ๋ง์์ง ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค. ๋ํ, ์ด๋ฏธ ์ค์น๋ ๊ฒ์ ์ ๊ฑฐํ๋ ๊ณผ์ ์ ๋ ๋ณต์กํ๊ณ , ์ด๋ฏธ์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๋๋ฐ ํ๊ณ๊ฐ ์์ต๋๋ค. -
FROM ros:humble-ros-base
ํRUN apt install ...
๋ฐฉ์:- ๋ง์ฝ ๋น์ ์ด
ros-humble-desktop
๋์ros-humble-perception
์ ์ค์นํ๊ณ ์ถ๋ค๋ฉด,apt install
๋ผ์ธ๋ง ์์ ํ๋ฉด ๋ฉ๋๋ค. - Docker๋
FROM
๋ ์ด์ด์apt update
๋ ์ด์ด๋ ์บ์์์ ์ฌ์ฌ์ฉํ๊ณ ,apt install
๋ ์ด์ด๋ถํฐ ์๋กญ๊ฒ ๋น๋ํฉ๋๋ค. ์ด๋ ์ ์ฒด ์ด๋ฏธ์ง ๋น๋ ์๊ฐ์ ๋จ์ถ์ํค๊ณ , ์ํ๋ ํจํค์ง ๊ตฌ์ฑ์ผ๋ก ์ ์ฐํ๊ฒ ๋ณ๊ฒฝํ ์ ์๊ฒ ํฉ๋๋ค.
- ๋ง์ฝ ๋น์ ์ด
์ค์ฉ์ ์ธ ๊ด์ ์์์ ์ ํ:
-
๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ๋น ๋ฅธ ์์: ๋ง์ฝ ๋น์ ์ ํ๋ก์ ํธ๊ฐ ROS ๋ฐ์คํฌํ ํ๊ฒฝ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ์๋ก ํ๊ณ , ์ด๋ฏธ์ง ํฌ๊ธฐ์ ํฌ๊ฒ ๋ฏผ๊ฐํ์ง ์๋ค๋ฉด
FROM ros:humble-ros-desktop
์ด ๊ฐ์ฅ ๋จ์ํ๊ณ ํจ์จ์ ์ ๋๋ค. "ํ ๋ฒ์ ์ฒ๋ฆฌ"ํ๋ค๋ ์ธก๋ฉด์์ ์ข์ต๋๋ค. -
์ธ๋ถ ์ ์ด ๋ฐ ์ต์ ํ: ๋ง์ฝ ๋น์ ์ด ์ต์ข ์ด๋ฏธ์ง์ ํฌ๊ธฐ๋ฅผ ์ต์ํํด์ผ ํ๊ฑฐ๋, ํน์ ROS ํจํค์ง๋ง ์ค์นํ๊ณ ์ถ์ ๋, ํน์ ๋น๋ ๊ณผ์ ์ ํน์ ๋จ๊ณ์์ ์ถ๊ฐ์ ์ธ ์ปค์คํฐ๋ง์ด์ง์ ํ๊ณ ์ถ์ ๋๋
FROM ros:humble-ros-base
ํ ํ์ํ ํจํค์ง๋ฅผRUN apt install
๋ก ์ถ๊ฐํ๋ ๋ฐฉ์์ด ๋ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํฉ๋๋ค. ์ด๋ ๋ง์น ๋ ๊ณ ๋ธ๋ก์ฒ๋ผ ๋ด๊ฐ ์ํ๋ ๊ตฌ์ฑ ์์๋ฅผ ์ ํํด์ ์กฐ๋ฆฝํ๋ ๋ฐฉ์์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์ ๊ณต๋ Dockerfile์ ros-humble-ros-base
๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ros-humble-desktop
์ ๋ช
์์ ์ผ๋ก ์ค์นํ๋๋ฐ, ์ด๋ ์๋ง๋ ๋น๋ ๊ณผ์ ์ ํฌ๋ช
์ฑ๊ณผ ์ ์ด๋ ฅ์ ๋์ด๋ ค๋ ์๋์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ฌ์ฉ์๊ฐ apt install
๋ถ๋ถ์ ์์ ํ์ฌ ๋ค๋ฅธ ROS ํจํค์ง๋ฅผ ์ค์นํ๊ฑฐ๋, ๋ถํ์ํ ๊ฒ์ ์ ๊ฑฐํ์ฌ ์ด๋ฏธ์ง๋ฅผ ์ต์ ํํ๊ธฐ์ ์ฉ์ดํฉ๋๋ค.