Dockerfile
Docker allows developers to package their applications along with all dependencies into a single unit called a container. This ensures consistency across different environments, such as development, testing, and production, reducing the "it works on my machine" problem.
Install Docker: https://docs.docker.com/engine/install/
Dockerfile for the web service
Add src/web/Dockerfile:
# Use the official Node.js image with specified version
FROM node:20.11-alpine3.18
# Set the working directory inside the container
WORKDIR /usr/src/app
# Copy package.json and package-lock.json to the working directory
COPY package*.json ./
# Install project dependencies
RUN npm install
# Copy the rest of the application code to the working directory
COPY src/ /usr/src/app/src
COPY tsconfig.json ./
# Build TypeScript code
RUN npm run build
# Command to run the application
CMD ["node", "dist/web/app.js"]
Add src/web/.dockerignore:
config.json
Alpine Linux is a lightweight and secure Linux distribution that is particularly well-suited for containerized environments, embedded systems, and resource-constrained environments where efficiency and security are paramount.
Build the docker image for the web service:
docker build -t lrbooks_web_node:latest -f src/web/Dockerfile .
Similarly, add 2 more Dockerfiles:
Dockerfile for the trend service
Add src/trend/Dockerfile:
# Use the official Node.js image with specified version
FROM node:20.11-alpine3.18
# Set the working directory inside the container
WORKDIR /usr/src/app
# Copy package.json and package-lock.json to the working directory
COPY package*.json ./
# Install project dependencies
RUN npm install
# Copy the rest of the application code to the working directory
COPY src/ /usr/src/app/src
COPY tsconfig.json ./
# Build TypeScript code
RUN npm run build
# Command to run the application
CMD ["node", "dist/trend/app.js"]
Add src/trend/.dockerignore:
config.json
Dockerfile for the recommendation service
Add src/recommendation/Dockerfile:
# Use the official Node.js image with specified version
FROM node:20.11-alpine3.18
# Set the working directory inside the container
WORKDIR /usr/src/app
# Copy package.json and package-lock.json to the working directory
COPY package*.json ./
# Install project dependencies
RUN npm install
# Copy the rest of the application code to the working directory
COPY src/ /usr/src/app/src
COPY tsconfig.json ./
# Build TypeScript code
RUN npm run build
# Command to run the application
CMD ["node", "dist/recommendation/app.js"]
Add src/recommendation/.dockerignore:
config.json
With all the Dockerfiles, we‘re well prepared to run them all together in the Docker Compose.