【Docker】ROSのcatkinワークスペースを構築するDockerfileの書き方
DockerfileからROSのcatkinワークスペース環境を構築する方法をご紹介します。
Dockerfile
専用のディレクトリを作ります。その中に"Dockerfile"という名前のファイルを作り、以下をコピペします。ちなみに、Dockerfileには拡張子が必要ないです。
hoge/
┗ Dockerfile
########## Pull ##########
# FROM ros:kinetic #←こっちでもok FROM osrf/ros:kinetic-desktop-full ########## ROS setup ########## RUN mkdir -p /home/ros_catkin_ws/src && \ cd /home/ros_catkin_ws/src && \ /bin/bash -c "source /opt/ros/kinetic/setup.bash; catkin_init_workspace" && \ cd /home/ros_catkin_ws && \ /bin/bash -c "source /opt/ros/kinetic/setup.bash; catkin_make" && \ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc && \ echo "source /home/ros_catkin_ws/devel/setup.bash" >> ~/.bashrc && \ echo "export ROS_PACKAGE_PATH=\${ROS_PACKAGE_PATH}:/home/ros_catkin_ws" >> ~/.bashrc && \ echo "export ROS_WORKSPACE=/home/ros_catkin_ws" >> ~/.bashrc ######### initial position ########## WORKDIR /home/ros_catkin_ws
解説
FROM osrf/ros:kinetic-desktop-full
土台となる既存のイメージを指定します。
“ros:kinetic”は素のROSですが、”osrf/ros:kinetic-desktop-full”にはrviz等の基礎的なパッケージが既に用意されています。
また、他のディストロを指定したい場合は、kineticの部分を書き換えればokです(indigo、melodicなど)。
Dockerfile内でのROSコマンド
Dockerfile内でROSコマンド(catkin_init_workspace、catkin_makeなど)を実行するには、毎度ROSのsetupを以下のように指定する必要があります。
RUN /bin/bash -c "source /opt/ros/kinetic/setup.bash;(ROSコマンド)"
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
Dockerfile内でsetup.bashを指定しても、コンテナ内では無効になっているので、起動と同時に実行されるよう、bashrcに追加しておくと便利です。
echo "export ROS_WORKSPACE=/home/ros_catkin_ws" >> ~/.bashrc
コンテナ内において、roscdコマンドでワークスペースのディレクトリに移動できるように設定しています。
使い方
イメージのビルド
$ cd (上記のDockerfileがあるディレクトリ)
$ docker build -t ros_kinetic:latest .
イメージの名前(ros_kineticなど)は任意です。
コンテナのラン
$ docker run --rm -t -i ros_kinetic:latest
このコマンドでDockerコンテナ内に入れます。
さいごに
Dockerfileはややこしい部分が多いですが、使いこなせると便利です。
少しでも参考になれば幸いです。
以上です。
Dockerの基礎が固まっていないあなたへ
私がDockerの基礎を勉強した本を載せておきます。
リンク
Ad.
コメント