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 41 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
bc975d3
docs: add introduction to InfluxDB 3 Core and Enterprise editions
MeelahMe Jun 17, 2025
9cfa2bf
docs: add InfluxDB 3 Core and Enterprise startup sections to Docker R…
MeelahMe Jun 17, 2025
e6eb2b4
docs: add data persist section to Docker README
MeelahMe Jun 17, 2025
80c9604
Updates to InfluxDB Core section
MeelahMe Jun 18, 2025
14e812c
docs: update Docker instructions for InfluxDB 3 Core with correct run…
MeelahMe Jun 18, 2025
c84f52e
updates to data persist section
MeelahMe Jun 18, 2025
6df37aa
docs: explain official images hosted on Quay.io and other explainator…
MeelahMe Jun 18, 2025
5cafc20
minor updates to transistion into v2 and v1 Docker setup
MeelahMe Jun 18, 2025
1cbc31f
docs: add Docker usage examples for InfluxDB 3 and simplify v1/v2 sec…
MeelahMe Jun 20, 2025
36c0f2b
add a extra line at end of doc for troubleshooting
MeelahMe Jun 25, 2025
06765c8
updates to InfluxDB and InfluxDB 3 introductions
MeelahMe Jun 25, 2025
414a73e
clarify version coverage and improve navigation for InfluxDB Docker R…
MeelahMe Jun 26, 2025
9578857
remove autogenerated README.md and backup file from PR
MeelahMe Jun 26, 2025
4c13ff4
trying to resolve markdown formatting to pass CI
MeelahMe Jun 26, 2025
af376a1
docs: testing TOC
MeelahMe Jun 26, 2025
613c45a
docs: updates to TOC test
MeelahMe Jun 26, 2025
ea1df44
docs: reverting TOC
MeelahMe Jun 26, 2025
6df42a8
docs: adding docker compose section to Core and embedding compose
MeelahMe Jun 26, 2025
580df41
docs: updates to docker compose and cli sections
MeelahMe Jun 26, 2025
26d84f1
adding compose.yaml
MeelahMe Jun 26, 2025
9a0498e
[ROS] Update Official Docker image docs (#2578)
ruffsl Jun 20, 2025
c8bc4fe
ArangoDB: Slightly update license and setting the language (#2587)
Simran-B Jun 26, 2025
57afe73
Add .gitattributes: Ensure Unix line endings for text files
Simran-B Jun 26, 2025
e7c1d1b
Update content.md
Disservin Jun 27, 2025
61849a6
Update influxdb/content.md
MeelahMe Jul 2, 2025
f7d0fc3
Update influxdb/content.md
MeelahMe Jul 2, 2025
e3196d8
Update influxdb/content.md
MeelahMe Jul 2, 2025
5d233aa
Update influxdb/content.md
MeelahMe Jul 2, 2025
6491330
Update influxdb/content.md
MeelahMe Jul 2, 2025
ba1b0cd
Update influxdb/content.md
MeelahMe Jul 2, 2025
f583227
Update influxdb/content.md
MeelahMe Jul 2, 2025
423705d
docs: correcting port connections
MeelahMe Jul 2, 2025
aee0b17
docs: updates to connection ports and docker volume sections
MeelahMe Jul 2, 2025
acf0aa5
docs: updates to core and enterpirse Docker and CLi sections
MeelahMe Jul 2, 2025
4601bf2
fixing mardown formatting for content.md
MeelahMe Jul 2, 2025
0502026
Remove autogenerated README.md accidentally introduced in merge commi…
MeelahMe Jul 3, 2025
ba9f56e
Trying to restore README.md to match origin/master
MeelahMe Jul 3, 2025
7b257f1
Remove stray README.md-e file
MeelahMe Jul 3, 2025
21a5d49
docs: minor changes to influxdb 3 and docker images sections
MeelahMe Jul 3, 2025
ff394a8
docs: minor update to enterprise section
MeelahMe Jul 3, 2025
863c5cd
WIP: adding Docker enviroment variable
MeelahMe Jul 3, 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

680 changes: 149 additions & 531 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