Robotics - [ROS2 Foundation 2] ROS2 in Docker

Docker Networking, Multi-stage Build

Posted by Rico's Nerd Cluster on November 16, 2024

Networking

  • Using --net=host implies both DDS participants believe they are in the same machine and they try to communicate using SharedMemory instead of UDP. So we need to enable SharedMemory between host and container. For this you should share /dev/shm:
1
docker run -ti --net host -v /dev/shm:/dev/shm <DOCKER_IMAGE>

Multi-stage Build

What is the multi-level build: - Dockerfile.base - Dockerfile.devel - Dockerfile.base

Docker compose:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
services:
  base:
      dockerfile: Dockerfile.base
    image: myapp/base:dev

  devel:
    build:
      dockerfile: Dockerfile.devel
      args:
        BASE_IMAGE: myapp/base:dev
    image: myapp/devel:dev

  app:
    build:
      dockerfile: Dockerfile
      args:
        BASE_IMAGE: myapp/base:dev
        DEVEL_IMAGE: myapp/devel:dev
    image: myapp/app:dev
    depends_on:
      - devel

  • Dockerfile.base, Dockerfile.devel, Dockerfile.app:
1
ARG BASE_IMAGE="code.hmech.us:5050/nautilus/common/dockers/toolkitt_developer/devel:latest"