Skip to content

Update InfluxDB Docker content.md #2586

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

Open
wants to merge 77 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
77 commits
Select commit Hold shift + click to select a range
d9cf884
docs: add introduction to InfluxDB 3 Core and Enterprise editions
MeelahMe Jun 17, 2025
534a0d2
docs: add InfluxDB 3 Core and Enterprise startup sections to Docker R…
MeelahMe Jun 17, 2025
4efaabc
docs: add data persist section to Docker README
MeelahMe Jun 17, 2025
455bee9
Updates to InfluxDB Core section
MeelahMe Jun 18, 2025
db1f4f7
docs: update Docker instructions for InfluxDB 3 Core with correct run…
MeelahMe Jun 18, 2025
524fec5
updates to data persist section
MeelahMe Jun 18, 2025
fa54770
docs: explain official images hosted on Quay.io and other explainator…
MeelahMe Jun 18, 2025
0c1aba8
minor updates to transistion into v2 and v1 Docker setup
MeelahMe Jun 18, 2025
41c606a
docs: add Docker usage examples for InfluxDB 3 and simplify v1/v2 sec…
MeelahMe Jun 20, 2025
a13dda2
add a extra line at end of doc for troubleshooting
MeelahMe Jun 25, 2025
2fdb584
updates to InfluxDB and InfluxDB 3 introductions
MeelahMe Jun 25, 2025
d84c97f
clarify version coverage and improve navigation for InfluxDB Docker R…
MeelahMe Jun 26, 2025
0ad6b9f
remove autogenerated README.md and backup file from PR
MeelahMe Jun 26, 2025
1b105b6
trying to resolve markdown formatting to pass CI
MeelahMe Jun 26, 2025
3d69426
docs: testing TOC
MeelahMe Jun 26, 2025
56f072e
docs: updates to TOC test
MeelahMe Jun 26, 2025
c8fa071
docs: reverting TOC
MeelahMe Jun 26, 2025
2b9d566
docs: adding docker compose section to Core and embedding compose
MeelahMe Jun 26, 2025
0403c8b
docs: updates to docker compose and cli sections
MeelahMe Jun 26, 2025
6af3a76
adding compose.yaml
MeelahMe Jun 26, 2025
f44aba3
[ROS] Update Official Docker image docs (#2578)
ruffsl Jun 20, 2025
8a60865
ArangoDB: Slightly update license and setting the language (#2587)
Simran-B Jun 26, 2025
74e14f3
Add .gitattributes: Ensure Unix line endings for text files
Simran-B Jun 26, 2025
61b72a4
Update content.md
Disservin Jun 27, 2025
d695f6c
Update influxdb/content.md
MeelahMe Jul 2, 2025
95ad5f3
Update influxdb/content.md
MeelahMe Jul 2, 2025
9d9d667
Update influxdb/content.md
MeelahMe Jul 2, 2025
e0ff6d7
Update influxdb/content.md
MeelahMe Jul 2, 2025
907407e
Update influxdb/content.md
MeelahMe Jul 2, 2025
50e33d9
Update influxdb/content.md
MeelahMe Jul 2, 2025
f16e0a3
Update influxdb/content.md
MeelahMe Jul 2, 2025
164e501
docs: correcting port connections
MeelahMe Jul 2, 2025
89fe4ee
docs: updates to connection ports and docker volume sections
MeelahMe Jul 2, 2025
1cb855f
docs: updates to core and enterpirse Docker and CLi sections
MeelahMe Jul 2, 2025
25b689d
fixing mardown formatting for content.md
MeelahMe Jul 2, 2025
0478678
Remove autogenerated README.md accidentally introduced in merge commi…
MeelahMe Jul 3, 2025
13f0387
Trying to restore README.md to match origin/master
MeelahMe Jul 3, 2025
7d04d88
Remove stray README.md-e file
MeelahMe Jul 3, 2025
cd71c0a
docs: minor changes to influxdb 3 and docker images sections
MeelahMe Jul 3, 2025
6787f27
docs: minor update to enterprise section
MeelahMe Jul 3, 2025
0a91d78
WIP: adding Docker enviroment variable
MeelahMe Jul 3, 2025
1512d24
docs: Adding in a section to refernce InfluxDB Explorer
MeelahMe Jul 7, 2025
34805bb
docs: update to v2 section
MeelahMe Jul 7, 2025
b36b948
fixing markdown lint
MeelahMe Jul 7, 2025
a903c3e
docs: updating v2 section with start and stop docker instructions
MeelahMe Jul 7, 2025
6be22e5
docs: fixed grammar mistakes, updated v1 section, and added a section…
MeelahMe Jul 8, 2025
6b881ba
docs: adding a link to influxdb v1 documentation
MeelahMe Jul 8, 2025
9371c1a
docs: minor changes for tone
MeelahMe Jul 8, 2025
f7d81ae
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
439fc03
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
fcf040f
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
2b62742
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
f759939
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
cafa100
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
4cdfcab
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
a64ffc7
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
070376e
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
d36b341
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
4345351
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
9e0a0fe
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
39fcd34
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
d65fc31
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
f3adf9f
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
82fca5d
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
c0b99c8
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
3ffa52e
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
a10a869
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
2d07a2c
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
8791b70
Update influxdb/content.fixed.md
MeelahMe Jul 8, 2025
f0a4459
fix: consolidate updates into content.md and remove content.fixed.md
MeelahMe Jul 8, 2025
a3fd2d5
chore(format): trying to fix format and pass CI for markdownfmt
MeelahMe Jul 8, 2025
2763223
docs: adding v1.11 enterprise docker section
MeelahMe Jul 9, 2025
8c0f774
docs: updating heading structure, style, and applying markdownfmt
MeelahMe Jul 9, 2025
73ebb90
fix: remove trailing whitespace to pass markdownfmt CI
MeelahMe Jul 9, 2025
d0c04e5
docs: correcting typos and removing numbered lists
MeelahMe Jul 9, 2025
0bf8e36
docs: minor updates to grammar etc
MeelahMe Jul 11, 2025
cb23872
chore: fixed Explorer spacing in the InfluxDB 3 image section. Added …
MeelahMe Jul 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* text=auto eol=lf
2 changes: 1 addition & 1 deletion .template-helpers/arches.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
#!/opt/homebrew/bin/bash
set -Eeuo pipefail

repo="${1:-}"
Expand Down
2 changes: 1 addition & 1 deletion .template-helpers/generate-dockerfile-links-partial.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
#!/opt/homebrew/bin/bash
set -Eeuo pipefail

repo="${1:-}"
Expand Down
2 changes: 1 addition & 1 deletion .template-helpers/variant.sh
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/bash
#!/opt/homebrew/bin/bash
set -eo pipefail

repo="$1"
Expand Down
6 changes: 3 additions & 3 deletions arangodb/content.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,11 @@ docker inspect --format '{{ .NetworkSettings.IPAddress }}' arangodb-instance

When using Docker, you need to specify the language you want to initialize the server to on the first run in one of the following ways:

- Set the environment variable `LANG` to a locale in the `docker run` command, e.g. `-e LANG=sv` for a Swedish locale.
- From v3.12.2 onward: Append the `--icu-language` startup option to the end of the Docker command, like `docker run ... %%IMAGE%% --icu-language sv` for a Swedish locale.

- Use an `arangod.conf` configuration file that sets a language and mount it into the container. For example, create a configuration file on your host system in which you set `icu-language = sv` at the top (before any `[section]`) and then mount the file over the default configuration file like `docker run -v /your-host-path/arangod.conf:/etc/arangodb3/arangod.conf ...`.
- Set the environment variable `LANG` to a locale in the `docker run` command, e.g. `-e LANG=sv`.

Note that you cannot set the language using only a startup option on the command-line, like `docker run ... %%IMAGE%% --icu-language sv`.
- Use an `arangod.conf` configuration file that sets a language and mount it into the container. For example, create a configuration file on your host system in which you set `icu-language = sv` at the top (before any `[section]`) and then mount the file over the default configuration file like `docker run -v /your-host-path/arangod.conf:/etc/arangodb3/arangod.conf ...`.

If you don't specify a language explicitly, the default is `en_US` up to ArangoDB v3.11 and `en_US_POSIX` from ArangoDB v3.12 onward.

Expand Down
2 changes: 1 addition & 1 deletion arangodb/license.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
The official Docker images of the ArangoDB Community Edition are governed by the [ArangoDB Community License](https://arangodb.com/community-license/). It limits deployments to a 100 GB on dataset size in production and you cannot use it for any commercial purposes, only internal business purposes.
The official Docker images of the ArangoDB Community Edition are governed by the [ArangoDB Community License](https://arangodb.com/community-license/). It limits deployments to a 100 GB on dataset size in production and you cannot use it for any commercial purposes, only internal business purposes. It does not include the right to distribute, embed within other products, or combine with ArangoDB's Enterprise Edition of the software.

The source code of the Community Edition is available under the [Business Source License 1.1 (BUSL-1.1)](https://github.com/arangodb/arangodb/blob/devel/LICENSE). Copying, modification, redistribution, non-commercial use, and commercial use in a non-production context are always allowed. Additionally, you can deploy BUSL-licensed ArangoDB source code for any purpose (including production) as long as you are not creating a commercial derivative work or offering, or are including it in a commercial product, application, or service. On the fourth anniversary of the first publicly available distribution of a specific version, the license changes to the permissive Apache 2.0 open-source license.

Expand Down
15 changes: 15 additions & 0 deletions influxdb/compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# compose.yaml
services:
influxdb3-core:
container_name: influxdb3-core
image: influxdb:3-core
ports:
- 8181:8181
command:
- influxdb3
- serve
- --node-id=node0
- --object-store=file
- --data-dir=/var/lib/influxdb3
- --plugin-dir=/var/lib/influxdb3-plugins

713 changes: 206 additions & 507 deletions influxdb/content.md
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • The overview paragraph should stay general for InfluxDB (not specific to InfluxDB 3).
  • If docker-library doesn't generate or support a TOC, we need to be clear that the readme contains info for all 3 versions.
  • We need to make sure we don't lose any existing instructions. I see you're linking to the v1 and v2 docs, which is good, but we need to verify they're comprehensive.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The sample compose.yaml for all 3 would be nice to have.

Large diffs are not rendered by default.

10 changes: 8 additions & 2 deletions mysql/content.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,15 +56,21 @@ $ docker logs some-%%REPO%%

## Using a custom MySQL configuration file

The default configuration for MySQL can be found in `/etc/mysql/my.cnf`, which may `!includedir` additional directories such as `/etc/mysql/conf.d` or `/etc/mysql/mysql.conf.d`. Please inspect the relevant files and directories within the `%%IMAGE%%` image itself for more details.
The default configuration for MySQL varies depending on the base image:

**Oracle-based images (default):** The default configuration is located at `/etc/my.cnf`, which may `!includedir` additional directories such as `/etc/mysql/conf.d`.

**Debian-based MySQL 8 images:** The default configuration can be found in `/etc/mysql/my.cnf`, which may `!includedir` additional directories such as `/etc/mysql/conf.d`.

Please inspect the relevant files and directories within the `%%IMAGE%%` image itself for more details.

If `/my/custom/config-file.cnf` is the path and name of your custom configuration file, you can start your `%%IMAGE%%` container like this (note that only the directory path of the custom config file is used in this command):

```console
$ docker run --name some-%%REPO%% -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d %%IMAGE%%:tag
```

This will start a new container `some-%%REPO%%` where the MySQL instance uses the combined startup settings from `/etc/mysql/my.cnf` and `/etc/mysql/conf.d/config-file.cnf`, with settings from the latter taking precedence.
This will start a new container `some-%%REPO%%` where the MySQL instance uses the combined startup settings from the default configuration file and `/etc/mysql/conf.d/config-file.cnf`, with settings from the latter taking precedence.

### Configuration without a `cnf` file

Expand Down
193 changes: 97 additions & 96 deletions ros/content.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# What is [ROS](https://www.ros.org/)?
# What is [ROS](https://docs.ros.org/)?

The Robot Operating System (ROS) is a set of software libraries and tools that help you build robot applications. From drivers to state-of-the-art algorithms, and with powerful developer tools, ROS has what you need for your next robotics project. And it's all open source.

> [wikipedia.org/wiki/Robot_Operating_System](https://en.wikipedia.org/wiki/Robot_Operating_System)

[%%LOGO%%](https://www.ros.org/)
[%%LOGO%%](https://docs.ros.org/)

# How to use this image

Expand All @@ -13,7 +13,7 @@ The Robot Operating System (ROS) is a set of software libraries and tools that h
To create your own ROS docker images and install custom packages, here's a simple example of installing the C++, Python client library demos using the official released Debian packages via apt-get.

```dockerfile
FROM %%IMAGE%%:foxy
FROM %%IMAGE%%:rolling-ros-core as aptgetter

# install ros package
RUN apt-get update && apt-get install -y \
Expand All @@ -28,8 +28,8 @@ CMD ["ros2", "launch", "demo_nodes_cpp", "talker_listener_launch.py"]
Note: all ROS images include a default entrypoint that sources the ROS environment setup before executing the configured command, in this case the demo packages launch file. You can then build and run the Docker image like so:

```console
$ docker build -t my/ros:app .
$ docker run -it --rm my/ros:app
$ docker build -t my/ros:aptgetter .
$ docker run -it --rm my/ros:aptgetter
[INFO] [launch]: process[talker-1]: started with pid [813]
[INFO] [launch]: process[listener-2]: started with pid [814]
[INFO] [talker]: Publishing: 'Hello World: 1'
Expand All @@ -44,59 +44,85 @@ $ docker run -it --rm my/ros:app
To create your own ROS docker images and build custom packages, here's a simple example of installing a package's build dependencies, compiling it from source, and installing the resulting build artifacts into a final multi-stage image layer.

```dockerfile
ARG FROM_IMAGE=%%IMAGE%%:foxy
ARG FROM_IMAGE=%%IMAGE%%:rolling
ARG OVERLAY_WS=/opt/ros/overlay_ws

# multi-stage for caching
FROM $FROM_IMAGE AS cacher
ARG OVERLAY_WS

# overwrite defaults to persist minimal cache
RUN rosdep update --rosdistro $ROS_DISTRO && \
cat <<EOF > /etc/apt/apt.conf.d/docker-clean && apt-get update
APT::Install-Recommends "false";
APT::Install-Suggests "false";
EOF

# clone overlay source
ARG OVERLAY_WS
WORKDIR $OVERLAY_WS/src
RUN echo "\
repositories: \n\
ros2/demos: \n\
type: git \n\
url: https://github.com/ros2/demos.git \n\
version: ${ROS_DISTRO} \n\
" > ../overlay.repos
RUN vcs import ./ < ../overlay.repos

# copy manifests for caching
WORKDIR /opt
RUN mkdir -p /tmp/opt && \
find ./ -name "package.xml" | \
xargs cp --parents -t /tmp/opt && \
find ./ -name "COLCON_IGNORE" | \
xargs cp --parents -t /tmp/opt || true
RUN cat <<EOF | vcs import .
repositories:
ros2/demos:
type: git
url: https://github.com/ros2/demos.git
version: ${ROS_DISTRO}
EOF

# derive build/exec dependencies
RUN bash -e <<'EOF'
declare -A types=(
[exec]="--dependency-types=exec"
[build]="")
for type in "${!types[@]}"; do
rosdep install -y \
--from-paths \
ros2/demos/demo_nodes_cpp \
ros2/demos/demo_nodes_py \
--ignore-src \
--reinstall \
--simulate \
${types[$type]} \
| grep 'apt-get install' \
| awk '{gsub(/'\''/,"",$4); print $4}' \
| sort -u > /tmp/${type}_debs.txt
done
EOF

# multi-stage for building
FROM $FROM_IMAGE AS builder

# install overlay dependencies
ARG OVERLAY_WS
WORKDIR $OVERLAY_WS
COPY --from=cacher /tmp/$OVERLAY_WS/src ./src
RUN . /opt/ros/$ROS_DISTRO/setup.sh && \
apt-get update && rosdep install -y \
--from-paths \
src/ros2/demos/demo_nodes_cpp \
src/ros2/demos/demo_nodes_py \
--ignore-src \
&& rm -rf /var/lib/apt/lists/*

# install build dependencies
COPY --from=cacher /tmp/build_debs.txt /tmp/build_debs.txt
RUN --mount=type=cache,target=/etc/apt/apt.conf.d,from=cacher,source=/etc/apt/apt.conf.d \
--mount=type=cache,target=/var/lib/apt/lists,from=cacher,source=/var/lib/apt/lists \
--mount=type=cache,target=/var/cache/apt,sharing=locked \
< /tmp/build_debs.txt xargs apt-get install -y

# build overlay source
WORKDIR $OVERLAY_WS
COPY --from=cacher $OVERLAY_WS/src ./src
ARG OVERLAY_MIXINS="release"
RUN . /opt/ros/$ROS_DISTRO/setup.sh && \
colcon build \
--packages-select \
demo_nodes_cpp \
demo_nodes_py \
--mixin $OVERLAY_MIXINS
--mixin release

# multi-stage for running
FROM $FROM_IMAGE-ros-core AS runner
ARG OVERLAY_WS

# install exec dependencies
COPY --from=cacher /tmp/exec_debs.txt /tmp/exec_debs.txt
RUN --mount=type=cache,target=/etc/apt/apt.conf.d,from=cacher,source=/etc/apt/apt.conf.d \
--mount=type=cache,target=/var/lib/apt/lists,from=cacher,source=/var/lib/apt/lists \
--mount=type=cache,target=/var/cache/apt,sharing=locked \
< /tmp/exec_debs.txt xargs apt-get install -y

# source entrypoint setup
ENV OVERLAY_WS $OVERLAY_WS
# setup overlay install
ENV OVERLAY_WS=$OVERLAY_WS
COPY --from=builder $OVERLAY_WS/install $OVERLAY_WS/install
RUN sed --in-place --expression \
'$isource "$OVERLAY_WS/install/setup.bash"' \
/ros_entrypoint.sh
Expand All @@ -105,11 +131,36 @@ RUN sed --in-place --expression \
CMD ["ros2", "launch", "demo_nodes_cpp", "talker_listener_launch.py"]
```

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.
The example above consists of three sequential stages. The `cacher` stage first updates the apt lists and ROS index, uses [`vcstool`](https://github.com/dirk-thomas/vcstool) to clone a demo repo into the workspace source directory, and derives build and runtime dependency sets using [`rosdep`](https://docs.ros.org/en/rolling/Tutorials/Intermediate/Rosdep.html). The `builder` stage installs the derived build dependencies, sources the ROS install underlay, and compiles the source in release mode using [`colcon`](https://docs.ros.org/en/rolling/Tutorials/Beginner-Client-Libraries/Colcon-Tutorial.html). Finally, the `runner` stage 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:

- Multi-Stage Build
- Dependency derivation, compilation, and runtime setup are partitioned
- Maximizes cache retention despite package source or build/runtime changes
- Greater concurrency, e.g., colcon build while runtime apt installs
- Persistent Cache Propagation
- Use of [`--mount`](https://docs.docker.com/engine/reference/builder/#run---mount) to cache temp data without bloating layers
- Maintain temporally consistent apt lists between parallel stages
- Avoid needless network I/O between stages or across Docker rebuilds
- Minimal Image Size
- Final stage builds from `ros-core` for smallest runtime image
- Builds and installs only a select few packages in the workspace
- Only workspace install artifacts are copied into final layers

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.
For comparison, the resulting `runner` image is similar in size to the earlier `aptgetter` example. This allows you to develop and distribute custom ROS packages without significantly increasing image size compared to pre-built Debian installations:

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 ROS 2 [Navigation2](https://github.com/ros-planning/navigation2) repo are excellent resources.
```console
$ docker image ls my/ros --format "table {{.Tag}}\t{{.Size}}"
TAG SIZE
aptgetter 504MB
runner 510MB
builder 941MB
$ docker image ls ros --format "table {{.Tag}}\t{{.Size}}"
TAG SIZE
rolling-ros-core 489MB
rolling 876MB
```

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.

## Deployment use cases

Expand All @@ -119,19 +170,18 @@ Developing such complex systems with cutting edge implementations of newly publi

With the advancements and standardization of software containers, roboticists are primed to acquire a host of improved developer tooling for building and shipping software. To help alleviate the growing pains and technical challenges of adopting new practices, we have focused on providing an official resource for using ROS with these new technologies.

For a complete listing of supported architectures and base images for each ROS Distribution Release, please read the official REP on target platforms for either [ROS 1](https://www.ros.org/reps/rep-0003.html) or for [ROS 2](https://www.ros.org/reps/rep-2000.html).
For a complete listing of supported architectures and base images for each ROS Distribution Release, please read the official REP on target platforms [here](https://www.ros.org/reps/rep-2001.html).

## Deployment suggestions

The available tags include supported distros along with a hierarchy tags based off the most common meta-package dependencies, designed to have a small footprint and simple configuration:

- `ros-core`: minimal ROS install
- `ros-base`: basic tools and libraries (also tagged with distro name with LTS version as `latest`)
- `ros1-bridge`: tools and libraries to run hybrid ROS 1 - ROS 2 systems and bridge messages between them

In the interest of keeping `ros-core` tag minimal in image size, developer tools such as `rosdep`, `colcon` and `vcstools` are not shipped in `ros_core`, but in `ros-base` instead.

The rest of the common meta-packages such as `desktop` are hosted on repos under OSRF's Docker Hub profile [here](https://hub.docker.com/r/osrf/ros/). These meta-packages include graphical dependencies and hook a host of other large packages such as X11, X server, etc. So in the interest of keeping the official images lean and secure, the desktop packages are just being hosted with OSRF's profile. For an extensive list of available variants, please read the official REP on target platforms for either [ROS 1](https://ros.org/reps/rep-0150.html) or for [ROS 2](https://www.ros.org/reps/rep-2001.html).
The rest of the common meta-packages such as `desktop` are hosted on repos under OSRF's Docker Hub profile [here](https://hub.docker.com/r/osrf/ros/). These meta-packages include graphical dependencies and hook a host of other large packages such as X11, X server, etc. So in the interest of keeping the official images lean and secure, the desktop packages are just being hosted with OSRF's profile.

### Volumes

Expand Down Expand Up @@ -201,59 +251,10 @@ $ docker compose rm

> Note: the auto-generated network, `ros_demos_default`, will persist until you explicitly remove it using `docker compose down`.

### ROS 1 Bridge

To ease ROS 2 migration, [`ros1_bridge`](https://index.ros.org/p/ros1_bridge) is a ROS 2 package that provides bidirectional communication between ROS 1 and ROS 2. As a minimal example, given the ROS 2 Dockerfile above, we'll create the ROS 1 equivalent below, and name the Dockerfile appropriately.

```dockerfile
FROM %%IMAGE%%:noetic

# install ros package
RUN apt-get update && apt-get install -y \
ros-${ROS_DISTRO}-ros-tutorials \
ros-${ROS_DISTRO}-common-tutorials && \
rm -rf /var/lib/apt/lists/*

# launch ros package
CMD ["roslaunch", "roscpp_tutorials", "talker_listener_launch"]
```

The compose file bellow spawns services for both talker listener demos while connecting the two via a dynamic bridge. You may then view the log output from both pairs of talker and listener nodes cross talking over the `/chatter` topic.

```yaml
services:
ros1:
build:
context: ./
dockerfile: ros1.Dockerfile

ros2:
build:
context: ./
dockerfile: ros2.Dockerfile

bridge:
image: ros:foxy-ros1-bridge
environment:
- "ROS_HOSTNAME=bridge"
- "ROS_MASTER_URI=http://ros1:11311"
command: ros2 run ros1_bridge dynamic_bridge
```

# More Resources

[ROS.org](http://www.ros.org/): Main ROS website
[Q&A](https://answers.ros.org/questions/): Ask questions. Get answers
[Docs](https://docs.ros.org/): ROS Developer Documentation
[Q&A](https://robotics.stackexchange.com/): Ask questions. Get answers
[Forums](https://discourse.ros.org/): Hear the latest discussions
[Blog](http://www.ros.org/news/): Stay up-to-date
[Packages](https://index.ros.org/?search_packages=true): Discover indexed packages
[OSRF](https://www.osrfoundation.org/): Open Source Robotics Foundation

## ROS 2

[Index](https://docs.ros.org): ROS 2 Documentation
[Design](https://design.ros2.org/): ROS 2 Design Articles

## ROS 1

[Wiki](http://wiki.ros.org/Documentation): ROS 1 Documentation
[OSRF](https://www.openrobotics.org/): Open Source Robotics Foundation
2 changes: 2 additions & 0 deletions ros/metadata.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
{
"hub": {
"categories": [
"languages-and-frameworks",
"machine-learning-and-ai",
"operating-systems"
]
}
Expand Down
Loading