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

feat: add wolfi based image #12671

Merged
merged 11 commits into from
Jun 7, 2024
89 changes: 87 additions & 2 deletions packaging/docker/Dockerfile.chainguard
Original file line number Diff line number Diff line change
@@ -1,2 +1,87 @@
FROM docker.elastic.co/wolfi/chainguard-base:20230214
RUN echo 'TBC'
ARG GOLANG_VERSION

################################################################################
# Build stage 0
# Build the apm-server binary. The golang image version is kept
# up to date with go.mod by Makefile.
################################################################################
FROM docker.elastic.co/wolfi/go:${GOLANG_VERSION} as builder
WORKDIR /src
COPY go.mod go.sum .go-version /src/
COPY internal/glog/go.mod /src/internal/glog/go.mod
RUN --mount=type=cache,target=/go/pkg/mod go mod download
COPY Makefile *.mk /src/
COPY cmd /src/cmd
COPY internal /src/internal
COPY x-pack /src/x-pack
COPY .git /src/.git
COPY script /src/script

RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
make apm-server

COPY apm-server.yml ./apm-server.yml
COPY --chmod=0644 apm-server.yml ./apm-server.yml
RUN sed -i 's/127.0.0.1:8200/0.0.0.0:8200/' apm-server.yml
RUN sed -i 's/localhost:9200/elasticsearch:9200/' apm-server.yml

################################################################################
# Build stage 1
# Copy prepared files from the previous stage and complete the image.
################################################################################
FROM cgr.dev/chainguard/static:latest@sha256:288b818c1b3dd89776d176f07f5f671b118fe836c4d80ec2cc3299b596fe71b7
ARG TARGETARCH
ARG BUILD_DATE
ARG VERSION
ARG VCS_REF

# Statically defined labels.
LABEL \
org.label-schema.schema-version="1.0" \
org.label-schema.vendor="Elastic" \
org.label-schema.license="Elastic License" \
org.label-schema.name="apm-server" \
org.label-schema.url="https://www.elastic.co/apm" \
org.label-schema.vcs-url="github.com/elastic/apm-server" \
io.k8s.description="Elastic APM Server" \
io.k8s.display-name="Apm-Server image" \
org.opencontainers.image.licenses="Elastic License" \
org.opencontainers.image.title="Apm-Server" \
org.opencontainers.image.vendor="Elastic" \
name="apm-server" \
maintainer="[email protected]" \
vendor="Elastic" \
release="1" \
url="https://www.elastic.co/apm" \
summary="apm-server" \
license="Elastic License" \
description="Elastic APM Server"

# Dynamic labels, only set in published images.
LABEL \
org.label-schema.build-date=${BUILD_DATE} \
org.label-schema.version=${VERSION} \
org.label-schema.vcs-ref=${VCS_REF} \
org.opencontainers.image.created=${BUILD_DATE} \
version=${VERSION}

ENV ELASTIC_CONTAINER "true"

# When running under Docker, we must ensure libbeat monitoring pulls cgroup
# metrics from /sys/fs/cgroup/<subsystem>/, ignoring any paths found in
# /proc/self/cgroup.
ENV LIBBEAT_MONITORING_CGROUPS_HIERARCHY_OVERRIDE=/

# Disable libbeat's strict permissions checking, which is not relevant when
# running in Docker.
ENV BEAT_STRICT_PERMS=false

COPY --chmod=0644 --chown=nonroot:nonroot licenses/ELASTIC-LICENSE-2.0.txt NOTICE.txt /licenses/

WORKDIR /usr/share/apm-server
COPY --chmod=0755 --chown=nonroot:nonroot --from=builder /src/apm-server ./apm-server
COPY --chmod=0644 --chown=nonroot:nonroot --from=builder /src/apm-server.yml ./apm-server.yml

EXPOSE 8200
ENTRYPOINT ["/usr/share/apm-server/apm-server", "--environment=container"]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the default apm-server config file relative?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The config file is copied in the workdir so /usr/share/apm-server

This is the same behaviour as the current ubuntu-based docker image:

COPY --chmod=0644 apm-server.yml ./apm-server.yml