75 lines
2.6 KiB
Docker
75 lines
2.6 KiB
Docker
FROM ubuntu:24.04
|
|
|
|
# Install build tools and dependencies
|
|
RUN apt-get update \
|
|
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
|
apt-transport-https \
|
|
curl \
|
|
gnupg \
|
|
sudo `# allows dev to install more packages without switching to root or rebuilding container` \
|
|
build-essential \
|
|
libsqlite3-dev \
|
|
libcurl4-openssl-dev \
|
|
libglfw3-dev \
|
|
libuv1-dev \
|
|
libpng-dev \
|
|
libicu-dev \
|
|
libjpeg-turbo8-dev \
|
|
libwebp-dev \
|
|
xvfb \
|
|
clang \
|
|
git \
|
|
cmake \
|
|
ccache \
|
|
ninja-build \
|
|
pkg-config \
|
|
python3 \
|
|
python3-pip \
|
|
python-is-python3 \
|
|
clang-tidy \
|
|
&& : # end of the RUN cmd - easier to keep a colon at the end of the list, than to keep the backslashes in check
|
|
|
|
# This could also be `.../releases/latest/download/bazelisk-linux-amd64` for the latest version, but for predictability better hardcode it
|
|
# Detect if current CPU is x64 or ARM64 and download the appropriate binary
|
|
RUN echo "Download and install Bazel" \
|
|
&& if [ "$(uname -m)" = "aarch64" ]; then \
|
|
curl -fsSL https://github.com/bazelbuild/bazelisk/releases/download/v1.20.0/bazelisk-linux-arm64 -o /usr/local/bin/bazel ;\
|
|
else \
|
|
curl -fsSL https://github.com/bazelbuild/bazelisk/releases/download/v1.20.0/bazelisk-linux-amd64 -o /usr/local/bin/bazel ;\
|
|
fi \
|
|
&& chmod +x /usr/local/bin/bazel \
|
|
&& :
|
|
|
|
# This username is hardcoded in several places, and should simply match whatever base image uses
|
|
ARG USERNAME=ubuntu
|
|
ARG USER_UID=1000
|
|
ARG USER_GID=$USER_UID
|
|
|
|
# Create docker user with sudo rights as passed in by the build command
|
|
# This was modeled on https://code.visualstudio.com/remote/advancedcontainers/add-nonroot-user
|
|
# On a Mac, USER_GID might already exist, so ignore it if it fails (--force)
|
|
RUN groupmod --gid $USER_GID $USERNAME \
|
|
&& usermod --uid $USER_UID --gid $USER_GID $USERNAME \
|
|
&& chown -R $USER_UID:$USER_GID /home/$USERNAME \
|
|
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
|
|
&& chmod 0440 /etc/sudoers.d/$USERNAME
|
|
|
|
# This allows users to `docker run` without specifying -u and -g
|
|
USER $USERNAME
|
|
|
|
#RUN pip install pre-commit
|
|
|
|
ENV RUSTUP_HOME=/home/$USERNAME/.cache/.rustup \
|
|
CARGO_HOME=/home/$USERNAME/.cache/.cargo \
|
|
PATH=/home/$USERNAME/.cache/.cargo/bin:$PATH
|
|
|
|
# As the very last step, copy the startup script
|
|
USER root
|
|
COPY startup.sh /usr/local/bin/startup.sh
|
|
RUN chmod +x /usr/local/bin/startup.sh
|
|
USER $USERNAME
|
|
|
|
WORKDIR /app
|
|
ENTRYPOINT ["/usr/local/bin/startup.sh"]
|
|
CMD ["bash"]
|