40 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Docker
		
	
	
	
	
	
| # use the official Bun image
 | |
| # see all versions at https://hub.docker.com/r/oven/bun/tags
 | |
| FROM docker.io/oven/bun:1 as base
 | |
| WORKDIR /usr/src/app
 | |
| 
 | |
| # install dependencies into temp directory
 | |
| # this will cache them and speed up future builds
 | |
| FROM base AS install
 | |
| RUN mkdir -p /temp/dev
 | |
| COPY package.json bun.lockb /temp/dev/
 | |
| RUN cd /temp/dev && bun install --frozen-lockfile
 | |
| 
 | |
| # install with --production (exclude devDependencies)
 | |
| RUN mkdir -p /temp/prod
 | |
| COPY package.json bun.lockb /temp/prod/
 | |
| RUN cd /temp/prod && bun install --frozen-lockfile --production
 | |
| 
 | |
| # copy node_modules from temp directory
 | |
| # then copy all (non-ignored) project files into the image
 | |
| FROM install AS prerelease
 | |
| COPY --from=install /temp/dev/node_modules node_modules
 | |
| COPY . .
 | |
| 
 | |
| # [optional] tests & build
 | |
| ENV NODE_ENV=production
 | |
| RUN bun test
 | |
| RUN bun run build
 | |
| 
 | |
| # copy production dependencies and source code into final image
 | |
| FROM base AS release
 | |
| COPY --from=install /temp/prod/node_modules node_modules
 | |
| COPY --from=prerelease /usr/src/app/index.ts .
 | |
| COPY --from=prerelease /usr/src/app/package.json .
 | |
| 
 | |
| # run the app
 | |
| USER bun
 | |
| EXPOSE 8000/tcp
 | |
| EXPOSE 8080/tcp
 | |
| ENTRYPOINT [ "bun", "run", "index.ts" ]
 | |
| 
 |