Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dockerfileを追加。Dockerイメージを作成するGitHub workflowを追加。 #32

Merged
merged 11 commits into from
May 30, 2022

Conversation

ShotaAk
Copy link

@ShotaAk ShotaAk commented May 23, 2022

What does this implement/fix?

Dockerfileを追加し、
ビルドしたDockerイメージをGitHub PackagesへPushするためのworkflowファイルを追加します。

Does this close any currently open issues?

いいえ

How has this been tested?

Ubuntu 20.04環境でdockerイメージを作成し、下記コマンドでcrane_plus実機が動作することを確認しました。

$ rocker --nvidia --x11 --net=host --privileged \
    --volume /dev:/dev \
    -- crane_plus:foxy ros2 launch crane_plus_examples demo.launch.py

$ rocker --devices /dev/dri/card0 --x11 --net=host --privileged \
    --volume /dev:/dev \
    -- crane_plus:foxy ros2 launch crane_plus_examples example.launch.py example:='joint_values'

また、ワークスペースをマウントするとでファイル変更が反映されることを確認しました。

# joint_values.cpp を編集した後
# パッケージをビルド
$ rocker --devices /dev/dri/card0 --x11 --net=host --privileged \
    --volume ~/crane_ws:/root/overlay_ws \
    -- crane_plus:foxy colcon build --symlink-install

# ノードを起動
$ rocker --devices /dev/dri/card0 --x11 --net=host --privileged \
    --volume ~/crane_ws:/root/overlay_ws /dev:/dev \
    -- crane_plus:foxy ros2 launch crane_plus_examples demo.launch.py

$ rocker --devices /dev/dri/card0 --x11 --net=host --privileged \
    --volume ~/crane_ws:/root/overlay_ws /dev:/dev \
    -- crane_plus:foxy ros2 launch crane_plus_examples example.launch.py example:='joint_values'

gazeboが動作することも確認しています。

$ rocker --devices /dev/dri/card0 --x11 --net=host --privileged \
    -- crane_plus:foxy ros2 launch crane_plus_gazebo crane_plus_gazebo.launch.py

GitHub Packagesのイメージが動作することも確認しています。

$ docker pull ghcr.io/rt-net/crane_plus:foxy

Checklists

@ShotaAk ShotaAk added Type: CI Changes to CI configuration files and scripts Type: Maintenance Repository Maintenance labels May 23, 2022
@ShotaAk ShotaAk requested a review from Kuwamai May 23, 2022 08:14
@ShotaAk ShotaAk marked this pull request as ready for review May 24, 2022 04:39
@ShotaAk ShotaAk changed the title Dockerfileを追加 Dockerfileを追加。Dockerイメージを作成するGitHub workflowを追加。 May 24, 2022
.github/workflows/build_docker_image.yml Outdated Show resolved Hide resolved
.github/workflows/build_docker_image.yml Outdated Show resolved Hide resolved
Shota Aoki and others added 2 commits May 25, 2022 11:23
Co-authored-by: Daisuke Sato <tiryoh@gmail.com>
Co-authored-by: Daisuke Sato <tiryoh@gmail.com>
@Kuwamai
Copy link
Contributor

Kuwamai commented May 26, 2022

@ShotaAk
ありがとうございます。READMEの流れに沿ってコマンドを実行したのですが、こちらのコマンドを実行したところで下記エラーが出ました。

$ rocker --nvidia --x11 --net=host --privileged \
    --volume /dev:/dev \
    -- crane_plus:foxy ros2 launch crane_plus_examples demo.launch.py
Step 9/12 : FROM crane_plus:foxy
no more output and success not detected
Failed to build detector image
WARNING unable to detect os for base image 'crane_plus:foxy', maybe the base image does not exist

docker imagesを確認したところ下記のようになっていました。REPOSITORYがghcr.io/rt-net/crane_plusとcrane_plusで区別されているのでしょうか。

$ docker images
REPOSITORY                  TAG              IMAGE ID       CREATED         SIZE
<none>                      <none>           47dacdb22537   5 minutes ago   252MB
ghcr.io/rt-net/crane_plus   foxy             4fc2414896cf   31 hours ago    3.71GB
python                      3-slim-stretch   7691d3cb6cbc   2 years ago     155MB

ローカルでビルドするとimagesにcrane_plus:foxyが作成されて上記エラーが出力されなくなったのですが、新たに下記エラーが出力されました。

Building docker file with arguments:  {'path': '/tmp/tmphxj0fjzv', 'rm': True, 'nocache': False, 'pull': False}
building > Step 1/7 : FROM nvidia/opengl:1.0-glvnd-devel-ubuntu18.04 as glvnd
building >  ---> 9d806b36b807
building > Step 2/7 : FROM crane_plus:foxy
building >  ---> e1cedc6abd11
building > Step 3/7 : USER root
building >  ---> Running in 6ad3ec0ff360
building > Removing intermediate container 6ad3ec0ff360
building >  ---> 90ba09004021
building > Step 4/7 : RUN apt-get update && apt-get install -y --no-install-recommends     libglvnd0     libgl1     libglx0     libegl1     libgles2     && rm -rf /var/lib/apt/lists/*
building >  ---> Running in ff8dcf13caf9
building > Get:1 http://packages.ros.org/ros2/ubuntu focal InRelease [4679 B]
building > Get:2 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
building > Get:3 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB]
building > Get:4 http://packages.ros.org/ros2/ubuntu focal/main amd64 Packages [1042 kB]
building > Get:5 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 Packages [27.5 kB]
building > Get:6 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages [1839 kB]
building > Get:7 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
building > Get:8 http://archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
building > Get:9 http://archive.ubuntu.com/ubuntu focal/multiverse amd64 Packages [177 kB]
building > Get:10 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages [1275 kB]
building > Get:11 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [874 kB]
building > Get:12 http://archive.ubuntu.com/ubuntu focal/universe amd64 Packages [11.3 MB]
building > Get:13 http://security.ubuntu.com/ubuntu focal-security/restricted amd64 Packages [1199 kB]
building > Get:14 http://archive.ubuntu.com/ubuntu focal/restricted amd64 Packages [33.4 kB]
building > Get:15 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages [2267 kB]
building > Get:16 http://archive.ubuntu.com/ubuntu focal-updates/restricted amd64 Packages [1278 kB]
building > Get:17 http://archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 Packages [30.2 kB]
building > Get:18 http://archive.ubuntu.com/ubuntu focal-updates/universe amd64 Packages [1161 kB]
building > Get:19 http://archive.ubuntu.com/ubuntu focal-backports/main amd64 Packages [53.8 kB]
building > Get:20 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [27.1 kB]
building > Fetched 23.2 MB in 6s (3661 kB/s)
Reading package lists...
building > Reading package lists...
building > Building dependency tree...
building >
Reading state information...
building > libegl1 is already the newest version (1.3.2-1~ubuntu0.20.04.2).
libegl1 set to manually installed.
libgl1 is already the newest version (1.3.2-1~ubuntu0.20.04.2).
libgl1 set to manually installed.
libgles2 is already the newest version (1.3.2-1~ubuntu0.20.04.2).
libgles2 set to manually installed.
libglvnd0 is already the newest version (1.3.2-1~ubuntu0.20.04.2).
libglvnd0 set to manually installed.
libglx0 is already the newest version (1.3.2-1~ubuntu0.20.04.2).
libglx0 set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 53 not upgraded.
building > Removing intermediate container ff8dcf13caf9
building >  ---> 4ee199d0dbb5
building > Step 5/7 : COPY --from=glvnd /usr/share/glvnd/egl_vendor.d/10_nvidia.json /usr/share/glvnd/egl_vendor.d/10_nvidia.json
building >  ---> 8212443665cd
building > Step 6/7 : ENV NVIDIA_VISIBLE_DEVICES ${NVIDIA_VISIBLE_DEVICES:-all}
building >  ---> Running in 328e954daada
building > Removing intermediate container 328e954daada
building >  ---> 8174dadf7819
building > Step 7/7 : ENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES:+$NVIDIA_DRIVER_CAPABILITIES,}graphics
building >  ---> Running in 929584e0aa03
building > Removing intermediate container 929584e0aa03
building >  ---> 6647ae3b9e14
building > Successfully built 6647ae3b9e14
Executing command:
docker run --rm -it --network host   --gpus all --privileged -v /dev:/dev  -e DISPLAY -e TERM   -e QT_X11_NO_MITSHM=1   -e XAUTHORITY=/tmp/.docker1sgyykud.xauth -v /tmp/.docker1sgyykud.xauth:/tmp/.docker1sgyykud.xauth   -v /tmp/.X11-unix:/tmp/.X11-unix   -v /etc/localtime:/etc/localtime:ro  6647ae3b9e14 ros2 launch crane_plus_examples demo.launch.py
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]].

上記エラーで検索したところ複数のサイトで下記サイトのような話を見かけたのでnvidia-container-runtimeをインストールしてみました。

https://www.yurui-deep-learning.com/2021/08/17/docker-error-response-from-daemon-could-not-select-device-driver-with-capabilities-gpu/

インストールした後に再度実行したところ下記エラーが出力されました。GPUまわりなど何か疑わしい部分がありますでしょうか。

docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: initialization error: load library failed: libnvidia-ml.so.1: cannot open shared object file: no such file or directory: unknown.

@ShotaAk
Copy link
Author

ShotaAk commented May 26, 2022

@Kuwamai
PRの概要ではcrane_plus:foxyを使ってテストした、と書いてますが、
READMEではghcr.io/rt-net/crane_plusを使うように手順を書いてます。
ご確認お願いします。

rockerでNVIDIA GPUを使う場合はnvidia-docker2のインストールが必要とのことです。
https://github.com/osrf/rocker#nvidia-settings

手順がわかりやすくなるようにREADMEを修正します。

@Kuwamai
Copy link
Contributor

Kuwamai commented May 26, 2022

@ShotaAk 承知いたしました。改めて動作確認します。

@ShotaAk
Copy link
Author

ShotaAk commented May 26, 2022

rockerの実行手順からNVIDIAの実行コマンドと、/devのマウントオプションを削除しました。

/devマウントを削除したのは、--privileged オプションでコンテナから/devを使用可能になるためです。

https://docs.oracle.com/cd/E39368_01/E75728/html/section_mf3_vb5_dq.html

@Kuwamai
Copy link
Contributor

Kuwamai commented May 26, 2022

@ShotaAk
無事にコメント内のコマンドが実行できました。ホストPCで実行した場合に比べてdockerではアームの動きがカクカクしているのですがこの挙動は問題ないでしょうか。

@ShotaAk
Copy link
Author

ShotaAk commented May 27, 2022

@Kuwamai こちらの環境ではDockerとホストPC側で動きに差は見られませんでした。

カクカクしている動きはUSB通信のlatencyが働いている思うので、ホストPC側でlatency_timerのパラメータを変更してみてください。
https://github.com/rt-net/crane_plus/blob/master/crane_plus_control/README.md#latency_timer%E3%81%AE%E8%A8%AD%E5%AE%9A

@Kuwamai
Copy link
Contributor

Kuwamai commented May 27, 2022

@ShotaAk 承知いたしました。一応一通り行ったはずなのでもう一度確認します。

@Kuwamai
Copy link
Contributor

Kuwamai commented May 27, 2022

@ShotaAk 報告遅くなりましたがこちら確認できました。どこかの段階でUSBの抜き差しが発生していたみたいでlatency_timerがリセットされていました。お騒がせしました。

@Kuwamai Kuwamai merged commit eada84d into master May 30, 2022
@Kuwamai Kuwamai deleted the add_dockerfile branch May 30, 2022 04:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Type: CI Changes to CI configuration files and scripts Type: Maintenance Repository Maintenance
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants