Deep Study - dingdongdengdong/astra_ws GitHub Wiki

1. FROM ros:humble-ros-base

  • 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 ๋ฒ„์ „์ด๋‚˜ ํŠน์ • ํ™˜๊ฒฝ์— ๋Œ€ํ•œ ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2. ARG USERNAME=rosdev, ARG UID=1000, ARG GID=$UID

์ด ๋ณ€์ˆ˜๋“ค์€ 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๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • ์‹œ ๋ถˆํŽธํ•จ์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. RUN apt install -y --no-install-recommends ... ros-humble-desktop

  • 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 ๋“ฑ ํŠน์ • ๊ธฐ๋Šฅ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋งŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. RUN groupadd -g $GID $USERNAME && useradd -lm -u $UID -g $USERNAME -s /bin/bash $USERNAME

์ด ๋ถ€๋ถ„์€ ์œ„์—์„œ ์„ค๋ช…ํ•œ UID์™€ GID ๋ณ€์ˆ˜์˜ ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ ์ง์ ‘์ ์œผ๋กœ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์ƒ์„ฑ๋˜๋Š” ์‚ฌ์šฉ์ž์˜ UID์™€ GID๊ฐ€ ๊ทธ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

5. WORKDIR /home/$USERNAME/ros2_ws

  • ros2_ws ๋Œ€์‹  ๋‹ค๋ฅธ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ด๋ฆ„ ์‚ฌ์šฉ:
    • ์˜ˆ: WORKDIR /home/$USERNAME/my_project: ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธฐ๋ณธ ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ /home/$USERNAME/my_project๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘์†ํ–ˆ์„ ๋•Œ ์ฒ˜์Œ์œผ๋กœ ์œ„์น˜ํ•˜๊ฒŒ ๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ด์ž, ros2_ws ๋Œ€์‹  ๋‹ค๋ฅธ ์ด๋ฆ„์˜ ROS ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ ๊ฐ ํ”„๋กœ์ ํŠธ๋ณ„๋กœ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ด๋ฆ„์„ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ•˜์—ฌ ํ˜ผ๋™์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6. .bashrc ์„ค์ • (์†Œ์Šค ๊ฒฝ๋กœ ๋ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜)

  • 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 ํŒจํ‚ค์ง€๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

7. COPY ./ros_entrypoint.sh /

  • ./ros_entrypoint.sh ๋Œ€์‹  ๋‹ค๋ฅธ ํŒŒ์ผ ์‚ฌ์šฉ:
    • ๋งŒ์•ฝ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ ์‹คํ–‰๋  ์Šคํฌ๋ฆฝํŠธ์˜ ์ด๋ฆ„์ด๋‚˜ ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ros_entrypoint.sh๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ROS ํ™˜๊ฒฝ ์„ค์ •์„ ๋กœ๋“œํ•˜๊ณ  CMD๋กœ ์ง€์ •๋œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‹œ์ž‘ ๋กœ์ง์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๋ณต์‚ฌํ•˜๊ณ  ENTRYPOINT๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

8. ENTRYPOINT ["/ros_entrypoint.sh"]

  • "/ros_entrypoint.sh" ๋Œ€์‹  ๋‹ค๋ฅธ ๋ช…๋ น์–ด ์‚ฌ์šฉ:
    • ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ํ•ญ์ƒ ์‹คํ–‰๋˜๋Š” ๊ธฐ๋ณธ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ROS ํ™˜๊ฒฝ์„ ์„ค์ •ํ•˜๊ณ  CMD์—์„œ ์ œ๊ณต๋˜๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ๋ถ€๋ถ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ: ENTRYPOINT ["python3", "/app/my_script.py"]: ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ ํ•ญ์ƒ Python ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

9. CMD ["bash"]

  • ["bash"] ๋Œ€์‹  ๋‹ค๋ฅธ ๋ช…๋ น์–ด ์‚ฌ์šฉ:
    • ENTRYPOINT๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜, ENTRYPOINT๊ฐ€ ์Šคํฌ๋ฆฝํŠธ์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰๋œ ํ›„ CMD์— ์ง€์ •๋œ ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    • ํ˜„์žฌ ์„ค์ •์€ bash ์…ธ์„ ์‹œ์ž‘ํ•˜๋ฏ€๋กœ ์ปจํ…Œ์ด๋„ˆ์— ์ง„์ž…ํ–ˆ์„ ๋•Œ ๋ช…๋ น์–ด๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ: CMD ["ros2", "launch", "my_package", "my_node.launch.py"]: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ํŠน์ • ROS ๋…ธ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ROS ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ: CMD ["sleep", "infinity"]: ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ณ„์† ์‹คํ–‰ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (์ด ๊ฒฝ์šฐ docker exec ๋“ฑ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ์— ์ ‘์†ํ•˜์—ฌ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค.)

์š”์•ฝ ๋ฐ ์ฃผ์š” ๊ณ ๋ ค์‚ฌํ•ญ:

๋ณ€์ˆ˜ ๊ฐ’๋“ค์„ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค:

  1. ๊ธฐ๋ฐ˜ ํ™˜๊ฒฝ: ์‚ฌ์šฉํ•˜๋Š” Docker ์ด๋ฏธ์ง€์— ๋”ฐ๋ผ ROS ์„ค์น˜ ์ƒํƒœ, ํฌ๊ธฐ, ๊ทธ๋ฆฌ๊ณ  ์ดˆ๊ธฐ ์„ค์ •์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.
  2. ์‚ฌ์šฉ์ž ๊ณ„์ • ๋ฐ ๊ถŒํ•œ: USERNAME, UID, GID๋Š” ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์ž‘์—…ํ•  ์‚ฌ์šฉ์ž์˜ ๊ณ„์ • ์ •๋ณด์™€ ๊ถŒํ•œ์„ ๊ฒฐ์ •ํ•˜๋ฉฐ, ํ˜ธ์ŠคํŠธ์™€์˜ ํŒŒ์ผ ๊ณต์œ  ์‹œ ๊ถŒํ•œ ๋ฌธ์ œ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ํŠนํžˆ UID์™€ GID๋Š” ํ˜ธ์ŠคํŠธ์™€ ์ปจํ…Œ์ด๋„ˆ ๊ฐ„์˜ ๊ถŒํ•œ ์ผ์น˜๋ฅผ ์œ„ํ•ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  3. ์„ค์น˜๋˜๋Š” ROS ํŒจํ‚ค์ง€: apt install์—์„œ ์„ค์น˜ํ•˜๋Š” ROS ํŒจํ‚ค์ง€์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ์˜ ๊ธฐ๋Šฅ๊ณผ ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ํŒจํ‚ค์ง€๋งŒ ์„ค์น˜ํ•˜์—ฌ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•˜๊ฑฐ๋‚˜, ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜์—ฌ ํŽธ๋ฆฌ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  4. ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ฐ ์ž‘์—… ๊ฒฝ๋กœ: WORKDIR ๋ฐ .bashrc์˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค ๊ฒฝ๋กœ๋Š” ์‚ฌ์šฉ์ž์˜ ์ž‘์—… ํ™˜๊ฒฝ๊ณผ ROS ํŒจํ‚ค์ง€ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
  5. ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ๋™์ž‘: ENTRYPOINT์™€ CMD๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์–ด๋–ค ๋ช…๋ น์–ด๊ฐ€ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰๋ ์ง€๋ฅผ ์ •์˜ํ•˜๋ฉฐ, ์ด๋Š” ์ปจํ…Œ์ด๋„ˆ์˜ ์šฉ๋„(๊ฐœ๋ฐœ ํ™˜๊ฒฝ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ๋“ฑ)์— ๋”ฐ๋ผ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ฐจ์ด์ ๋“ค์„ ์ดํ•ดํ•˜๊ณ  ๊ฐ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.


๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹(FROM ros:humble-ros-base ํ›„ RUN apt install ros-humble-desktop vs. FROM ros:humble-ros-desktop ๋ฐ”๋กœ ์‚ฌ์šฉ)์˜ ์ฐจ์ด์ 


๋น„์œ : ์ž๋™์ฐจ ๊ตฌ๋งค vs. ์กฐ๋ฆฝ

์šฐ๋ฆฌ๊ฐ€ ์ž๋™์ฐจ๋ฅผ ๊ตฌ๋งคํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค.

  1. FROM ros:humble-ros-desktop ๋ฐฉ์‹:

    • ์™„์„ฑ๋œ ์ž๋™์ฐจ(ํ’€์˜ต์…˜ ๋ชจ๋ธ)๋ฅผ ๊ตฌ๋งคํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • ์žฅ์ :
      • ๊ตฌ๋งค ์ฆ‰์‹œ ์šด์ „ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (Dockerfile์ด ๊ฐ„๊ฒฐํ•˜๊ณ , ๋นŒ๋“œ ํ›„ ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
      • ํ—ค๋“œ๋ผ์ดํŠธ, ์—์–ด์ปจ, ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋“ฑ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์ด ๋ชจ๋‘ ๊ธฐ๋ณธ์œผ๋กœ ์žฅ์ฐฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. (ROS ๋ฐ์Šคํฌํƒ‘์— ํ•„์š”ํ•œ Rviz, Gazebo ๋“ฑ์ด ๋ชจ๋‘ ํฌํ•จ)
    • ๋‹จ์ :
      • ๋‚ด๊ฐ€ ํ•„์š” ์—†๋Š” ๊ธฐ๋Šฅ(์˜ˆ: ์„ ๋ฃจํ”„๋‚˜ ๊ณ ์„ฑ๋Šฅ ์Šคํ”ผ์ปค)๊นŒ์ง€๋„ ํฌํ•จ๋˜์–ด ์žˆ์–ด, ์ฐจ๊ฐ’์ด ๋น„์‹ธ๊ณ (์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰์ด ํฌ๊ณ ), ๋ฌด๊ฒŒ๋„ ๋” ๋‚˜๊ฐ‘๋‹ˆ๋‹ค. (๋ถˆํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ํฌํ•จ์œผ๋กœ ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ฆ๊ฐ€)
      • ๋‚˜์ค‘์— ํŠน์ • ๋ถ€ํ’ˆ๋งŒ ๋‹ค๋ฅธ ๋ธŒ๋žœ๋“œ๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์–ด๋„, ๊ธฐ์กด์— ์žฅ์ฐฉ๋œ ๊ฒƒ์„ ๋–ผ์–ด๋‚ด๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฒˆ๊ฑฐ๋กญ์Šต๋‹ˆ๋‹ค. (์ด๋ฏธ์ง€ ๋ ˆ์ด์–ด ๊ตฌ์กฐ์ƒ ํŠน์ • ํŒจํ‚ค์ง€๋งŒ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ๊ต์ฒดํ•˜๊ธฐ ์–ด๋ ค์›€)
  2. 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 ๋ช…๋ น์–ด๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ , ์ด ๊ณผ์ •์—์„œ ์‹œ๊ฐ„์ด ์†Œ์š”๋จ)
      • ์กฐ๋ฆฝ ๊ณผ์ •์—์„œ ์‹ค์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์„ค์น˜ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ)
      • ์ตœ์ข…์ ์œผ๋กœ๋Š” ์™„์„ฑ๋œ ์ž๋™์ฐจ์™€ ๊ธฐ๋Šฅ์ ์œผ๋กœ๋Š” ๊ฐ™์ง€๋งŒ, ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด(์˜ˆ: ๊ฐ ๋ถ€ํ’ˆ์˜ ๋ฒ„์ „, ์„ค์น˜ ์ˆœ์„œ์— ๋”ฐ๋ฅธ ์ข…์†์„ฑ ์ฐจ์ด)๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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์€ ์ด ๊ฑฐ๋Œ€ํ•œ ๋ ˆ์ด์–ด ๋ฌถ์Œ ์œ„์— ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด(์˜ˆ: ์‚ฌ์šฉ์ž ์ƒ์„ฑ, ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ƒ์„ฑ ๋“ฑ)๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • FROM ros:humble-ros-base ํ›„ RUN apt install ros-humble-desktop ์˜ ๊ฒฝ์šฐ:

    1. FROM ros:humble-ros-base: ์ฒซ ๋ฒˆ์งธ ๋ ˆ์ด์–ด๋Š” ros-base ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค. ์ด ์ด๋ฏธ์ง€๋Š” ros-desktop์— ๋น„ํ•ด ํ›จ์”ฌ ์ž‘์Šต๋‹ˆ๋‹ค.
    2. RUN apt update -q && apt upgrade -q -y: ๋‘ ๋ฒˆ์งธ ๋ ˆ์ด์–ด๋Š” ์‹œ์Šคํ…œ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    3. RUN apt install -y --no-install-recommends ... ros-humble-desktop: ์„ธ ๋ฒˆ์งธ ๋ ˆ์ด์–ด์—์„œ ros-humble-desktop ํŒจํ‚ค์ง€ ๋ฐ ๋‹ค๋ฅธ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋“ค์„ ์ƒˆ๋กญ๊ฒŒ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ apt install ๋ช…๋ น์— ์˜ํ•ด ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋งŽ์€ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๊ณ , ์ด ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.
    4. 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 ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜, ๋ถˆํ•„์š”ํ•œ ๊ฒƒ์„ ์ œ๊ฑฐํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.