Skip to content

Commit d16f462

Browse files
committed
Stage WIP edits
1 parent 385098d commit d16f462

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

ros/content.md

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,21 @@ RUN sed --in-place --expression \
131131
CMD ["ros2", "launch", "demo_nodes_cpp", "talker_listener_launch.py"]
132132
```
133133

134+
The example above uses consists of three sequential stages. The `cacher` stage first uses [`vcstool`](https://github.com/dirk-thomas/vcstool) to clone a demo repo into the workspace source directory, updates the apt lists and ROS index, and derives build and runtime dependencies sets using [`rosdep`](https://docs.ros.org/en/rolling/Tutorials/Intermediate/Rosdep.html). The `builder` stage apt installs the derived build dependencies, sources the ROS install underlay, and compiles the source via release mode using [`colcon`](https://docs.ros.org/en/rolling/Tutorials/Beginner-Client-Libraries/Colcon-Tutorial.html). Finally, `runner` stage apt installs only runtime dependencies, copies the compiled workspace artifacts, and sets up the environment to launch the demo. Note the example consists of several subtle optimizations:
135+
136+
- colcon
137+
- build cache if deps are unchanged
138+
- build and install select packages
139+
- Caching apt and rosdep
140+
- IO download
141+
- synchronizing apt lists
142+
- multi-state parallelization
143+
- Final Image Size
144+
145+
example uses the [`--mount`](https://docs.docker.com/engine/reference/builder/#run---mount) option to cache apt lists
146+
147+
For more advance examples such as daisy chaining multiple overlay workspaces to improve caching of docker image build layers, using tools such as ccache to accelerate compilation with colcon, or using buildkit to save build time and bandwidth even when dependencies change, the project `Dockerfile`s in the [Navigation2](https://github.com/ros-planning/navigation2) repo are excellent resources.
148+
134149
```console
135150
$ docker image ls ros --format "table {{.Tag}}\t{{.Size}}"
136151
TAG SIZE
@@ -141,12 +156,6 @@ rolling 876MB
141156
builder 941MB
142157
```
143158

144-
The example above starts by using [`vcstool`](https://github.com/dirk-thomas/vcstool) to clone source repos of interest into the cacher stage. One could similarly `COPY` code from the local build context into the source directory as well. Package manifest files are then cached in a temporary directory where the following builder stage may copy from to install necessary dependencies with [`rosdep`](https://github.com/ros-infrastructure/rosdep). This is done prior to copying the rest of the source files to preserve the multi-stage build cache, given unaltered manifests do not alter declared dependencies, saving time and bandwidth. The overlay is then built using [`colcon`](https://colcon.readthedocs.io/en/released/), the entrypoint updated to source the workspace, and the default command set to launch the demo.
145-
146-
Note: `--from-paths` and `--packages-select` are set here as so to only install the dependencies and build for the demo C++ and Python packages, among many in the demo git repo that was cloned. To install the dependencies and build all the packages in the source workspace, merely change the scope by setting `--from-paths src/` and dropping the `--packages-select` arguments.
147-
148-
For more advance examples such as daisy chaining multiple overlay workspaces to improve caching of docker image build layers, using tools such as ccache to accelerate compilation with colcon, or using buildkit to save build time and bandwidth even when dependencies change, the project `Dockerfile`s in the [Navigation2](https://github.com/ros-planning/navigation2) repo are excellent resources.
149-
150159
## Deployment use cases
151160

152161
This dockerized image of ROS is intended to provide a simplified and consistent platform to build and deploy distributed robotic applications. Built from the [official Ubuntu image](https://hub.docker.com/_/ubuntu/) and ROS's official Debian packages, it includes recent supported releases for quick access and download. This provides roboticists in research and industry with an easy way to develop, reuse and ship software for autonomous actions and task planning, control dynamics, localization and mapping, swarm behavior, as well as general system integration.

0 commit comments

Comments
 (0)