Files
ubicloud/Dockerfile
Daniel Farina 23ab2a59b2 Qualify docker base image names
I use `podman` by preference when working with Dockerfiles, as I find
its rootless mode of operation less invasive.  It has different
defaults in handling short names of images, which interestingly work
for node images, but not Ruby.

However, while looking into this, I saw the config file in
`/etc/containers/registries.conf` advises use of fully qualified image
names, so I adjust node to use full qualification as well.
2025-02-26 15:25:23 -08:00

51 lines
1.6 KiB
Docker

FROM docker.io/library/node:23.6-alpine3.21 AS frontend-builder
WORKDIR /app
COPY tailwind.config.js package.json package-lock.json ./
COPY views/ ./views/
COPY assets/ ./assets/
RUN npm ci
RUN npm run prod
FROM docker.io/library/ruby:3.2.7-alpine3.21 AS bundler
# Install build dependencies
# - build-base, git, curl: To ensure certain gems can be compiled
# - postgresql-dev: Required for postgresql gem
RUN apk update --no-cache && \
apk add build-base git curl postgresql-dev libffi-dev --no-cache
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle install
FROM docker.io/library/ruby:3.2.7-alpine3.21
# Install runtime dependencies
# - tzdata: The public-domain time zone database
# - curl: Required for healthcheck and some basic operations
# - postgresql-client: Required for postgresql gem at runtime
# - gcompat: Required for nokogiri gem at runtime. https://nokogiri.org/tutorials/installing_nokogiri.html#linux-musl-error-loading-shared-library
# - foreman: Helps to start different parts of app based on Procfile
RUN apk update --no-cache && \
apk add tzdata curl postgresql-client gcompat libffi --no-cache && \
gem install foreman
RUN adduser -D ubicloud && \
mkdir /app && \
chown ubicloud:ubicloud /app
# Don't use root to run our app as extra line of defense
USER ubicloud
WORKDIR /app
# Copy built assets from builders
COPY --from=bundler /usr/local/bundle/ /usr/local/bundle/
COPY --chown=ubicloud --from=frontend-builder /app/assets/css/app.css /app/assets/css/app.css
COPY --chown=ubicloud . /app
ENV RACK_ENV=production
ENV PORT=3000
EXPOSE 3000
CMD ["foreman", "start"]