This blog is publish with a docker image with GitLab. But I don’t like the image I was using because wasn’t update and it’s big and havy. So I fork the project for create an update version for my personal blog.
So I started with updating the old docker image I was using this image
FROM debian:wheezy
MAINTAINER yigal@publysher.nl
# Install pygments (for syntax highlighting)
RUN apt-get -qq update \
&& DEBIAN_FRONTEND=noninteractive apt-get -qq install -y --no-install-recommends python-pygments git ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# Download and install hugo
ENV HUGO_VERSION 0.20.6
ENV HUGO_BINARY hugo_${HUGO_VERSION}-64bit.deb
ADD https://github.com/spf13/hugo/releases/download/v${HUGO_VERSION}/${HUGO_BINARY} /tmp/hugo.deb
RUN dpkg -i /tmp/hugo.deb \
&& rm /tmp/hugo.deb
# Create working directory
RUN mkdir /usr/share/blog
WORKDIR /usr/share/blog
# Expose default hugo port
EXPOSE 1313
# Automatically build site
ONBUILD ADD site/ /usr/share/blog
ONBUILD RUN hugo -d /usr/share/nginx/html/
# By default, serve site
ENV HUGO_BASE_URL http://localhost:1313
CMD hugo server -b ${HUGO_BASE_URL} --bind=0.0.0.0
So I build an image of this container and it was 171 MB in my machine.
But I can do better than this because i can use alpine in the place of debian:wheezy.
I do this because the image for debian is bigger than the image for alpine. But if I will use alpine I need to change somethings because I can’t install .deb into the image. So i use the binary of Hugo for Linux find on Github. And install it on the image
FROM alpine
LABEL maintainer "fundor333@gmail.com"
# Download and install hugo
ENV HUGO_VERSION 0.20.6
ENV HUGO_DIRECTORY hugo_${HUGO_VERSION}_Linux-64bit
ENV HUGO_BINARY ${HUGO_DIRECTORY}.tar.gz
# Install HUGO
RUN set -x
RUN apk add --update wget ca-certificates
RUN wget https://github.com/spf13/hugo/releases/download/v${HUGO_VERSION}/${HUGO_BINARY}
RUN tar xzf ${HUGO_BINARY}
RUN rm -r ${HUGO_BINARY}
RUN mv hugo /usr/bin/hugo
RUN rm -r LICENSE.md
RUN rm -r README.md
RUN apk del wget ca-certificates
RUN rm /var/cache/apk/*
# Create working directory
RUN mkdir /usr/share/blog
WORKDIR /usr/share/blog
# Expose default hugo port
EXPOSE 1313
# Automatically build site
ONBUILD ADD site/ /usr/share/blog
ONBUILD RUN hugo -d /usr/share/nginx/html/
# By default, serve site
ENV HUGO_BASE_URL http://localhost:1313
CMD hugo server -b ${HUGO_BASE_URL} --bind=0.0.0.0
This time the size was 33,5 MB. Good but i can do BETTER.
Whenever you wrote a new line with RUN you make the “compiled” into another layer so, if you have 22 command (like me) you have 22 layer for the image
FROM alpine
LABEL maintainer "fundor333@gmail.com"
# Download and install hugo
ENV HUGO_VERSION 0.20.6
ENV HUGO_DIRECTORY hugo_${HUGO_VERSION}_Linux-64bit
ENV HUGO_BINARY ${HUGO_DIRECTORY}.tar.gz
# Install HUGO
RUN set -x && \
apk add --update wget ca-certificates && \
wget https://github.com/spf13/hugo/releases/download/v${HUGO_VERSION}/${HUGO_BINARY} && \
tar xzf ${HUGO_BINARY} && \
rm -r ${HUGO_BINARY} && \
mv hugo /usr/bin/hugo && \
rm -r LICENSE.md && \
rm -r README.md && \
apk del wget ca-certificates && \
rm /var/cache/apk/*
# Create working directory
RUN mkdir /usr/share/blog
WORKDIR /usr/share/blog
# Expose default hugo port
EXPOSE 1313
# Automatically build site
ONBUILD ADD site/ /usr/share/blog
ONBUILD RUN hugo -d /usr/share/nginx/html/
# By default, serve site
ENV HUGO_BASE_URL http://localhost:1313
CMD hugo server -b ${HUGO_BASE_URL} --bind=0.0.0.0
Size 3,99 MB in this case.
The maggior part of the total size is caused by the size of the Hugo binary itself so I cann’t make an image lighter than the binary.
Now the image size and number layers can change update after update so I put this image with the allwayes data about the images.
If you liked this article,
please share it on