Go to file
Philipp Kunz ab4275c430
All checks were successful
Docker (tags) / security (push) Successful in 38s
Docker (tags) / test (push) Successful in 55s
Docker (tags) / metadata (push) Successful in 6s
Docker (tags) / release (push) Successful in 14m46s
5.0.146
2024-11-17 20:24:00 +01:00
.gitea/workflows fix(ci): Update Docker container source for workflow to new registry 2024-11-17 07:57:21 +01:00
test fix(core): update 2022-10-18 23:35:13 +02:00
.gitignore fix(core): update 2019-06-08 21:36:23 +02:00
changelog.md fix(Dockerfiles): Correct Docker image source host in various Dockerfiles 2024-11-17 20:24:00 +01:00
Dockerfile fix(core): update 2024-04-23 08:52:15 +02:00
Dockerfile_alpine fix(core): update 2023-04-02 13:22:11 +02:00
Dockerfile_alpine_npmci fix(Dockerfiles): Correct Docker image source host in various Dockerfiles 2024-11-17 20:24:00 +01:00
Dockerfile_fossglobal_preinstalled_##version## fix(Dockerfiles): Correct Docker image source host in various Dockerfiles 2024-11-17 20:24:00 +01:00
Dockerfile_iot fix(Dockerfiles): Correct Docker image source host in various Dockerfiles 2024-11-17 20:24:00 +01:00
Dockerfile_lts fix(Dockerfiles): Correct Docker image source host in various Dockerfiles 2024-11-17 20:24:00 +01:00
Dockerfile_npmci fix(Dockerfiles): Correct Docker image source host in various Dockerfiles 2024-11-17 20:24:00 +01:00
Dockerfile_stableinit fix(Dockerfiles): Correct Docker image source host in various Dockerfiles 2024-11-17 20:24:00 +01:00
LICENSE fix(core): update 2019-06-10 11:31:47 +02:00
npmextra.json fix(core): update 2024-05-24 15:53:20 +02:00
package.json 5.0.146 2024-11-17 20:24:00 +01:00
pnpm-lock.yaml fix(docs): Minor documentation updates without code changes. 2024-11-17 20:16:20 +01:00
readme.hints.md update description 2024-05-14 23:09:32 +02:00
readme.md fix(core): update 2024-05-24 15:53:36 +02:00
tsconfig.json update description 2024-05-14 23:09:32 +02:00

ht-docker-node

docker image with nodejs and shipzone.io support

Install

To get started with ht-docker-node, you need to have Docker installed on your machine. You can then pull the desired flavor of the Docker image from the relevant Docker registry.

Example:

docker pull registry.gitlab.com/hosttoday/ht-docker-node:latest

Usage

ht-docker-node offers a variety of Docker image flavors to suit different needs. Below, we'll guide you through different use cases and configurations using these Docker images.

Flavour Overview

  • :lts - Node LTS version, equivalent to :latest
  • :stable - Node stable version
  • :npmci - npmci preinstalled
  • :npmts - npmci + npmts preinstalled
  • :npmpage - npmci + npmts + npmpage preinstalled
  • :mongo - npmci + npmts + mongo

Basic Usage

To start a container with the lts flavour, you can use the following command:

docker run -it --name your_container_name registry.gitlab.com/hosttoday/ht-docker-node:lts

Using npmci

The :npmci flavour includes npmci, a utility for managing Node.js versions and npm installations. Here's an example of how you can use it:

FROM registry.gitlab.com/hosttoday/ht-docker-node:npmci
RUN npmci install 14.17.0

In this example, npmci installs Node.js version 14.17.0 and sets it as the default.

Custom Dockerfile with npmci and your Node.js App

You can create a custom Dockerfile for your Node.js application using the :npmci flavour:

# Use the ht-docker-node image with npmci
FROM registry.gitlab.com/hosttoday/ht-docker-node:npmci

# Install a specific Node.js version
RUN npmci install 14.17.0

# Create app directory
WORKDIR /usr/src/app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install app dependencies
RUN npm install

# Bundle app source
COPY . .

# Expose port
EXPOSE 8080

# Start the application
CMD ["node", "index.js"]

To build the Docker image:

docker build -t your_app_name .

To run the container:

docker run -p 8080:8080 --name your_container_name your_app_name

Multi-Stage Builds for Production

For a leaner production image, you can use multi-stage builds. Heres an example:

# Stage 1: Build
FROM registry.gitlab.com/hosttoday/ht-docker-node:npmci as build

RUN npmci install 14.17.0

WORKDIR /usr/src/app

COPY package*.json ./
RUN npm install

COPY . .
RUN npm run build

# Stage 2: Production
FROM registry.gitlab.com/hosttoday/ht-docker-node:lts

WORKDIR /usr/src/app
COPY --from=build /usr/src/app/dist ./

EXPOSE 8080
CMD ["node", "index.js"]

Using with MongoDB (:mongo)

The :mongo flavour contains a MongoDB installation alongside Node.js. Heres how you can utilize it in your Dockerfile:

FROM registry.gitlab.com/hosttoday/ht-docker-node:mongo

# Setup mongo and node environment:
RUN npm install -g mongodb

# Working directory
WORKDIR /usr/src/app

# Copy MongoDB config
COPY mongod.conf /etc/mongod.conf 

# Start MongoDB service
CMD ["mongod", "--config", "/etc/mongod.conf"] && node index.js

Using npmts and npmpage

The :npmts and :npmpage flavours are useful for projects that use TypeScript or require page generation.

Heres an example on how to work with :npmts:

FROM registry.gitlab.com/hosttoday/ht-docker-node:npmts

# Install necessary TypeScript packages
RUN npm install -g typescript 

# Working directory
WORKDIR /usr/src/app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy the rest of your files
COPY . .

# Compile TypeScript
RUN npm run build

# Expose port and start the server
EXPOSE 3000
CMD ["npm", "start"]

Comprehensive Use Case Example

The following example covers multiple aspects including environment variables, volume mounting, and networking.

Dockerfile:

FROM registry.gitlab.com/hosttoday/ht-docker-node:npmci

# Set environment variables
ENV NODE_ENV=production
ENV PORT=3000

# Install desired Node.js version
RUN npmci install 16.0.0

# Create app directory
WORKDIR /usr/src/app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install app dependencies
RUN npm ci

# Bundle app source
COPY . .

# Compile TypeScript
RUN npm run build

# Expose app port
EXPOSE 3000

# Start the application
CMD ["npm", "start"]

Docker-Compose Configuration

If using Docker-Compose, create a docker-compose.yml file:

version: '3.8'

services:
  app:
    image: your_app_name
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - '3000:3000'
    environment:
      - NODE_ENV=production
    volumes:
      - .:/usr/src/app
      - /usr/src/app/node_modules
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

Running with Docker and Docker-Compose

To build the image:

docker-compose build

To run the services:

docker-compose up

Accessing the Container

docker exec -it your_container_name /bin/sh

Conclusion

ht-docker-node offers a flexible, multifaceted solution for deploying Node.js applications in Docker containers. By leveraging its different flavours, you can efficiently manage Node.js versions, incorporate MongoDB, and handle TypeScript projects. Whether you are using simple Docker commands or elaborate Docker-Compose configurations, ht-docker-node caters to diverse deployment scenarios.

This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the license file within this repository.

Please note: The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.

Trademarks

This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.

Company Information

Task Venture Capital GmbH
Registered at District court Bremen HRB 35230 HB, Germany

For any legal inquiries or if you require further information, please contact us via email at hello@task.vc.

By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.