Skip to content

Commit 3cb4061

Browse files
authored
Merge pull request #8 from deniszh/DZ-Refresh
Software refresh
2 parents ea6c9f4 + cc3a98f commit 3cb4061

File tree

7 files changed

+305
-113
lines changed

7 files changed

+305
-113
lines changed

Dockerfile

Lines changed: 113 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,115 @@
1-
FROM phusion/baseimage:0.10.0
2-
MAINTAINER Denys Zhdanov <[email protected]>
3-
4-
RUN apt-get -y update \
5-
&& apt-get -y upgrade \
6-
&& apt-get -y --force-yes install ca-certificates \
7-
apt-transport-https \
8-
wget \
9-
nginx \
10-
git \
11-
sqlite3 \
12-
libcairo2 \
13-
libcairo2-dev \
14-
&& curl -s https://packagecloud.io/install/repositories/go-graphite/stable/script.deb.sh | bash \
15-
&& apt-get install -y carbonapi carbonzipper \
16-
&& mkdir /etc/carbonapi/ \
17-
&& rm -rf /var/lib/apt/lists/*
18-
19-
# install go-carbon
20-
RUN wget https://github.com/lomik/go-carbon/releases/download/v0.12.0/go-carbon_0.12.0_amd64.deb \
21-
&& dpkg -i go-carbon_0.12.0_amd64.deb \
22-
&& rm /go-carbon_0.12.0_amd64.deb \
23-
&& mkdir -p /var/lib/graphite/whisper \
24-
&& mkdir -p /var/lib/graphite/dump \
25-
&& service go-carbon stop
26-
27-
# install grafana
28-
ADD conf/etc/grafana/grafana.ini /etc/grafana/grafana.ini
29-
ADD conf/etc/grafana/provisioning/datasources/carbonapi.yaml /etc/grafana/provisioning/datasources/carbonapi.yaml
30-
RUN wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_5.0.1_amd64.deb \
31-
&& dpkg -i grafana_5.0.1_amd64.deb \
32-
&& rm /grafana_5.0.1_amd64.deb \
33-
&& service grafana-server restart \
34-
&& sleep 5 \
35-
&& service grafana-server stop \
36-
&& mkdir -p /usr/share/grafana/data \
37-
&& mv -fv /var/lib/grafana/* /usr/share/grafana/data
38-
39-
# config nginx
40-
RUN rm /etc/nginx/sites-enabled/default
41-
ADD conf/etc/nginx/nginx.conf /etc/nginx/nginx.conf
42-
ADD conf/etc/nginx/sites-enabled/go-graphite.conf /etc/nginx/sites-enabled/go-graphite.conf
43-
44-
# config go-carbon
45-
ADD conf/etc/go-carbon/go-carbon.conf /etc/go-carbon/go-carbon.conf
46-
ADD conf/etc/go-carbon/storage-aggregation.conf /etc/go-carbon/storage-aggregation.conf
47-
ADD conf/etc/go-carbon/storage-schemas.conf /etc/go-carbon/storage-schemas.conf
48-
49-
# config carbonapi
50-
ADD conf/etc/carbonapi/carbonapi.yaml /etc/carbonapi/carbonapi.yaml
51-
52-
# logging support
53-
RUN mkdir -p /var/log/go-carbon /var/log/carbonapi /var/log/nginx
54-
ADD conf/etc/logrotate.d/go-graphite.conf /etc/logrotate.d/go-graphite.conf
55-
56-
# daemons
57-
ADD conf/etc/service/go-carbon/run /etc/service/go-carbon/run
58-
ADD conf/etc/service/carbonapi/run /etc/service/carbonapi/run
59-
ADD conf/etc/service/grafana/run /etc/service/grafana/run
60-
ADD conf/etc/service/nginx/run /etc/service/nginx/run
61-
62-
# cleanup
63-
RUN apt-get clean\
64-
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
65-
66-
# defaults
67-
EXPOSE 80 2003 2004 8080 8081
68-
VOLUME ["/etc/go-carbon", "/etc/carbonapi", "/var/lib/graphite", "/etc/nginx", "/etc/grafana", "/etc/logrotate.d", "/var/log"]
1+
# ---------------------- BUILD IMAGE ---------------------------------------
2+
FROM golang:1-alpine as builder
3+
4+
ENV GOCARBON_VERSION=0.14.0
5+
ENV CARBONAPI_VERSION=0.12.6
6+
ENV GRAFANA_VERSION=6.4.3
7+
ENV GOPATH=/opt/go
8+
9+
RUN \
10+
apk update --no-cache && \
11+
apk upgrade --no-cache && \
12+
apk add g++ git make musl-dev cairo-dev
13+
14+
# Install Grafana
15+
16+
RUN mkdir /tmp/grafana \
17+
&& wget -P /tmp/ https://dl.grafana.com/oss/release/grafana-${GRAFANA_VERSION}.linux-amd64.tar.gz \
18+
&& tar xfz /tmp/grafana-${GRAFANA_VERSION}.linux-amd64.tar.gz --strip-components=1 -C /tmp/grafana
19+
20+
# Install go-carbon
21+
22+
WORKDIR ${GOPATH}
23+
24+
RUN \
25+
export PATH="${PATH}:${GOPATH}/bin" && \
26+
mkdir -p \
27+
/var/log/go-carbon && \
28+
git clone https://github.com/lomik/go-carbon.git
29+
30+
WORKDIR ${GOPATH}/go-carbon
31+
32+
RUN \
33+
export PATH="${PATH}:${GOPATH}/bin" && \
34+
git checkout "tags/v${GOCARBON_VERSION}" 2> /dev/null ; \
35+
version=$(git describe --tags --always | sed 's/^v//') && \
36+
echo "build version: ${version}" && \
37+
make && \
38+
mv go-carbon /tmp/go-carbon
39+
40+
# Install carbonapi
41+
42+
WORKDIR ${GOPATH}
43+
44+
RUN \
45+
export PATH="${PATH}:${GOPATH}/bin" && \
46+
mkdir -p \
47+
/var/log/carbonapi && \
48+
git clone https://github.com/go-graphite/carbonapi.git
49+
50+
WORKDIR ${GOPATH}/carbonapi
51+
52+
RUN \
53+
export PATH="${PATH}:${GOPATH}/bin" && \
54+
git checkout "tags/${CARBONAPI_VERSION}" 2> /dev/null ; \
55+
version=${CARBONAPI_VERSION} && \
56+
echo "build version: ${version}" && \
57+
make && \
58+
mv carbonapi /tmp/carbonapi
59+
60+
# ------------------------------ RUN IMAGE --------------------------------------
61+
FROM alpine:3.10
62+
63+
ENV TZ='Europe/Amsterdam'
64+
65+
COPY --from=builder /tmp/grafana/bin/grafana-cli /usr/bin/grafana-cli
66+
COPY --from=builder /tmp/grafana/bin/grafana-server /usr/sbin/grafana-server
67+
COPY --from=builder /tmp/grafana/conf /usr/share/grafana/conf
68+
COPY --from=builder /tmp/grafana/public /usr/share/grafana/public
69+
COPY --from=builder /tmp/grafana/tools /usr/share/grafana/tools
70+
COPY --from=builder /tmp/go-carbon /usr/bin/go-carbon
71+
COPY --from=builder /tmp/carbonapi /usr/bin/carbonapi
72+
73+
COPY conf/ /
74+
75+
RUN \
76+
apk update --no-cache && \
77+
apk upgrade --no-cache && \
78+
apk add --no-cache --virtual .build-deps \
79+
cairo \
80+
shadow \
81+
tzdata \
82+
nginx \
83+
runit \
84+
dcron \
85+
logrotate \
86+
libc6-compat \
87+
ca-certificates \
88+
su-exec \
89+
bash \
90+
&& rm -rf \
91+
/etc/nginx/conf.d/default.conf /etc/nginx/sites-enabled/default && \
92+
cp "/usr/share/zoneinfo/${TZ}" /etc/localtime && \
93+
echo "${TZ}" > /etc/timezone && \
94+
/usr/sbin/useradd \
95+
--system \
96+
-U \
97+
-s /bin/false \
98+
-c "User for Graphite daemon" \
99+
carbon && \
100+
mkdir \
101+
/var/log/go-carbon && \
102+
chown -R carbon:carbon /var/log/go-carbon && \
103+
rm -rf \
104+
/tmp/* \
105+
/var/cache/apk/*
106+
69107
WORKDIR /
108+
109+
VOLUME ["/etc/go-carbon", "/etc/carbonapi", "/var/lib/graphite", "/etc/nginx", "/etc/grafana", "/etc/logrotate.d", "/var/log"]
110+
70111
ENV HOME /root
71-
CMD ["/sbin/my_init"]
112+
113+
EXPOSE 80 2003 2003/udp 2004 8080 8081
114+
115+
CMD ["/entrypoint.sh"]

conf/entrypoint.sh

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/bin/sh
2+
3+
## Inspired from the script found at
4+
## https://sanjeevan.co.uk/blog/running-services-inside-a-container-using-runit-and-alpine-linux/
5+
6+
shutdown() {
7+
echo "shutting down container"
8+
9+
# first shutdown any service started by runit
10+
for _srv in $(ls -1 /etc/service); do
11+
sv force-stop $_srv
12+
done
13+
14+
# shutdown runsvdir command
15+
kill -HUP $RUNSVDIR
16+
wait $RUNSVDIR
17+
18+
# give processes time to stop
19+
sleep 0.5
20+
21+
# kill any other processes still running in the container
22+
for _pid in $(ps -eo pid | grep -v PID | tr -d ' ' | grep -v '^1$' | head -n -6); do
23+
timeout -t 5 /bin/sh -c "kill $_pid && wait $_pid || kill -9 $_pid"
24+
done
25+
exit
26+
}
27+
28+
PATH="${PATH}:/usr/local/bin"
29+
30+
## check services to disable
31+
for _srv in $(ls -1 /etc/service); do
32+
eval X=$`echo -n $_srv | tr [:lower:]- [:upper:]_`_DISABLED
33+
[ -n "$X" ] && touch /etc/service/$_srv/down
34+
done
35+
36+
# chown logrotate fle (#111)
37+
chown 0644 /etc/logrotate.d/*
38+
39+
exec runsvdir -P /etc/service &
40+
RUNSVDIR=$!
41+
echo "Started runsvdir, PID is $RUNSVDIR"
42+
echo "wait for processes to start...."
43+
44+
sleep 5
45+
for _srv in $(ls -1 /etc/service); do
46+
sv status $_srv
47+
done
48+
49+
# catch shutdown signals
50+
trap shutdown SIGTERM SIGHUP SIGQUIT SIGINT
51+
wait $RUNSVDIR
52+
53+
shutdown

0 commit comments

Comments
 (0)