Apple Silicon(ARM64アーキテクチャ)のMacでDockerを使ってROS2を動かす場合、最大の壁となるのがRViz2やGazeboといったGUI(画面)ツールの表示です。
そこでブラウザ経由でアクセスできる仮想デスクトップ(Web VNC)入りのDockerイメージを使用することによりMac側のグラフィック設定に悩まされることなく、SafariやChromeからGUIを操作できます。
また、今回はDocker Desktopの代わりに軽量でオープンソースのColimaを利用してROS2 Jazzyの学習環境を構築します。
ColimaはバックグラウンドでDockerエンジンを動かすためのツールです。Docker Desktopのようにライセンスの懸念がなく、Apple Silicon(M4)の仮想化フレームワーク(VZ)を活用することで、非常に高速かつ軽量に動作するのが特徴です。
ColimaとDocker CLIのインストール
まずはMacにColimaと、Dockerを操作するためのコマンドラインツール(CLI)をインストールします。パッケージ管理ツール「Homebrew」を使用します。
ターミナルを開き、以下のコマンドを実行してください。
brew install colima docker docker-compose
実行後に以下のようなメッセージが出たので設定ファイルを変更していきます。
(省略)
Removing: /Users/nomura.toshiaki/Library/Logs/Homebrew/gnutls... (64B)
==> Caveats
zsh completions have been installed to:
/opt/homebrew/share/zsh/site-functions
==> colima
To start colima now and restart at login:
brew services start colima
Or, if you don't want/need a background service you can just run:
/opt/homebrew/opt/colima/bin/colima start -f
==> docker-compose
Compose is a Docker plugin. For Docker to find the plugin, add "cliPluginsExtraDirs" to ~/.docker/config.json:
"cliPluginsExtraDirs": [
"/opt/homebrew/lib/docker/cli-plugins"
]
Dockerコマンドが docker-compose プラグインを見つけられるように、設定ファイル(config.json)を少し書き換える(または作成する)必要があります。
~/.docker/フォルダがなければ設定ファイルを置くフォルダを作成する。
mkdir -p ~/.docker
設定ファイルに追記する。
cat <<EOF > ~/.docker/config.json
{
"cliPluginsExtraDirs": [
"/opt/homebrew/lib/docker/cli-plugins"
]
}
EOF
Colimaの起動(ROS 2・シミュレータ向け設定)
Gazebo(3Dシミュレータ)やRViz2を動かすには、ある程度のCPUとメモリが必要です。
また、Macの性能を引き出すためにApple純正の仮想化フレームワーク(VZ)を指定してColimaを起動します。
colima start --cpu 4 --memory 8 --vm-type vz
--vm-type vzオプションを使うには、macOS 13.0 (Ventura) 以降が必要です。
INFO[0002] starting colima
INFO[0002] runtime: docker
INFO[0005] starting ... context=vm
INFO[0034] provisioning ... context=docker
INFO[0037] starting ... context=docker
INFO[0038] done
※初回の起動には少し時間がかかります。起動が完了すると、以降は標準の docker コマンドがそのまま使えるようになります。
環境構築ファイルの準備
任意の作業用フォルダ(例:ros2_jazzy_learning)を作成し、その中に以下の2つのファイルを作成します。
mkdir -p ros2_jazzy_learning
cd ros2_jazzy_learning
Dockerfile
vi Dockerfile
# ROS 2 Jazzy + Web VNCのベースイメージ(ARM64対応)
FROM tiryoh/ros2-desktop-vnc:jazzy
# パッケージリストの更新と、学習に必要なROS 2ツールのインストール
# 注: Jazzyでは従来のGazebo Classicではなく、新しい「Gazebo (Harmonic)」を使用します
RUN sudo apt-get update && sudo apt-get install -y \
ros-jazzy-turtlesim \
ros-jazzy-rviz2 \
ros-jazzy-ros-gz \
ros-jazzy-slam-toolbox \
ros-jazzy-xacro \
ros-jazzy-joint-state-publisher-gui \
&& sudo rm -rf /var/lib/apt/lists/*
# コンテナ起動時のデフォルトディレクトリをワークスペースに設定
WORKDIR /home/ubuntu/ros2_ws
docker-compose.yml
vi docker-compose.yml
version: '3.8'
services:
ros2-jazzy-vnc:
build: .
container_name: ros2_jazzy_dev
# Webブラウザからアクセスするためのポート設定
ports:
- "6080:80"
# Macの ./src フォルダとコンテナ内の src フォルダを共有
volumes:
- ./src:/home/ubuntu/ros2_ws/src
# Gazeboなどのシミュレータがメモリ不足で落ちないように拡張
shm_size: '2gb'
コンテナの起動とアクセス
Colimaが動いている状態であれば、あとは通常のDockerと同じ操作です。
上記のファイルを作成したディレクトリで以下のコマンドを実行します。
コンテナの起動
docker compose up -d
※初回はイメージのダウンロードが行われるため数分かかります。
実行ログ
WARN[0000] /Users/nomura.toshiaki/ros2_jazzy_learning/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
WARN[0000] Docker Compose requires buildx plugin to be installed
Sending build context to Docker daemon 884B
Step 1/4 : FROM tiryoh/ros2-desktop-vnc:jazzy
jazzy: Pulling from tiryoh/ros2-desktop-vnc
97dd3f0ce510: Pull complete
8c699f55cb1b: Pull complete
0f1a50253a16: Pull complete
0dffdb9d559c: Pull complete
f9b3d683f531: Pull complete
cd4f8c5c33a1: Pull complete
b4d5e38a60ae: Pull complete
bb755a3edfbb: Pull complete
13201a28f969: Pull complete
e0cb45cae4d2: Pull complete
b93a980bcde5: Pull complete
c2e072597549: Pull complete
fd52c699c0e7: Pull complete
3f262e43c94d: Pull complete
8d3658214874: Pull complete
89d49df65a8b: Pull complete
188450ae2ce6: Pull complete
Digest: sha256:c7f80b1d9b77d6f9c76cfe1114c3d030a5146982c8c56d10d1e99717cb0c99a6
Status: Downloaded newer image for tiryoh/ros2-desktop-vnc:jazzy
---> c7f80b1d9b77
Step 2/4 : RUN sudo apt-get update && sudo apt-get install -y ros-jazzy-turtlesim ros-jazzy-rviz2 ros-jazzy-ros-gz ros-jazzy-slam-toolbox ros-jazzy-xacro ros-jazzy-joint-state-publisher-gui && sudo rm -rf /var/lib/apt/lists/*
---> Running in 98b06e4e0eca
Get:1 https://packages.mozilla.org/apt mozilla InRelease [1522 B]
Get:2 http://packages.ros.org/ros2/ubuntu noble InRelease [4676 B]
Get:3 http://ports.ubuntu.com/ubuntu-ports noble InRelease [256 kB]
Get:4 http://packages.ros.org/ros2/ubuntu noble/main arm64 Packages [1784 kB]
Get:5 https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/debs vscodium InRelease [3403 B]
Get:6 https://packages.mozilla.org/apt mozilla/main arm64 Packages [90.7 kB]
Get:7 https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/debs vscodium/main arm64 Packages [969 B]
Get:8 https://packages.mozilla.org/apt mozilla/main all Packages [5121 kB]
Get:9 http://ports.ubuntu.com/ubuntu-ports noble-updates InRelease [126 kB]
Get:10 http://ports.ubuntu.com/ubuntu-ports noble-backports InRelease [126 kB]
Get:11 http://ports.ubuntu.com/ubuntu-ports noble-security InRelease [126 kB]
Get:12 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 Packages [1776 kB]
Get:13 http://ports.ubuntu.com/ubuntu-ports noble/main arm64 Components [658 kB]
Get:14 http://ports.ubuntu.com/ubuntu-ports noble/main Icons (48x48) [106 kB]
Get:15 http://ports.ubuntu.com/ubuntu-ports noble/main Icons (64x64) [156 kB]
Get:16 http://ports.ubuntu.com/ubuntu-ports noble/main Icons (64x64@2) [21.8 kB]
Get:17 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 Packages [19.0 MB]
Get:18 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 Components [5467 kB]
Get:19 http://ports.ubuntu.com/ubuntu-ports noble/universe Icons (48x48) [3717 kB]
Get:20 http://ports.ubuntu.com/ubuntu-ports noble/universe Icons (64x64) [7747 kB]
Get:21 http://ports.ubuntu.com/ubuntu-ports noble/universe Icons (64x64@2) [75.0 kB]
Get:22 http://ports.ubuntu.com/ubuntu-ports noble/restricted arm64 Packages [113 kB]
Get:23 http://ports.ubuntu.com/ubuntu-ports noble/multiverse arm64 Packages [274 kB]
Get:24 http://ports.ubuntu.com/ubuntu-ports noble/multiverse arm64 Components [37.7 kB]
Get:25 http://ports.ubuntu.com/ubuntu-ports noble/multiverse Icons (48x48) [56.1 kB]
Get:26 http://ports.ubuntu.com/ubuntu-ports noble/multiverse Icons (64x64) [186 kB]
Get:27 http://ports.ubuntu.com/ubuntu-ports noble/multiverse Icons (64x64@2) [904 B]
Get:28 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 Packages [2433 kB]
Get:29 http://ports.ubuntu.com/ubuntu-ports noble-updates/main arm64 Components [234 kB]
Get:30 http://ports.ubuntu.com/ubuntu-ports noble-updates/main Icons (48x48) [36.0 kB]
Get:31 http://ports.ubuntu.com/ubuntu-ports noble-updates/main Icons (64x64) [51.0 kB]
Get:32 http://ports.ubuntu.com/ubuntu-ports noble-updates/main Icons (64x64@2) [29 B]
Get:33 http://ports.ubuntu.com/ubuntu-ports noble-updates/universe arm64 Packages [1977 kB]
Get:34 http://ports.ubuntu.com/ubuntu-ports noble-updates/universe arm64 Components [531 kB]
Get:35 http://ports.ubuntu.com/ubuntu-ports noble-updates/universe Icons (48x48) [236 kB]
Get:36 http://ports.ubuntu.com/ubuntu-ports noble-updates/universe Icons (64x64) [370 kB]
Get:37 http://ports.ubuntu.com/ubuntu-ports noble-updates/universe Icons (64x64@2) [29 B]
Get:38 http://ports.ubuntu.com/ubuntu-ports noble-updates/restricted arm64 Packages [4974 kB]
Get:39 http://ports.ubuntu.com/ubuntu-ports noble-updates/restricted arm64 Components [160 B]
Get:40 http://ports.ubuntu.com/ubuntu-ports noble-updates/restricted Icons (48x48) [29 B]
Get:41 http://ports.ubuntu.com/ubuntu-ports noble-updates/restricted Icons (64x64) [29 B]
Get:42 http://ports.ubuntu.com/ubuntu-ports noble-updates/restricted Icons (64x64@2) [29 B]
Get:43 http://ports.ubuntu.com/ubuntu-ports noble-updates/multiverse arm64 Packages [41.7 kB]
Get:44 http://ports.ubuntu.com/ubuntu-ports noble-updates/multiverse arm64 Components [159 B]
Get:45 http://ports.ubuntu.com/ubuntu-ports noble-updates/multiverse Icons (48x48) [1867 B]
Get:46 http://ports.ubuntu.com/ubuntu-ports noble-updates/multiverse Icons (64x64) [2497 B]
Get:47 http://ports.ubuntu.com/ubuntu-ports noble-updates/multiverse Icons (64x64@2) [29 B]
Get:48 http://ports.ubuntu.com/ubuntu-ports noble-backports/main arm64 Packages [49.5 kB]
Get:49 http://ports.ubuntu.com/ubuntu-ports noble-backports/main arm64 Components [3704 B]
Get:50 http://ports.ubuntu.com/ubuntu-ports noble-backports/main Icons (48x48) [9537 B]
Get:51 http://ports.ubuntu.com/ubuntu-ports noble-backports/main Icons (64x64) [11.3 kB]
Get:52 http://ports.ubuntu.com/ubuntu-ports noble-backports/main Icons (64x64@2) [29 B]
Get:53 http://ports.ubuntu.com/ubuntu-ports noble-backports/universe arm64 Packages [36.1 kB]
Get:54 http://ports.ubuntu.com/ubuntu-ports noble-backports/universe arm64 Components [14.5 kB]
Get:55 http://ports.ubuntu.com/ubuntu-ports noble-backports/universe Icons (48x48) [23.3 kB]
Get:56 http://ports.ubuntu.com/ubuntu-ports noble-backports/universe Icons (64x64) [32.3 kB]
Get:57 http://ports.ubuntu.com/ubuntu-ports noble-backports/universe Icons (64x64@2) [29 B]
Get:58 http://ports.ubuntu.com/ubuntu-ports noble-backports/restricted arm64 Components [160 B]
Get:59 http://ports.ubuntu.com/ubuntu-ports noble-backports/restricted Icons (48x48) [29 B]
Get:60 http://ports.ubuntu.com/ubuntu-ports noble-backports/restricted Icons (64x64) [29 B]
Get:61 http://ports.ubuntu.com/ubuntu-ports noble-backports/restricted Icons (64x64@2) [29 B]
Get:62 http://ports.ubuntu.com/ubuntu-ports noble-backports/multiverse arm64 Packages [695 B]
Get:63 http://ports.ubuntu.com/ubuntu-ports noble-backports/multiverse arm64 Components [162 B]
Get:64 http://ports.ubuntu.com/ubuntu-ports noble-backports/multiverse Icons (48x48) [29 B]
Get:65 http://ports.ubuntu.com/ubuntu-ports noble-backports/multiverse Icons (64x64) [29 B]
Get:66 http://ports.ubuntu.com/ubuntu-ports noble-backports/multiverse Icons (64x64@2) [29 B]
Get:67 http://ports.ubuntu.com/ubuntu-ports noble-security/main arm64 Packages [2075 kB]
Get:68 http://ports.ubuntu.com/ubuntu-ports noble-security/main arm64 Components [21.5 kB]
Get:69 http://ports.ubuntu.com/ubuntu-ports noble-security/main Icons (48x48) [13.4 kB]
Get:70 http://ports.ubuntu.com/ubuntu-ports noble-security/main Icons (64x64) [20.0 kB]
Get:71 http://ports.ubuntu.com/ubuntu-ports noble-security/main Icons (64x64@2) [29 B]
Get:72 http://ports.ubuntu.com/ubuntu-ports noble-security/universe arm64 Packages [1262 kB]
Get:73 http://ports.ubuntu.com/ubuntu-ports noble-security/universe arm64 Components [95.7 kB]
Get:74 http://ports.ubuntu.com/ubuntu-ports noble-security/universe Icons (48x48) [49.8 kB]
Get:75 http://ports.ubuntu.com/ubuntu-ports noble-security/universe Icons (64x64) [78.3 kB]
Get:76 http://ports.ubuntu.com/ubuntu-ports noble-security/universe Icons (64x64@2) [29 B]
Get:77 http://ports.ubuntu.com/ubuntu-ports noble-security/restricted arm64 Packages [4797 kB]
Get:78 http://ports.ubuntu.com/ubuntu-ports noble-security/restricted arm64 Components [157 B]
Get:79 http://ports.ubuntu.com/ubuntu-ports noble-security/restricted Icons (48x48) [29 B]
Get:80 http://ports.ubuntu.com/ubuntu-ports noble-security/restricted Icons (64x64) [29 B]
Get:81 http://ports.ubuntu.com/ubuntu-ports noble-security/restricted Icons (64x64@2) [29 B]
Get:82 http://ports.ubuntu.com/ubuntu-ports noble-security/multiverse arm64 Packages [42.1 kB]
Get:83 http://ports.ubuntu.com/ubuntu-ports noble-security/multiverse arm64 Components [158 B]
Get:84 http://ports.ubuntu.com/ubuntu-ports noble-security/multiverse Icons (48x48) [29 B]
Get:85 http://ports.ubuntu.com/ubuntu-ports noble-security/multiverse Icons (64x64) [29 B]
Get:86 http://ports.ubuntu.com/ubuntu-ports noble-security/multiverse Icons (64x64@2) [29 B]
Fetched 66.6 MB in 25s (2706 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
ros-jazzy-turtlesim is already the newest version (1.8.3-1noble.20260124.213634).
ros-jazzy-turtlesim set to manually installed.
ros-jazzy-rviz2 is already the newest version (14.1.19-1noble.20260125.014906).
ros-jazzy-rviz2 set to manually installed.
ros-jazzy-ros-gz is already the newest version (1.0.18-1noble.20260125.021522).
ros-jazzy-xacro is already the newest version (2.1.1-1noble.20260122.153657).
ros-jazzy-xacro set to manually installed.
The following additional packages will be installed:
libamd3 libbtf2 libcamd3 libccolamd3 libceres-dev libceres4t64 libcholmod5
libcxsparse4 libgoogle-glog-dev libgoogle-glog0v6t64 libgraphblas-dev
libgraphblas7 libklu2 libldl3 libparu0 librbio4 libspex2 libspqr4
libsuitesparse-dev libsuitesparse-mongoose3 libumfpack6 ros-jazzy-bond
ros-jazzy-bondcpp ros-jazzy-joint-state-publisher ros-jazzy-smclib
The following NEW packages will be installed:
libamd3 libbtf2 libcamd3 libccolamd3 libceres-dev libceres4t64 libcholmod5
libcxsparse4 libgoogle-glog-dev libgoogle-glog0v6t64 libgraphblas-dev
libgraphblas7 libklu2 libldl3 libparu0 librbio4 libspex2 libspqr4
libsuitesparse-dev libsuitesparse-mongoose3 libumfpack6 ros-jazzy-bond
ros-jazzy-bondcpp ros-jazzy-joint-state-publisher
ros-jazzy-joint-state-publisher-gui ros-jazzy-slam-toolbox ros-jazzy-smclib
0 upgraded, 27 newly installed, 0 to remove and 0 not upgraded.
Need to get 31.3 MB of archives.
After this operation, 204 MB of additional disk space will be used.
Get:1 http://packages.ros.org/ros2/ubuntu noble/main arm64 ros-jazzy-bond arm64 4.1.2-1noble.20260124.110653 [52.8 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libamd3 arm64 1:7.6.1+dfsg-1build1 [25.7 kB]
Get:3 http://packages.ros.org/ros2/ubuntu noble/main arm64 ros-jazzy-smclib arm64 4.1.2-1noble.20260122.001713 [14.1 kB]
Get:4 http://packages.ros.org/ros2/ubuntu noble/main arm64 ros-jazzy-bondcpp arm64 4.1.2-1noble.20260124.180033 [117 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libbtf2 arm64 1:7.6.1+dfsg-1build1 [13.1 kB]
Get:6 http://packages.ros.org/ros2/ubuntu noble/main arm64 ros-jazzy-joint-state-publisher arm64 2.4.0-3noble.20260124.142042 [18.1 kB]
Get:7 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libcamd3 arm64 1:7.6.1+dfsg-1build1 [22.1 kB]
Get:8 http://packages.ros.org/ros2/ubuntu noble/main arm64 ros-jazzy-joint-state-publisher-gui arm64 2.4.0-3noble.20260124.144501 [16.8 kB]
Get:9 http://packages.ros.org/ros2/ubuntu noble/main arm64 ros-jazzy-slam-toolbox arm64 2.8.3-1noble.20260125.011542 [1766 kB]
Get:10 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libccolamd3 arm64 1:7.6.1+dfsg-1build1 [25.2 kB]
Get:11 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libcholmod5 arm64 1:7.6.1+dfsg-1build1 [582 kB]
Get:12 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libgoogle-glog0v6t64 arm64 0.6.0-2.1build1 [62.8 kB]
Get:13 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libspqr4 arm64 1:7.6.1+dfsg-1build1 [125 kB]
Get:14 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libceres4t64 arm64 2.2.0+dfsg-4.1ubuntu2 [1031 kB]
Get:15 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libgoogle-glog-dev arm64 0.6.0-2.1build1 [107 kB]
Get:16 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libcxsparse4 arm64 1:7.6.1+dfsg-1build1 [70.7 kB]
Get:17 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libklu2 arm64 1:7.6.1+dfsg-1build1 [72.3 kB]
Get:18 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libldl3 arm64 1:7.6.1+dfsg-1build1 [12.9 kB]
Get:19 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libsuitesparse-mongoose3 arm64 1:7.6.1+dfsg-1build1 [32.0 kB]
Get:20 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libumfpack6 arm64 1:7.6.1+dfsg-1build1 [234 kB]
Get:21 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 librbio4 arm64 1:7.6.1+dfsg-1build1 [25.9 kB]
Get:22 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libspex2 arm64 1:7.6.1+dfsg-1build1 [34.2 kB]
Get:23 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libparu0 arm64 1:7.6.1+dfsg-1build1 [48.6 kB]
Get:24 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libsuitesparse-dev arm64 1:7.6.1+dfsg-1build1 [1416 kB]
Get:25 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libceres-dev arm64 2.2.0+dfsg-4.1ubuntu2 [1632 kB]
Get:26 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libgraphblas7 arm64 7.4.0+dfsg-1build1 [23.7 MB]
Get:27 http://ports.ubuntu.com/ubuntu-ports noble/universe arm64 libgraphblas-dev arm64 7.4.0+dfsg-1build1 [62.4 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 31.3 MB in 9s (3318 kB/s)
Selecting previously unselected package libamd3:arm64.
(Reading database ... 308191 files and directories currently installed.)
Preparing to unpack .../00-libamd3_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libamd3:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libbtf2:arm64.
Preparing to unpack .../01-libbtf2_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libbtf2:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libcamd3:arm64.
Preparing to unpack .../02-libcamd3_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libcamd3:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libccolamd3:arm64.
Preparing to unpack .../03-libccolamd3_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libccolamd3:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libcholmod5:arm64.
Preparing to unpack .../04-libcholmod5_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libcholmod5:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libgoogle-glog0v6t64.
Preparing to unpack .../05-libgoogle-glog0v6t64_0.6.0-2.1build1_arm64.deb ...
Unpacking libgoogle-glog0v6t64 (0.6.0-2.1build1) ...
Selecting previously unselected package libspqr4:arm64.
Preparing to unpack .../06-libspqr4_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libspqr4:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libceres4t64:arm64.
Preparing to unpack .../07-libceres4t64_2.2.0+dfsg-4.1ubuntu2_arm64.deb ...
Unpacking libceres4t64:arm64 (2.2.0+dfsg-4.1ubuntu2) ...
Selecting previously unselected package libgoogle-glog-dev.
Preparing to unpack .../08-libgoogle-glog-dev_0.6.0-2.1build1_arm64.deb ...
Unpacking libgoogle-glog-dev (0.6.0-2.1build1) ...
Selecting previously unselected package libcxsparse4:arm64.
Preparing to unpack .../09-libcxsparse4_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libcxsparse4:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libklu2:arm64.
Preparing to unpack .../10-libklu2_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libklu2:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libldl3:arm64.
Preparing to unpack .../11-libldl3_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libldl3:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libsuitesparse-mongoose3:arm64.
Preparing to unpack .../12-libsuitesparse-mongoose3_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libsuitesparse-mongoose3:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libumfpack6:arm64.
Preparing to unpack .../13-libumfpack6_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libumfpack6:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package librbio4:arm64.
Preparing to unpack .../14-librbio4_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking librbio4:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libspex2:arm64.
Preparing to unpack .../15-libspex2_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libspex2:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libparu0:arm64.
Preparing to unpack .../16-libparu0_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libparu0:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libsuitesparse-dev:arm64.
Preparing to unpack .../17-libsuitesparse-dev_1%3a7.6.1+dfsg-1build1_arm64.deb ...
Unpacking libsuitesparse-dev:arm64 (1:7.6.1+dfsg-1build1) ...
Selecting previously unselected package libceres-dev:arm64.
Preparing to unpack .../18-libceres-dev_2.2.0+dfsg-4.1ubuntu2_arm64.deb ...
Unpacking libceres-dev:arm64 (2.2.0+dfsg-4.1ubuntu2) ...
Selecting previously unselected package libgraphblas7:arm64.
Preparing to unpack .../19-libgraphblas7_7.4.0+dfsg-1build1_arm64.deb ...
Unpacking libgraphblas7:arm64 (7.4.0+dfsg-1build1) ...
Selecting previously unselected package libgraphblas-dev:arm64.
Preparing to unpack .../20-libgraphblas-dev_7.4.0+dfsg-1build1_arm64.deb ...
Unpacking libgraphblas-dev:arm64 (7.4.0+dfsg-1build1) ...
Selecting previously unselected package ros-jazzy-bond.
Preparing to unpack .../21-ros-jazzy-bond_4.1.2-1noble.20260124.110653_arm64.deb ...
Unpacking ros-jazzy-bond (4.1.2-1noble.20260124.110653) ...
Selecting previously unselected package ros-jazzy-smclib.
Preparing to unpack .../22-ros-jazzy-smclib_4.1.2-1noble.20260122.001713_arm64.deb ...
Unpacking ros-jazzy-smclib (4.1.2-1noble.20260122.001713) ...
Selecting previously unselected package ros-jazzy-bondcpp.
Preparing to unpack .../23-ros-jazzy-bondcpp_4.1.2-1noble.20260124.180033_arm64.deb ...
Unpacking ros-jazzy-bondcpp (4.1.2-1noble.20260124.180033) ...
Selecting previously unselected package ros-jazzy-joint-state-publisher.
Preparing to unpack .../24-ros-jazzy-joint-state-publisher_2.4.0-3noble.20260124.142042_arm64.deb ...
Unpacking ros-jazzy-joint-state-publisher (2.4.0-3noble.20260124.142042) ...
Selecting previously unselected package ros-jazzy-joint-state-publisher-gui.
Preparing to unpack .../25-ros-jazzy-joint-state-publisher-gui_2.4.0-3noble.20260124.144501_arm64.deb ...
Unpacking ros-jazzy-joint-state-publisher-gui (2.4.0-3noble.20260124.144501) ...
Selecting previously unselected package ros-jazzy-slam-toolbox.
Preparing to unpack .../26-ros-jazzy-slam-toolbox_2.8.3-1noble.20260125.011542_arm64.deb ...
Unpacking ros-jazzy-slam-toolbox (2.8.3-1noble.20260125.011542) ...
Setting up libamd3:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libspex2:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libsuitesparse-mongoose3:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libcxsparse4:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libgraphblas7:arm64 (7.4.0+dfsg-1build1) ...
Setting up libldl3:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up ros-jazzy-smclib (4.1.2-1noble.20260122.001713) ...
Setting up ros-jazzy-joint-state-publisher (2.4.0-3noble.20260124.142042) ...
Setting up libcamd3:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libbtf2:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libgraphblas-dev:arm64 (7.4.0+dfsg-1build1) ...
Setting up librbio4:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libccolamd3:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up ros-jazzy-bond (4.1.2-1noble.20260124.110653) ...
Setting up ros-jazzy-bondcpp (4.1.2-1noble.20260124.180033) ...
Setting up libgoogle-glog0v6t64 (0.6.0-2.1build1) ...
Setting up libcholmod5:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libspqr4:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up ros-jazzy-joint-state-publisher-gui (2.4.0-3noble.20260124.144501) ...
Setting up libklu2:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libumfpack6:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libgoogle-glog-dev (0.6.0-2.1build1) ...
Setting up libceres4t64:arm64 (2.2.0+dfsg-4.1ubuntu2) ...
Setting up libparu0:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libsuitesparse-dev:arm64 (1:7.6.1+dfsg-1build1) ...
Setting up libceres-dev:arm64 (2.2.0+dfsg-4.1ubuntu2) ...
Setting up ros-jazzy-slam-toolbox (2.8.3-1noble.20260125.011542) ...
Processing triggers for libc-bin (2.39-0ubuntu8.7) ...
---> Removed intermediate container 98b06e4e0eca
---> 07f2915b8705
Step 3/4 : WORKDIR /home/ubuntu/ros2_ws
---> Running in 45b5506a53b7
---> Removed intermediate container 45b5506a53b7
---> 5f0f7d1b5ff2
Step 4/4 : LABEL com.docker.compose.image.builder=classic
---> Running in de6ff3b6e36f
---> Removed intermediate container de6ff3b6e36f
---> d3e9d9ce2025
Successfully built d3e9d9ce2025
Successfully tagged ros2_jazzy_learning-ros2-jazzy-vnc:latest
[+] up 3/3
✔ Image ros2_jazzy_learning-ros2-jazzy-vnc Built 244.0s
✔ Network ros2_jazzy_learning_default Created 0.0s
✔ Container ros2_jazzy_dev Started 0.3s
ブラウザでアクセス
起動が完了したら、Macのブラウザ(SafariやChrome)を開き、以下のアドレスにアクセスします。
http://localhost:6080/
接続ボタンを押すと、画面上にUbuntuのデスクトップ画面が表示されます。
Terminatorのアイコンをクリックして、ターミナルを起動します。
学習ツール別の確認・実行コマンド
ブラウザ上のターミナル(QTerminal)で以下を実行し、動作を確認してみてください。
ros2 run turtlesim turtlesim_node
rviz2
gz sim
最初に起動すると以下のダイアログが表示されますので、Don't show this dialog againにチェックを入れてダイアログを閉じます。

終了手順
学習が終わってリソースを開放する際は、以下の順番で終了させるとMacのバッテリーやメモリに優しいです。
ubuntuのシャットダウンなどは必要ありません。使っていたブラウザのページを閉じるだけです。
docker compose down
colima stop
次回学習を再開するときは、colima start で仮想マシンを起動してから docker compose up -d を実行すればOKです(設定したCPUやメモリの割り当ては記憶されています)。
【普段の学習の流れまとめ】
- 始めるとき:
colima start... ➡docker compose up -d➡ ブラウザを開く - ちょっと休憩: ブラウザを閉じるだけ(いつでも再開可能)
- 今日の学習を終えるとき: ブラウザを閉じる ➡
docker compose down➡colima stop
Colimaを利用することで、Docker Desktopのライセンスやバックグラウンドでの重たい動作を気にすることなく、サクサクとROS 2の開発が進められるはずです。




