1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2024-11-28 09:24:24 +01:00

Use Alpine Linux to built a smaller Docker image for Fab Manager

This commit is contained in:
David O' Rojo 2019-09-11 18:38:20 -05:00
parent 3d54198d35
commit a21594db43
2 changed files with 55 additions and 42 deletions

View File

@ -5,12 +5,16 @@ vendor/cache
config/database.yml
config/application.yml
# Ignore the default SQLite database.
# Ignore database files.
db/*.sqlite3
db/*.sqlite3-journal
postgresql
elasticsearch
redis
# Ignore all logfiles and tempfiles.
log
*.log
tmp
public/uploads
@ -24,10 +28,17 @@ invoices
.DS_Store
# Development files
.vagrant
Vagrantfile
provision
.git*
Dockerfile
docker-compose*
# Docs
*.md
doc
# Modules
node_modules

View File

@ -1,40 +1,52 @@
FROM ruby:2.3
FROM ruby:2.3.8-alpine
MAINTAINER peng@sleede.com
# First we need to be able to fetch from https repositories
RUN apt-get update && \
apt-get install -y apt-transport-https \
ca-certificates apt-utils
# Add sources for external tools to APT
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
curl -sSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list && \
echo "deb https://deb.nodesource.com/node_10.x jessie main" > /etc/apt/sources.list.d/nodesource.list && \
echo "deb-src https://deb.nodesource.com/node_10.x jessie main" >> /etc/apt/sources.list.d/nodesource.list
# Install apt based dependencies required to run Rails as
# well as RubyGems. As the Ruby image itself is based on a
# Debian image, we use apt-get to install those.
RUN apt-get update && \
apt-get install -y \
# Install upgrade system packages
RUN apk update && apk upgrade && \
# Install runtime apk dependencies
apk add --update curl \
nodejs \
yarn \
imagemagick \
supervisor \
yarn
tzdata \
libc-dev \
ruby-dev \
zlib-dev \
xz-dev \
postgresql-dev \
libxml2-dev \
libxslt-dev \
libidn-dev && \
# Install buildtime apk dependencies
apk add --update --no-cache --virtual .build-deps alpine-sdk \
build-base \
linux-headers \
git \
patch
# throw errors if Gemfile has been modified since Gemfile.lock
# Throw error if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1
# Run Bundle in a cache efficient way
# Install gems in a cache efficient way
WORKDIR /tmp
COPY Gemfile /tmp/
COPY Gemfile.lock /tmp/
RUN bundle install --binstubs
RUN bundle install --binstubs --without development test doc
# Install Javascript packages
WORKDIR /usr/src/app
COPY package.json /usr/src/app/package.json
COPY yarn.lock /usr/src/app/yarn.lock
RUN yarn install
# Clean up APT when done.
#RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Clean up build deps, cached packages and temp files
RUN apk del .build-deps && \
yarn cache clean && \
rm -rf /tmp/* \
/var/tmp/* \
/var/cache/apk/* \
/usr/lib/ruby/gems/*/cache/*
# Web app
RUN mkdir -p /usr/src/app && \
@ -48,15 +60,7 @@ RUN mkdir -p /usr/src/app && \
mkdir -p /usr/src/app/tmp/sockets && \
mkdir -p /usr/src/app/tmp/pids
WORKDIR /usr/src/app
COPY docker/database.yml /usr/src/app/config/database.yml
COPY package.json /usr/src/app/package.json
COPY yarn.lock /usr/src/app/yarn.lock
# Run Yarn
RUN yarn install
COPY . /usr/src/app
# Volumes
@ -68,12 +72,10 @@ VOLUME /usr/src/app/public/assets
VOLUME /usr/src/app/accounting
VOLUME /var/log/supervisor
# Expose port 3000 to the Docker host, so we can access it
# from the outside.
# Expose port 3000 to the Docker host, so we can access it from the outside
EXPOSE 3000
# The main command to run when the container starts. Also
# tell the Rails dev server to bind to all interfaces by
# default.
# The main command to run when the container starts. Also tell the Rails server
# to bind to all interfaces by default.
COPY docker/supervisor.conf /etc/supervisor/conf.d/fablab.conf
CMD ["/usr/bin/supervisord"]
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/fablab.conf"]