From 32a395f7e60c38b77d8cc25033b0988098769c6a Mon Sep 17 00:00:00 2001 From: pimpest <82343504+pimpest@users.noreply.github.com> Date: Mon, 5 Jan 2026 03:13:34 +0100 Subject: [PATCH] Add scripts for building/pushing to docker registry --- Dockerfile.env => Dockerfile.base.env | 6 +-- docker-compose.yaml | 4 +- scripts/docker_build.sh | 55 ++++++++++++++++++++++++ scripts/install_base_deps.sh | 17 ++++++++ util/docker_registry/config/config.yml | 9 ++++ util/docker_registry/docker-compose.yaml | 13 ++++++ 6 files changed, 98 insertions(+), 6 deletions(-) rename Dockerfile.env => Dockerfile.base.env (69%) create mode 100755 scripts/docker_build.sh create mode 100755 scripts/install_base_deps.sh create mode 100644 util/docker_registry/config/config.yml create mode 100644 util/docker_registry/docker-compose.yaml diff --git a/Dockerfile.env b/Dockerfile.base.env similarity index 69% rename from Dockerfile.env rename to Dockerfile.base.env index 944299e..333fad0 100644 --- a/Dockerfile.env +++ b/Dockerfile.base.env @@ -1,4 +1,4 @@ -FROM arm64v8/ros:jazzy as magrob.env +FROM arm64v8/ros:jazzy-ros-core AS magrob.base.env RUN mkdir -p /ros_ws/src WORKDIR /ros_ws/src @@ -7,9 +7,7 @@ RUN --mount=type=bind,source=./,target=/ros_ws/src/ \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ . /opt/ros/jazzy/setup.sh && \ - apt update && \ - apt-get install -y ros-jazzy-hardware-interface && \ - rosdep install -i --from-paths . -y + scripts/install_base_deps.sh RUN cat <> /root/.bashrc source /opt/ros/jazzy/setup.bash diff --git a/docker-compose.yaml b/docker-compose.yaml index 6241927..cbd1659 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,9 +1,9 @@ services: magrob_base: network_mode: host - image: localhost/magrob.env + image: localhost/magrob.base.env build: - dockerfile: Dockerfile.env + dockerfile: Dockerfile.base.env entrypoint: ["sleep","infinity"] volumes: diff --git a/scripts/docker_build.sh b/scripts/docker_build.sh new file mode 100755 index 0000000..04f1761 --- /dev/null +++ b/scripts/docker_build.sh @@ -0,0 +1,55 @@ +usage() { + cat < [] + docker_build.sh -h + + Build and push a docker image to a arm64v8 registry + + Targets: + base The pacakges aimed at running on the raspberry pi +EOF +} + + +TARGET="$1" +REGISTRY="$2" +ARGS="$2" + +if [[ $TARGET == "-h" || $TARGET == "--help" ]]; then + usage + exit 0 +fi + +if [[ $# -lt 2 ]]; then + echo "Error: Expected at least 2 arguments." + usage + exit 1 +fi + +trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT + +case $TARGET in + "base_env") + ssh -N \ + -o StrictHostKeyChecking=no \ + -o UserKnownHostsFile=/dev/null \ + -L *:5000:localhost:5000 \ + $REGISTRY & + + echo "Building target: base" + + sudo docker buildx build \ + --platform linux/arm64 \ + -t host.docker.internal:5000/magrob.env:latest \ + -f Dockerfile.env \ + --output type=registry \ + . + ;; + *) + echo "Target not defined" + exit 1 + ;; +esac + + diff --git a/scripts/install_base_deps.sh b/scripts/install_base_deps.sh new file mode 100755 index 0000000..41cc1ac --- /dev/null +++ b/scripts/install_base_deps.sh @@ -0,0 +1,17 @@ +#!/bin/bash + + +ros_distro="jazzy" +script_dir=$(dirname "$(readlink -f "${bash_source[0]}")") + +source "/opt/ros/${ROS_DISTRO}/setup.bash" +apt update +apt-get install -y ros-jazzy-hardware-interface # For some reason this package is problamatic +rosdep install -i -y \ + --from-paths ./mg_bringup \ + --from-paths ./mg_msgs \ + --from-paths ./mg_navigation \ + --from-paths ./mg_control \ + --from-paths ./mg_odometry \ + --from-paths ./mg_obstacles \ + --from-paths ./mg_lidar diff --git a/util/docker_registry/config/config.yml b/util/docker_registry/config/config.yml new file mode 100644 index 0000000..0bf56a2 --- /dev/null +++ b/util/docker_registry/config/config.yml @@ -0,0 +1,9 @@ +version: 0.1 +storage: + filesystem: + rootdirectory: /var/lib/registry +http: + addr: :5000 + headers: + X-Content-Type-Options: [nosniff] + diff --git a/util/docker_registry/docker-compose.yaml b/util/docker_registry/docker-compose.yaml new file mode 100644 index 0000000..9d31a97 --- /dev/null +++ b/util/docker_registry/docker-compose.yaml @@ -0,0 +1,13 @@ +services: + registry: + restart: always + image: registry:2 + ports: + - 5000:5000 + environment: + REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt + REGISTRY_HTTP_TLS_KEY: /certs/domain.key + REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /var/lib/registry + volumes: + - ./config/config.yml:/etc/docker/registry/config.yml:ro + - ./data:/var/lib/registry:rw