diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000000..a2a1a1e2c34 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,44 @@ +ARG TAG +FROM ubuntu:${TAG} + +SHELL ["/bin/bash", "-c"] + +ENV DEBIAN_FRONTEND noninteractive + +USER root + +# Install +RUN apt update \ + && apt install -y \ + curl \ + lsb-release \ + git \ + build-essential + +# Install ROS sources and tooling dependencies +COPY .github/workflows/add_ros_apt_sources.sh /tmp/add_ros_apt_sources.sh +RUN ./tmp/add_ros_apt_sources.sh \ + && apt install -y \ + python3-colcon-common-extensions \ + python3-rosdep \ + python3-vcstool \ + liboctomap-dev \ + && rosdep init \ + && rosdep update + +# Install the dependency repositories +# Bind mount the source directory so as not to unnecessarily copy source code into the docker image +ARG WORKSPACE_DIR=/opt/tesseract +RUN --mount=type=bind,target=${WORKSPACE_DIR}/src/tesseract \ + cd ${WORKSPACE_DIR} \ + && vcs import src < src/tesseract/dependencies.repos --shallow \ + && rosdep install \ + --from-paths ${WORKSPACE_DIR}/src \ + -iry + +# Build the repository +# Bind mount the source directory so as not to unnecessarily copy source code into the docker image +RUN --mount=type=bind,target=${WORKSPACE_DIR}/src/tesseract \ + cd ${WORKSPACE_DIR} \ + && colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release \ + && rm -rf build log diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 00000000000..bd339d857c9 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,28 @@ +# Tesseract Docker + +## Create the Docker image +### Download +Download a pre-built Docker image for this bridge from the container registry: + +``` +docker login ghcr.io +docker pull ghcr.io/tesseract-robotics/tesseract_deploy: +``` + +### Build +Build the Docker image using `docker-compose`: + +```commandLine +cd docker +docker compose build +``` + +## Run the docker image +Run the Docker image using `docker-compose`: + +```commandLine +cd docker +CURRENT_UID=$(id -u):$(id -g) docker compose up +``` + +> Note: by default the docker image runs as a non-root user, so the environment variable `CURRENT_UID` must be supplied as shown above \ No newline at end of file diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 00000000000..f4452a658f4 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,14 @@ +version: '3' +services: + tesseract: + build: + context: .. + dockerfile: docker/Dockerfile + args: + - TAG=focal + container_name: tesseract + image: ghcr.io/tesseract-robotics/tesseract_deploy:focal-0.20 + stdin_open: true + tty: true + network_mode: host + user: ${CURRENT_UID} # CURRENT_UID=$(id -u):$(id -g)