Skip to content

Commit 51c47f6

Browse files
authored
chore: refactor Dockerfile making images more size efficient (#236)
1 parent d25125f commit 51c47f6

File tree

1 file changed

+29
-53
lines changed

1 file changed

+29
-53
lines changed

Dockerfile

+29-53
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,43 @@
1-
FROM alpine:3.16.0
2-
LABEL maintainer="Miraculous Owonubi <omiraculous@gmail.com>" \
3-
name="freyrcli" \
4-
version="latest" \
5-
tag="alpine"
1+
FROM node:alpine as installer
2+
3+
RUN printf '#!/usr/bin/env sh\necho "Python 3.0.0"\n' > /usr/bin/python && chmod +x /usr/bin/python
4+
# ^-- Workaround to bypass youtube-dl-exec's postinstall check for a supported python installation
5+
COPY . /freyr
6+
WORKDIR /freyr
7+
RUN npm ci --only=production
8+
9+
FROM golang:alpine as prep
610

7-
# Install dependencies and clean cache
811
# hadolint ignore=DL3018
9-
RUN apk add \
10-
--no-cache \
11-
git \
12-
libstdc++ \
13-
npm \
14-
nodejs \
15-
python3 \
16-
ffmpeg \
17-
bash \
18-
which \
19-
cmake \
20-
gcc \
21-
g++ \
22-
make \
23-
linux-headers \
24-
&& ln /usr/bin/python3 /usr/bin/python \
25-
&& find /usr/lib/python3* -type d -name __pycache__ -exec rm -r {} \+
12+
RUN apk add --no-cache git g++ make cmake linux-headers
13+
COPY --from=installer /freyr/node_modules /freyr/node_modules
14+
RUN go install github.com/tj/node-prune@1159d4c \
15+
&& node-prune /freyr/node_modules \
16+
&& git clone --branch 20210715.151551.e7ad03a --depth 1 https://github.com/wez/atomicparsley /atomicparsley \
17+
&& cmake -S /atomicparsley -B /atomicparsley \
18+
&& cmake --build /atomicparsley --config Release
2619

27-
# install atomicparsley
28-
RUN mkdir /bins \
29-
&& git clone --branch 20210715.151551.e7ad03a --depth 1 https://github.com/wez/atomicparsley \
30-
&& cmake -S atomicparsley -B atomicparsley \
31-
&& cmake --build atomicparsley --config Release \
32-
&& mv atomicparsley/AtomicParsley /bins \
33-
&& rm -r atomicparsley
34-
ENV PATH "/bins:$PATH"
20+
FROM alpine:3.16.0 as base
21+
22+
# hadolint ignore=DL3018
23+
RUN apk add --no-cache nodejs ffmpeg python3 libstdc++
24+
COPY --from=installer /freyr /freyr
25+
RUN rm -rf /freyr/node_modules
26+
COPY --from=prep /freyr/node_modules /freyr/node_modules
27+
COPY --from=prep /atomicparsley/AtomicParsley /bin/AtomicParsley
3528

36-
# Create freyr user and group
3729
# hadolint ignore=DL4006
38-
RUN addgroup -g 1000 freyr \
30+
RUN addgroup -g 1001 freyr \
3931
&& adduser -DG freyr freyr \
40-
&& echo freyr:freyr | chpasswd
41-
42-
# Stage and install freyr
43-
COPY . /freyr
44-
WORKDIR /freyr
45-
RUN npm ci \
46-
&& npm link \
47-
&& npm cache clean --force \
32+
&& echo freyr:freyr | chpasswd \
33+
&& ln -s /freyr/cli.js /bin/freyr \
4834
&& mkdir /data \
4935
&& chown -R freyr:freyr /freyr /data
50-
51-
# Set and mount workdir
36+
WORKDIR /freyr
5237
USER freyr
38+
5339
WORKDIR /data
5440
VOLUME /data
5541

56-
# Set entrypoint and default cmd
5742
ENTRYPOINT ["freyr"]
5843
CMD ["--help"]
59-
60-
# BUILD
61-
# > git clone https://github.com/miraclx/freyr-js freyr
62-
# > docker build -t freyr:alpine freyr
63-
64-
# LAUNCH (freyr)
65-
# > docker run --rm -v $PWD:/data freyr:alpine
66-
# LAUNCH (bash)
67-
# > docker run -itv $PWD:/data --entrypoint bash freyr:alpine

0 commit comments

Comments
 (0)