Skip to content

Commit c8b1add

Browse files
committed
chore(dogfood): optimize dockerfile for envbuilder cache probing
1 parent 0f414a0 commit c8b1add

File tree

1 file changed

+30
-16
lines changed

1 file changed

+30
-16
lines changed

dogfood/contents/Dockerfile

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,29 @@ FROM rust:slim AS rust-utils
22
# Install rust helper programs
33
# ENV CARGO_NET_GIT_FETCH_WITH_CLI=true
44
ENV CARGO_INSTALL_ROOT=/tmp/
5-
RUN cargo install exa bat ripgrep typos-cli watchexec-cli
5+
RUN cargo install exa bat ripgrep typos-cli watchexec-cli && \
6+
# Reduce image size.
7+
rm -rf /usr/local/cargo/registry
68

79
FROM ubuntu:jammy AS go
810

9-
RUN apt-get update && apt-get install --yes curl gcc
1011
# Install Go manually, so that we can control the version
1112
ARG GO_VERSION=1.22.5
12-
RUN mkdir --parents /usr/local/go
1313

1414
# Boring Go is needed to build FIPS-compliant binaries.
15-
RUN curl --silent --show-error --location \
15+
RUN apt-get update && \
16+
apt-get install --yes curl && \
17+
curl --silent --show-error --location \
1618
"https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" \
1719
-o /usr/local/go.tar.gz
1820

19-
RUN tar --extract --gzip --directory=/usr/local/go --file=/usr/local/go.tar.gz --strip-components=1
20-
2121
ENV PATH=$PATH:/usr/local/go/bin
22-
23-
# Install Go utilities.
2422
ARG GOPATH="/tmp/"
25-
RUN mkdir --parents "$GOPATH" && \
23+
# Install Go utilities.
24+
RUN apt-get install --yes gcc && \
25+
mkdir --parents /usr/local/go && \
26+
tar --extract --gzip --directory=/usr/local/go --file=/usr/local/go.tar.gz --strip-components=1 && \
27+
mkdir --parents "$GOPATH" && \
2628
# moq for Go tests.
2729
go install github.com/matryer/moq@v0.2.3 && \
2830
# swag for Swagger doc generation
@@ -73,34 +75,44 @@ RUN mkdir --parents "$GOPATH" && \
7375
# yq v3 used in v1.
7476
go install github.com/mikefarah/yq/v4@v4.30.6 && \
7577
mv /tmp/bin/yq /tmp/bin/yq4 && \
76-
go install go.uber.org/mock/mockgen@v0.4.0
78+
go install go.uber.org/mock/mockgen@v0.4.0 && \
79+
# Reduce image size.
80+
apt-get remove --yes gcc && \
81+
apt-get autoremove --yes && \
82+
apt-get clean && \
83+
rm -rf /var/lib/apt/lists && \
84+
rm -rf /usr/local/go && \
85+
rm -rf /tmp/go/pkg && \
86+
rm -rf /tmp/go/src
7787

7888
FROM gcr.io/coder-dev-1/alpine:3.18 as proto
7989
WORKDIR /tmp
8090
RUN apk add curl unzip
81-
RUN curl -L -o protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v23.3/protoc-23.3-linux-x86_64.zip
82-
RUN unzip protoc.zip
91+
RUN curl -L -o protoc.zip https://github.com/protocolbuffers/protobuf/releases/download/v23.3/protoc-23.3-linux-x86_64.zip && \
92+
unzip protoc.zip && \
93+
rm protoc.zip
8394

8495
FROM ubuntu:jammy
8596

8697
SHELL ["/bin/bash", "-c"]
8798

99+
# Install packages from apt repositories
100+
ARG DEBIAN_FRONTEND="noninteractive"
101+
88102
# Updated certificates are necessary to use the teraswitch mirror.
89103
# This must be ran before copying in configuration since the config replaces
90104
# the default mirror with teraswitch.
91105
RUN apt-get update && apt-get install --yes ca-certificates
92106

93107
COPY files /
108+
94109
# We used to copy /etc/sudoers.d/* in from files/ but this causes issues with
95110
# permissions and layer caching. Instead, create the file directly.
96111
RUN mkdir -p /etc/sudoers.d && \
97112
echo 'coder ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/nopasswd && \
98113
chmod 750 /etc/sudoers.d/ && \
99114
chmod 640 /etc/sudoers.d/nopasswd
100115

101-
# Install packages from apt repositories
102-
ARG DEBIAN_FRONTEND="noninteractive"
103-
104116
RUN apt-get update --quiet && apt-get install --yes \
105117
ansible \
106118
apt-transport-https \
@@ -231,7 +243,9 @@ RUN systemctl disable \
231243
# Configure systemd services for CVMs
232244
RUN systemctl enable \
233245
docker \
234-
ssh
246+
ssh && \
247+
# Workaround for envbuilder cache probing not working unless the filesystem is modified.
248+
touch /tmp/.envbuilder-systemctl-enable-docker-ssh-workaround
235249

236250
# Install tools with published releases, where that is the
237251
# preferred/recommended installation method.

0 commit comments

Comments
 (0)