Skip to content

Dockerfile snippets to automatically install and configure software in Docker containers and VS Code Dev Containers.

License

Notifications You must be signed in to change notification settings

Jaffa-Cakes/dockerfile-snippets

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 

Repository files navigation

Dockerfile Snippets

These snippets are tested on debian:bookworm based images. They should help save time when creating Dockerfiles, especially for VS Code Dev Containers.

Other Pages

Contributing

If you have any suggestions or improvements, please feel free to open an issue or pull request. Useful snippets are always welcome.

Table of Contents

Install PostgreSQL

######################################
### START # Install PostgreSQL #######
######################################

# Set PostgreSQL version
ARG POSTGRESQL_MAJOR=16

# Install Dependencies
RUN apt install -y wget

# Create the file repository configuration:
RUN sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the repository signing key:
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

# Update the package lists:
RUN apt update

# Install PostgreSQL.
RUN apt -y install postgresql-${POSTGRESQL_MAJOR}

# Set locale
ENV LC_ALL=C

# Set postgres password
RUN service postgresql start && \
    su -c "psql -c \"ALTER USER postgres PASSWORD 'postgres';\"" - postgres && \
    service postgresql stop

# Allow remote connections
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/16/main/pg_hba.conf && \
    echo "listen_addresses='*'" >> /etc/postgresql/16/main/postgresql.conf && \
    sed -i 's/local   all             postgres                                peer/local   all             postgres                                md5/' /etc/postgresql/16/main/pg_hba.conf

To start the server, these commands can be used with a shell script entrypoint:

# Adjust ownership
chown -R postgres:postgres /var/lib/postgresql/16/main

# Start the postgres server
service postgresql start

# Tail the PostgreSQL log file to keep the container running
tail -f /var/log/postgresql/postgresql-16-main.log

These commands could also be added to the Dockerfile if you prefer.

Update and Upgrade Packages

##################################
### START # Update and Upgrade ###
##################################

RUN apt update \
    && apt upgrade -y

##################################
### END # Update and Upgrade #####
##################################

Install Common Packages

#######################################
### START # Install Common Packages ###
#######################################

RUN apt install -y build-essential curl wget git vim nano unzip zip gnupg2 apt-transport-https ca-certificates lsb-release software-properties-common

#######################################
### END # Install Common Packages #####
#######################################

Install Zsh/Oh My Zsh

#####################################
### START # Install Zsh/Oh My Zsh ###
#####################################

# Base install of Zsh with Oh My Zsh
RUN apt install -y zsh \
    && sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" --unattended

# Install Zsh plugins
RUN git clone https://github.com/zsh-users/zsh-autosuggestions $HOME/.oh-my-zsh/custom/plugins/zsh-autosuggestions \
    && git clone https://github.com/zsh-users/zsh-syntax-highlighting $HOME/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting \
    && git clone https://github.com/zsh-users/zsh-history-substring-search $HOME/.oh-my-zsh/custom/plugins/zsh-history-substring-search

# Configure Zsh to use plugins
RUN sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions zsh-syntax-highlighting zsh-history-substring-search history aliases sudo themes docker nmap kubectl)/' $HOME/.zshrc \
    && sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="af-magic"/' $HOME/.zshrc

# Set Zsh as default shell
RUN chsh -s /usr/bin/zsh

#####################################
### END # Install Zsh/Oh My Zsh #####
#####################################

Install Node.js and NPM

You can change the NODE_MAJOR argument to the version you want to install.

#######################################
### START # Install Node.js and NPM ###
#######################################

ARG NODE_MAJOR=20

RUN set -uex; \
    mkdir -p /etc/apt/keyrings; \
    curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key \
    | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg; \
    echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_MAJOR}.x nodistro main" \
    > /etc/apt/sources.list.d/nodesource.list; \
    apt -y update; \
    apt -y install nodejs;

#######################################
### END # Install Node.js and NPM #####
#######################################

Install Docker with Host Socket

###############################################
### START # Install Docker with Host Socket ###
###############################################

# Set docker host socket
ENV DOCKER_HOST=unix:///var/run/docker-host.sock

# Install Docker
RUN apt install -y lsb-release \
    && curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - \
    && echo "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null \
    && apt update \
    && apt install -y docker-ce docker-ce-cli containerd.io

# Add user to docker group if it doesn't exist and add user to it
RUN if getent group docker > /dev/null 2>&1; then \
    echo "Docker group exists"; \
    else \
    groupadd docker; \
    fi \
    && usermod -aG docker root

###############################################
### END # Install Docker with Host Socket #####
###############################################

If you are using this for a VS Code devcontainer, you should add the following to your .devcontainer/devcontainer.json file to allow the container to access the host socket:

"mounts": [
    "source=/var/run/docker.sock,target=/var/run/docker-host.sock,type=bind"
]

If you are using the docker-compose.yml file to allow the container to access the host socket, you can instead add the following to your docker-compose.yml file under the volumes section if the container:

volumes:
  - /var/run/docker.sock:/var/run/docker-host.sock

About

Dockerfile snippets to automatically install and configure software in Docker containers and VS Code Dev Containers.

Topics

Resources

License

Stars

Watchers

Forks