Skip to content
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

Fix base/dev image long build times #173

Merged
merged 15 commits into from
Oct 3, 2023
2 changes: 1 addition & 1 deletion .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM ghcr.io/ubcsailbot/sailbot_workspace/dev:mongodb-cpp
FROM ghcr.io/ubcsailbot/sailbot_workspace/dev:refactor-images-v2

# Copy configuration files (e.g., .vimrc) from config/ to the container's home directory
ARG USERNAME=ros
Expand Down
14 changes: 1 addition & 13 deletions .devcontainer/base-dev/base-dev.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM ghcr.io/ubcsailbot/sailbot_workspace/pre-base:ros_humble-ompl_4c86b2f as base
FROM ghcr.io/ubcsailbot/sailbot_workspace/pre-base:ros_humble-ompl_4c86b2f-mongo_367-v2 as base

# install base apt dependencies
ENV DEBIAN_FRONTEND=noninteractive
Expand Down Expand Up @@ -70,23 +70,11 @@ RUN apt-get update \
&& apt-get install -y --no-install-recommends \
mongodb-database-tools \
mongodb-mongosh \
libmongoc-dev \
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log} /tmp/* /var/tmp/*
ENV DEBIAN_FRONTEND=

# setup MongoDB C++ Packages
ENV DEBIAN_FRONTEND=noninteractive
# mongo-cxx-driver version must match libmongoc-dev version - see https://mongocxx.org/mongocxx-v3/installation/linux/
RUN wget https://github.com/mongodb/mongo-cxx-driver/releases/download/r3.6.7/mongo-cxx-driver-r3.6.7.tar.gz \
&& tar -xzf mongo-cxx-driver-r3.6.7.tar.gz \
&& cd mongo-cxx-driver-r3.6.7/build \
&& cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \
&& cmake --build . \
&& cmake --build . --target install
ENV DEBIAN_FRONTEND=

FROM local-base as ros-dev

# From https://github.com/athackst/dockerfiles/blob/32a872348af0ad25ec4a6e6184cb803357acb6ab/ros2/humble.Dockerfile
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/pre-base/build-pre-base.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

docker buildx build . \
--file pre-base.Dockerfile \
--tag ghcr.io/ubcsailbot/sailbot_workspace/pre-base:ros_humble-ompl_4c86b2f \
--tag ghcr.io/ubcsailbot/sailbot_workspace/pre-base:ros_humble-ompl_4c86b2f-mongo_367-v2 \
--platform linux/arm64,linux/amd64 \
--push
43 changes: 40 additions & 3 deletions .devcontainer/pre-base/pre-base.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,15 @@
FROM ubuntu:22.04 AS ompl-source
FROM ubuntu:22.04 AS fix-certificates

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ca-certificates \
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log} /tmp/* /var/tmp/*
ENV DEBIAN_FRONTEND=

FROM fix-certificates AS ompl-source

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
Expand All @@ -11,7 +22,7 @@ WORKDIR /ompl
RUN git reset --hard 4c86b2f

# From https://github.com/athackst/dockerfiles/blob/32a872348af0ad25ec4a6e6184cb803357acb6ab/ros2/humble.Dockerfile
FROM ubuntu:22.04 AS ros-pre-base
FROM fix-certificates AS ros-pre-base

ENV DEBIAN_FRONTEND=noninteractive

Expand Down Expand Up @@ -55,7 +66,7 @@ ENV ROS_VERSION=2
ENV DEBIAN_FRONTEND=

# Based on https://github.com/ompl/ompl/blob/4c86b2fecf7084ae9073bf6a837176d0be169721/scripts/docker/ompl.Dockerfile
FROM ros-pre-base AS ompl-builder
FROM fix-certificates AS ompl-builder
# avoid interactive configuration dialog from tzdata, which gets pulled in
# as a dependency
ENV DEBIAN_FRONTEND=noninteractive
Expand Down Expand Up @@ -99,6 +110,30 @@ RUN cmake \
&& ninja -j `nproc` \
&& ninja install

FROM fix-certificates AS mongo-cxx-driver-builder

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
build-essential \
cmake \
git \
libmongoc-dev \
wget \
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/{apt,dpkg,cache,log} /tmp/* /var/tmp/*

# setup MongoDB C++ Packages
# mongo-cxx-driver version must match libmongoc-dev version - see https://mongocxx.org/mongocxx-v3/installation/linux/
RUN wget https://github.com/mongodb/mongo-cxx-driver/releases/download/r3.6.7/mongo-cxx-driver-r3.6.7.tar.gz \
&& tar -xzf mongo-cxx-driver-r3.6.7.tar.gz \
&& cd mongo-cxx-driver-r3.6.7/build \
&& cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \
&& cmake --build . \
&& cmake --build . --target install
ENV DEBIAN_FRONTEND=

FROM ros-pre-base as pre-base
LABEL org.opencontainers.image.source = "https://github.com/UBCSailbot/sailbot_workspace"

Expand All @@ -115,6 +150,7 @@ RUN apt-get update \
libboost-system-dev \
libeigen3-dev \
libflann-dev \
libmongoc-dev \
libode-dev \
libtriangle-dev \
ninja-build \
Expand All @@ -129,3 +165,4 @@ RUN apt-get update \
ENV DEBIAN_FRONTEND=

COPY --from=ompl-builder /usr /usr
COPY --from=mongo-cxx-driver-builder /usr/local /usr/local