osrf/docker_imagesのROS 2 Dockerfileを修正する
今回は前回の続きでrclcpp
のサンプルプログラムを書くつもりでしたが、とある方からROS 2インストールの記事で紹介したDockerイメージをUpstreamにcommitして欲しいとの依頼を受けたため、本日はその結果報告を行います。
修正内容
現在、OSRFが管理しているROS関連のDockerfileはosrf/docker_images
にまとめられています。
https://github.com/osrf/docker_images
この内、ROS 2のDockerfileが古くなっていて、6ヶ月以上前からビルドに失敗するようになっていました。
https://github.com/osrf/docker_images/blob/master/ros2/ros2/Dockerfile
Linux Development Setupのセットアップ手順と比較すると、以下の3項目が原因であることはわかっていました。
- locale設定が足りない
- APTパッケージが4つ足りない
- pip3パッケージが2つ足りない
そこで、僕は先月のROS Japan UG #10の発表の時には、自分のレポジトリでゴリッと修正したものを作ってDocker Hubに登録して、Upstreamの問題は放置していました。
- https://github.com/youtalk/docker-images-ja/blob/master/ros2-ja/Dockerfile
- https://hub.docker.com/r/youtalk/ros2-ja/
なぜ放置していたかというと、osrf/docker_images
のDockerfileはPythonスクリプトと独自の構成ファイルを使って自動生成する仕組みになっていて、しかもその生成スクリプトの環境設定が3つのレポジトリに別れたモジュールを組み合わせて、いろいろと面倒なことをしないとできなかったからです。
https://github.com/osrf/docker_images/blob/master/doc/environment_setup.md
修正方法
でもenvironment_setup.md
を改めて見てみると、その環境設定を行うDockerfileがあるじゃないですか。
Note: This can all be bypassed by using the helper Dockerfile in the /docker folder.
というわけで、修正内容と再現方法がわかったところで、あとは簡単です。
$ docker run -it -v /path/to/docker_images:/tmp/docker_images osrf:docker /bin/bash
root@75cb2b34da71:/tmp/docker_images# ls
ros ros2 sros
root@75cb2b34da71:/tmp/docker_images# cd ros2/
root@75cb2b34da71:/tmp/docker_images/ros2# ls
create_dockerfiles.py images.yaml.em platform.yaml ros2
root@75cb2b34da71:/tmp/docker_images/ros2# ./create_dockerfiles.py dir -d .
Generating Dockerfile './ros2/Dockerfile':
root@75cb2b34da71:/tmp/docker_images/ros2# ls ros2
Dockerfile ros2_entrypoint.sh
root@75cb2b34da71:/tmp/docker_images/ros2# git status
On branch ros2
Your branch is up-to-date with 'youtalk/ros2'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: ros2/Dockerfile
no changes added to commit (use "git add" and/or "git commit -a")
Dockerを使ったプログラミングのコツとして、-v
オプションを使ってホストPCのディレクトリをDockerコンテナのディレクトリにマウントすることです。 Dockerではこのマウントされたディレクトリをデータボリュームと呼びます。
https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-host-directory-as-a-data-volume
これにより、コンテナ内で修正されたファイルを、ホストPCからも参照できるようになります。 先ほどのターミナルの続きから確認してみてください。
root@75cb2b34da71:/tmp/docker_images/ros2# exit
$ pwd
/home/yutaka/ros/infrastructure/docker_images
$ git status
On branch ros2
Your branch is up-to-date with 'youtalk/ros2'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: ros2/ros2/Dockerfile
no changes added to commit (use "git add" and/or "git commit -a")
osrf/docker_images
レポジトリにプルリクエストを出しました。 あとはマージされることを期待して待つのみです。
https://github.com/osrf/docker_images/pull/60
せっかくオープンソース・ソフトウェアのROS/ROS 2を使っているのですから、自分本位の使い方だけでなく、貢献(コントリビューション)も忘れず怠らず意識しなくてはなりませんね。 頑張ります。
Comments powered by Disqus.