Skip to content

Commit

Permalink
Separate dev-image from main Dockerfile (signalfx#1421)
Browse files Browse the repository at this point in the history
  • Loading branch information
jchengsfx authored Aug 18, 2020
1 parent 7ef80a7 commit c3cef79
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 93 deletions.
93 changes: 2 additions & 91 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@ RUN find /usr/local/lib/python3.8 -name "*.pyc" -o -name "*.pyo" | xargs rm
# We don't support compiling extension modules so don't need this directory
RUN rm -rf /usr/local/lib/python3.8/config-*-linux-gnu


######### Java monitor dependencies and monitor jar compilation
FROM ubuntu:16.04 as java

Expand Down Expand Up @@ -378,97 +379,6 @@ COPY --from=agent-builder /usr/bin/signalfx-agent /bin/signalfx-agent
WORKDIR /


####### Dev Image ########
# This is an image to facilitate development of the agent. It installs all of
# the build tools for building collectd and the go agent, along with some other
# useful utilities. The agent image is copied from the final-image stage to
# the /bundle dir in here and the SIGNALFX_BUNDLE_DIR is set to point to that.
FROM ubuntu:18.04 as dev-extras

RUN apt update &&\
apt install -y \
build-essential \
curl \
git \
inotify-tools \
iproute2 \
jq \
net-tools \
python3.8 \
python3.8-dev \
python3.8-distutils \
socat \
sudo \
vim \
wget

ENV PATH=$PATH:/usr/local/go/bin:/go/bin GOPATH=/go
ENV SIGNALFX_BUNDLE_DIR=/bundle \
TEST_SERVICES_DIR=/usr/src/signalfx-agent/test-services \
AGENT_BIN=/usr/src/signalfx-agent/signalfx-agent \
PYTHONPATH=/usr/src/signalfx-agent/python \
AGENT_VERSION=latest \
BUILD_TIME=2017-01-25T13:17:17-0500 \
GOOS=linux \
LC_ALL=C.UTF-8 \
LANG=C.UTF-8

RUN rm -f /usr/bin/python3 && \
ln -s /usr/bin/python3.8 /usr/bin/python && \
ln -s /usr/bin/python3.8 /usr/bin/python3

RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
python get-pip.py pip==20.0.2 && \
rm get-pip.py

RUN curl -fsSL get.docker.com -o /tmp/get-docker.sh &&\
sh /tmp/get-docker.sh

ARG TARGET_ARCH

RUN wget -O /usr/bin/gomplate https://github.com/hairyhenderson/gomplate/releases/download/v3.4.0/gomplate_linux-${TARGET_ARCH} &&\
chmod +x /usr/bin/gomplate

# Install helm
ARG HELM_VERSION=v3.0.0
WORKDIR /tmp
RUN wget -O helm.tar.gz https://get.helm.sh/helm-${HELM_VERSION}-linux-${TARGET_ARCH}.tar.gz && \
tar -zxvf /tmp/helm.tar.gz && \
mv linux-${TARGET_ARCH}/helm /usr/local/bin/helm && \
chmod a+x /usr/local/bin/helm

# Install kubectl
ARG KUBECTL_VERSION=v1.14.1
RUN cd /tmp &&\
curl -LO https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGET_ARCH}/kubectl &&\
chmod +x ./kubectl &&\
mv ./kubectl /usr/bin/kubectl

# Get integration test deps in here
RUN pip3 install ipython ipdb
COPY tests/requirements.txt /tmp/
RUN pip3 install -r /tmp/requirements.txt
RUN ln -s /usr/bin/pip3 /usr/bin/pip

WORKDIR /usr/src/signalfx-agent

COPY --from=final-image /bin/signalfx-agent ./signalfx-agent
COPY --from=final-image / /bundle/
RUN /bundle/bin/patch-interpreter /bundle

COPY --from=agent-builder /usr/local/go /usr/local/go
COPY --from=agent-builder /go $GOPATH

RUN go get -u golang.org/x/lint/golint &&\
if [ `uname -m` != "aarch64" ]; then go get github.com/derekparker/delve/cmd/dlv; fi &&\
go get github.com/tebeka/go2xunit &&\
curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.23.8

COPY ./ ./

CMD ["/bin/bash"]


####### Pandoc Converter ########
FROM ubuntu:16.04 as pandoc-converter

Expand Down Expand Up @@ -513,6 +423,7 @@ RUN rm -f /usr/lib/signalfx-agent/bin/agent-status
RUN /usr/lib/signalfx-agent/bin/patch-interpreter /usr/lib/signalfx-agent
RUN mv /usr/lib/signalfx-agent ./signalfx-agent


###### RPM Packager #######
FROM fedora:27 as rpm-packager

Expand Down
91 changes: 91 additions & 0 deletions Dockerfile.dev
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
####### Dev Image ########
# Note: Run `make dev-image` from the root directory of the repo.
#
# This is an image to facilitate development of the agent. It installs all of
# the build tools for building collectd and the go agent, along with some other
# useful utilities. The agent image is copied from the final-image stage to
# the /bundle dir in here and the SIGNALFX_BUNDLE_DIR is set to point to that.
FROM ubuntu:18.04

RUN apt update &&\
apt install -y \
build-essential \
curl \
git \
inotify-tools \
iproute2 \
jq \
net-tools \
python3.8 \
python3.8-dev \
python3.8-distutils \
socat \
sudo \
vim \
wget

ENV PATH=$PATH:/usr/local/go/bin:/go/bin GOPATH=/go
ENV SIGNALFX_BUNDLE_DIR=/bundle \
TEST_SERVICES_DIR=/usr/src/signalfx-agent/test-services \
AGENT_BIN=/usr/src/signalfx-agent/signalfx-agent \
PYTHONPATH=/usr/src/signalfx-agent/python \
AGENT_VERSION=latest \
BUILD_TIME=2017-01-25T13:17:17-0500 \
GOOS=linux \
LC_ALL=C.UTF-8 \
LANG=C.UTF-8

RUN rm -f /usr/bin/python3 && \
ln -s /usr/bin/python3.8 /usr/bin/python && \
ln -s /usr/bin/python3.8 /usr/bin/python3

RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
python get-pip.py pip==20.0.2 && \
rm get-pip.py

RUN curl -fsSL get.docker.com -o /tmp/get-docker.sh &&\
sh /tmp/get-docker.sh

ARG TARGET_ARCH=amd64

RUN wget -O /usr/bin/gomplate https://github.com/hairyhenderson/gomplate/releases/download/v3.4.0/gomplate_linux-${TARGET_ARCH} &&\
chmod +x /usr/bin/gomplate

# Install helm
ARG HELM_VERSION=v3.0.0
WORKDIR /tmp
RUN wget -O helm.tar.gz https://get.helm.sh/helm-${HELM_VERSION}-linux-${TARGET_ARCH}.tar.gz && \
tar -zxvf /tmp/helm.tar.gz && \
mv linux-${TARGET_ARCH}/helm /usr/local/bin/helm && \
chmod a+x /usr/local/bin/helm

# Install kubectl
ARG KUBECTL_VERSION=v1.14.1
RUN cd /tmp &&\
curl -LO https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VERSION}/bin/linux/${TARGET_ARCH}/kubectl &&\
chmod +x ./kubectl &&\
mv ./kubectl /usr/bin/kubectl

# Get integration test deps in here
RUN pip3 install ipython ipdb
COPY tests/requirements.txt /tmp/
RUN pip3 install -r /tmp/requirements.txt
RUN ln -s /usr/bin/pip3 /usr/bin/pip

WORKDIR /usr/src/signalfx-agent

COPY --from=signalfx-agent-dev-cache:stage-final-image /bin/signalfx-agent ./signalfx-agent
COPY --from=signalfx-agent-dev-cache:stage-final-image / /bundle/
RUN /bundle/bin/patch-interpreter /bundle

COPY --from=signalfx-agent-dev-cache:stage-agent-builder /usr/local/go /usr/local/go
COPY --from=signalfx-agent-dev-cache:stage-agent-builder /go $GOPATH

RUN go get -u golang.org/x/lint/golint &&\
if [ `uname -m` != "aarch64" ]; then go get github.com/derekparker/delve/cmd/dlv; fi &&\
go get github.com/tebeka/go2xunit &&\
curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.23.8

COPY ./ ./

CMD ["/bin/bash"]
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ rpm-%-package:

.PHONY: dev-image
dev-image:
bash -ec "COLLECTD_VERSION=$(COLLECTD_VERSION) COLLECTD_COMMIT=$(COLLECTD_COMMIT) && source scripts/common.sh && do_docker_build signalfx-agent-dev latest dev-extras"
COLLECTD_VERSION=$(COLLECTD_VERSION) COLLECTD_COMMIT=$(COLLECTD_COMMIT) scripts/make-dev-image

.PHONY: debug
debug:
Expand Down
11 changes: 10 additions & 1 deletion scripts/make-dev-image
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,13 @@ SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

. $SCRIPT_DIR/common.sh

COLLECTD_VERSION=${COLLECTD_VERSION} COLLECTD_COMMIT=${COLLECTD_COMMIT} do_docker_build signalfx-agent-dev latest dev-extras
COLLECTD_VERSION=${COLLECTD_VERSION} COLLECTD_COMMIT=${COLLECTD_COMMIT} do_docker_build signalfx-agent-dev-cache stage-agent-builder agent-builder latest

COLLECTD_VERSION=${COLLECTD_VERSION} COLLECTD_COMMIT=${COLLECTD_COMMIT} do_docker_build signalfx-agent-dev-cache stage-final-image final-image latest

target_arch="amd64"
if [ "$(uname -m)" == "aarch64" ]; then
target_arch="arm64"
fi

docker build -t signalfx-agent-dev:latest --build-arg TARGET_ARCH=${target_arch} -f ${SCRIPT_DIR}/../Dockerfile.dev ${SCRIPT_DIR}/../

0 comments on commit c3cef79

Please sign in to comment.