Dockerfile: Limit Yarn copy operations to reduce cache impact (#34094)
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							420ffdfb62
						
					
				
				
					commit
					2fe7172002
				
			
							
								
								
									
										58
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								Dockerfile
									
									
									
									
									
								
							@@ -14,12 +14,12 @@ ARG BASE_REGISTRY="docker.io"
 | 
			
		||||
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.4.x"]
 | 
			
		||||
# renovate: datasource=docker depName=docker.io/ruby
 | 
			
		||||
ARG RUBY_VERSION="3.4.2"
 | 
			
		||||
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
 | 
			
		||||
# # Node.js version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
 | 
			
		||||
# renovate: datasource=node-version depName=node
 | 
			
		||||
ARG NODE_MAJOR_VERSION="22"
 | 
			
		||||
# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"]
 | 
			
		||||
ARG DEBIAN_VERSION="bookworm"
 | 
			
		||||
# Node image to use for base image based on combined variables (ex: 20-bookworm-slim)
 | 
			
		||||
# Node.js image to use for base image based on combined variables (ex: 20-bookworm-slim)
 | 
			
		||||
FROM ${BASE_REGISTRY}/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim AS node
 | 
			
		||||
# Ruby image to use for base image based on combined variables (ex: 3.4.x-slim-bookworm)
 | 
			
		||||
FROM ${BASE_REGISTRY}/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} AS ruby
 | 
			
		||||
@@ -61,7 +61,7 @@ ENV \
 | 
			
		||||
ENV \
 | 
			
		||||
  # Configure the IP to bind Mastodon to when serving traffic
 | 
			
		||||
  BIND="0.0.0.0" \
 | 
			
		||||
  # Use production settings for Yarn, Node and related nodejs based tools
 | 
			
		||||
  # Use production settings for Yarn, Node.js and related tools
 | 
			
		||||
  NODE_ENV="production" \
 | 
			
		||||
  # Use production settings for Ruby on Rails
 | 
			
		||||
  RAILS_ENV="production" \
 | 
			
		||||
@@ -128,13 +128,6 @@ RUN \
 | 
			
		||||
# Create temporary build layer from base image
 | 
			
		||||
FROM ruby AS build
 | 
			
		||||
 | 
			
		||||
# Copy Node package configuration files into working directory
 | 
			
		||||
COPY package.json yarn.lock .yarnrc.yml /opt/mastodon/
 | 
			
		||||
COPY .yarn /opt/mastodon/.yarn
 | 
			
		||||
 | 
			
		||||
COPY --from=node /usr/local/bin /usr/local/bin
 | 
			
		||||
COPY --from=node /usr/local/lib /usr/local/lib
 | 
			
		||||
 | 
			
		||||
ARG TARGETPLATFORM
 | 
			
		||||
 | 
			
		||||
# hadolint ignore=DL3008
 | 
			
		||||
@@ -188,12 +181,6 @@ RUN \
 | 
			
		||||
  libx265-dev \
 | 
			
		||||
  ;
 | 
			
		||||
 | 
			
		||||
RUN \
 | 
			
		||||
  # Configure Corepack
 | 
			
		||||
  rm /usr/local/bin/yarn*; \
 | 
			
		||||
  corepack enable; \
 | 
			
		||||
  corepack prepare --activate;
 | 
			
		||||
 | 
			
		||||
# Create temporary libvips specific build layer from build layer
 | 
			
		||||
FROM build AS libvips
 | 
			
		||||
 | 
			
		||||
@@ -284,38 +271,37 @@ RUN \
 | 
			
		||||
  # Download and install required Gems
 | 
			
		||||
  bundle install -j"$(nproc)";
 | 
			
		||||
 | 
			
		||||
# Create temporary node specific build layer from build layer
 | 
			
		||||
FROM build AS yarn
 | 
			
		||||
# Create temporary assets build layer from build layer
 | 
			
		||||
FROM build AS precompiler
 | 
			
		||||
 | 
			
		||||
ARG TARGETPLATFORM
 | 
			
		||||
 | 
			
		||||
# Copy Node package configuration files into working directory
 | 
			
		||||
COPY package.json yarn.lock .yarnrc.yml /opt/mastodon/
 | 
			
		||||
COPY streaming/package.json /opt/mastodon/streaming/
 | 
			
		||||
COPY .yarn /opt/mastodon/.yarn
 | 
			
		||||
# Copy Mastodon sources into layer
 | 
			
		||||
COPY . /opt/mastodon/
 | 
			
		||||
 | 
			
		||||
# Copy Node.js binaries/libraries into layer
 | 
			
		||||
COPY --from=node /usr/local/bin /usr/local/bin
 | 
			
		||||
COPY --from=node /usr/local/lib /usr/local/lib
 | 
			
		||||
 | 
			
		||||
RUN \
 | 
			
		||||
  # Configure Corepack
 | 
			
		||||
  rm /usr/local/bin/yarn*; \
 | 
			
		||||
  corepack enable; \
 | 
			
		||||
  corepack prepare --activate;
 | 
			
		||||
 | 
			
		||||
# hadolint ignore=DL3008
 | 
			
		||||
RUN \
 | 
			
		||||
  --mount=type=cache,id=corepack-cache-${TARGETPLATFORM},target=/usr/local/share/.cache/corepack,sharing=locked \
 | 
			
		||||
  --mount=type=cache,id=yarn-cache-${TARGETPLATFORM},target=/usr/local/share/.cache/yarn,sharing=locked \
 | 
			
		||||
  # Install Node packages
 | 
			
		||||
  # Install Node.js packages
 | 
			
		||||
  yarn workspaces focus --production @mastodon/mastodon;
 | 
			
		||||
 | 
			
		||||
# Create temporary assets build layer from build layer
 | 
			
		||||
FROM build AS precompiler
 | 
			
		||||
 | 
			
		||||
# Copy Mastodon sources into precompiler layer
 | 
			
		||||
COPY . /opt/mastodon/
 | 
			
		||||
 | 
			
		||||
# Copy bundler and node packages from build layer to container
 | 
			
		||||
COPY --from=yarn /opt/mastodon /opt/mastodon/
 | 
			
		||||
COPY --from=bundler /opt/mastodon /opt/mastodon/
 | 
			
		||||
COPY --from=bundler /usr/local/bundle/ /usr/local/bundle/
 | 
			
		||||
# Copy libvips components to layer for precompiler
 | 
			
		||||
# Copy libvips components into layer for precompiler
 | 
			
		||||
COPY --from=libvips /usr/local/libvips/bin /usr/local/bin
 | 
			
		||||
COPY --from=libvips /usr/local/libvips/lib /usr/local/lib
 | 
			
		||||
 | 
			
		||||
ARG TARGETPLATFORM
 | 
			
		||||
# Copy bundler packages into layer for precompiler
 | 
			
		||||
COPY --from=bundler /opt/mastodon /opt/mastodon/
 | 
			
		||||
COPY --from=bundler /usr/local/bundle/ /usr/local/bundle/
 | 
			
		||||
 | 
			
		||||
RUN \
 | 
			
		||||
  ldconfig; \
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user