Skip to content

Commit

Permalink
first release
Browse files Browse the repository at this point in the history
  • Loading branch information
JeyDi committed Aug 3, 2023
1 parent 012f724 commit 40125b7
Show file tree
Hide file tree
Showing 8 changed files with 288 additions and 2 deletions.
24 changes: 24 additions & 0 deletions .github/workflows/deploy_images.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: deploy_images
on:
release:
types: [published]

jobs:
publish-docker-images:
runs-on: ubuntu-latest
steps:
- name: Check out the repo
uses: actions/checkout@v3

- name: Login to GitHub Container Registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ secrets.GITHUB_USERNAME }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Build and push python base
run: |
docker build ./Docker/python.dockerfile --tag ghcr.io/PythonBiellaGroup/python-base:latest
docker run ghcr.io/PythonBiellaGroup/python-base:latest
docker push ghcr.io/PythonBiellaGroup/python-base:latest
17 changes: 17 additions & 0 deletions Docker/helm.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
FROM ubuntu:20.04 AS builder

RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends curl ca-certificates

WORKDIR /tmp
RUN curl -LO "https://dl.k8s.io/release/v1.27.3/bin/linux/amd64/kubectl"
RUN curl -Lo helm.tar.gz "https://get.helm.sh/helm-v3.12.1-linux-amd64.tar.gz" && tar -xf helm.tar.gz && cp linux-amd64/helm /usr/local/bin/helm
RUN chmod +x /tmp/kubectl /tmp/linux-amd64/helm

FROM ubuntu:20.04
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends curl ca-certificates gettext-base \
&& rm -rf /var/lib/apt/lists/*

COPY --from=builder /tmp/kubectl /usr/local/bin/kubectl
COPY --from=builder /tmp/linux-amd64/helm /usr/local/bin/helm
31 changes: 31 additions & 0 deletions Docker/node.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
FROM node:lts

RUN DEBIAN_FRONTEND=noninteractive apt update && apt install -y \
libpq-dev gcc wget curl gnupg2 openssh-client make build-essential git \
&& mkdir -p ~/.ssh

# COPY bin/ssh-config.sh /usr/bin/ssh-config.sh
# COPY ./config /root/.ssh/config
# RUN chmod 400 /root/.ssh/config
# RUN chmod +x /usr/bin/ssh-config.sh

# add custom host file
# COPY hosts tmp/
# ADD hosts /tmp/hosts
# Warning: if you test on M1 and arch64 architecture you could have an issue with this line
# If you are using mac or arch64 change x86_64-linux-gnu with aarch64-linux-gnu
# RUN mkdir -p -- /lib-override && cp /lib/x86_64-linux-gnu/libnss_files.so.2 /lib-override
# RUN perl -pi -e 's:/etc/hosts:/tmp/hosts:g' /lib-override/libnss_files.so.2
# ENV LD_LIBRARY_PATH /lib-override


# add custom config file
# COPY config tmp/
# ADD config temp/config
# ADD config /root/.ssh/config
# Warning: if you test on M1 and arch64 architecture you could have an issue with this line
# If you are using mac or arch64 change x86_64-linux-gnu with aarch64-linux-gnu
# RUN mkdir -p -- /lib-override && cp /lib/x86_64-linux-gnu/libnss_files.so.2 /lib-override
# RUN perl -pi -e 's:/root/.ssh/config:/tmp/config:g' /lib-override/libnss_files.so.2
# ENV LD_LIBRARY_PATH /lib-override
# RUN chmod 400 /root/.ssh/config
32 changes: 32 additions & 0 deletions Docker/pdm.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Python PDM Base dockerfile image
FROM python:3.9.16-slim-buster as python

# Metadata
LABEL name="Python3.9 PDM"
LABEL maintainer="PythonBiellaGroup"
LABEL version="0.1"

ARG PDM_VERSION="2.7.0"

# Install libraries
RUN DEBIAN_FRONTEND=noninteractive apt update && DEBIAN_FRONTEND=noninteractive apt install -y \
libpq-dev gcc wget gnupg2 curl openssh-client git make build-essential \
make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

# add custom host file
# COPY hosts tmp/
# ADD hosts /tmp/hosts
# Warning: if you test on M1 and arch64 architecture you could have an issue with this line
# If you are using mac or arch64 change x86_64-linux-gnu with aarch64-linux-gnu
# RUN mkdir -p -- /lib-override && cp /lib/x86_64-linux-gnu/libnss_files.so.2 /lib-override
# RUN perl -pi -e 's:/etc/hosts:/tmp/hosts:g' /lib-override/libnss_files.so.2
# ENV LD_LIBRARY_PATH /lib-override

# install PDM
RUN pip install -U pip setuptools wheel
RUN pip install pdm==${PDM_VERSION}

#if you want to test the image
# CMD ["tail", "-f", "/dev/null"]
57 changes: 57 additions & 0 deletions Docker/python.dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
FROM python:3.9.16-slim-buster as python

# Metadata
LABEL name="Python3.9 Poetry"
LABEL maintainer="PythonBiellaGroup"
LABEL version="0.1"

ARG YOUR_ENV="virtualenv"
ARG POETRY_VERSION="1.5.1"

ENV YOUR_ENV=${YOUR_ENV} \
PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PYTHONFAULTHANDLER=1 \
PYTHONHASHSEED=random \
PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on \
PIP_DEFAULT_TIMEOUT=100 \
POETRY_HOME=/opt/poetry \
POETRY_VIRTUALENVS_CREATE=false \
POETRY_VIRTUALENVS_IN_PROJECT=false \
POETRY_NO_INTERACTION=1 \
POETRY_VERSION=${POETRY_VERSION} \
LC_ALL=C.UTF-8 \
LANG=C.UTF-8

ENV PATH="$POETRY_HOME/bin:$PATH"

# add ssh config capabilities
# RUN mkdir -p ~/.ssh
# COPY bin/ssh-config.sh /usr/bin
# RUN chmod +x /usr/bin/ssh-config.sh

# Install libraries
RUN DEBIAN_FRONTEND=noninteractive apt update && apt install -y \
libpq-dev gcc wget gnupg2 curl openssh-client git make build-essential \
make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

# add custom host file
# COPY hosts tmp/
# ADD hosts /tmp/hosts
# Warning: if you test on M1 and arch64 architecture you could have an issue with this line
# If you are using mac or arch64 change x86_64-linux-gnu with aarch64-linux-gnu
# RUN mkdir -p -- /lib-override && cp /lib/x86_64-linux-gnu/libnss_files.so.2 /lib-override
# RUN perl -pi -e 's:/etc/hosts:/tmp/hosts:g' /lib-override/libnss_files.so.2
# ENV LD_LIBRARY_PATH /lib-override

RUN wget -O install-poetry.py https://install.python-poetry.org/ \
&& python install-poetry.py --version ${POETRY_VERSION}

# COPY pyproject.toml .
# RUN poetry install

#if you want to test the image
# CMD ["tail", "-f", "/dev/null"]
24 changes: 24 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
.PHONY: docker
docker_build:
docker-compose -p test build

docker_python:
docker-compose -p test up --build -d ai-python-base

docker_pdm:
docker-compose -p test up --build -d ai-pdm-python-base

docker_check:
docker ps -a | grep "test"

docker_stop:
docker-compose -p test down

docker_stop_volume:
docker-compose -p test down -v

docker_volume_prune:
docker volume prune

docker_volume_list:
docker volume list
84 changes: 82 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,82 @@
# Dockbase
Base docker images for PythonBiellaGroup
# Docker Images

Base PythonBiellaGroup docker images

The aim of this project is to create default Docker image that everyone can use for building applications

## Images available:

- Python base image: this image it's used to build python with poetry
- PDM: Python base image with PDM support
- Node: base nodejs image
- Ubuntu CI Image: this image it's used by the infrastructure projects to build, push and launch code inside a deployment production server by ci/cd.

## Deploy a new image

If you want to create new images and launch the CI/CD pipeline you have to define a new tag.

```bash
# visualize the list of tags
git tag -l

# create a new tag
git tag 0.0.x

# push the tag and launch the pipeline
git push --tag
```

The tags are defined by the following structure: `major.minor.patch`

## Debug and test an image

You can use the `makefile` inside this project to launch and debug the images with your local machine.

There is also a `pyproject.toml` that contains all our libraries that we are using in the projects so you can test also the python installation of the libraries.

```bash
# build the images
make docker_build

# visualize images builded
docker image ls

# startup container from image
docker run --entrypoint "/bin/bash" --rm image:latest -c "sleep 24h"

# container hash id
docker ps

# log into the running container
docker exec -ti containerid bash

# output logs of the container
docker logs -f containerid
```

## Pull and use an image

If you want to pull and use an image inside the registry you can do:
```bash
# docker login
docker login gitlab.com -u $TOKEN_NAME -p $TOKEN_PASSWORD

# build a specific image (with a version)
docker build -t gitlab.com .

```

The variables: `TOKEN_NAME` and `TOKEN_PASSWORD` are defined inside gitlab.

## Push manually an image to the registry

This is something you don't have to do, because this process it's done automatically by the CI/CD pipeline.
```bash
docker login gitlab.com -u $TOKEN_NAME -p $TOKEN_PASSWORD

docker push gitlab.com
```

## Other informations

Informations regarding pipeline in Github and how to publish the docker, please check the [official github documentation](https://docs.github.com/en/actions/publishing-packages/publishing-docker-images)
21 changes: 21 additions & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
version: "3.8"
services:
#Default standard ai python base image
ai-python-base:
build:
dockerfile: ./Docker/python.dockerfile
context: .
container_name: ai-python-base
command: "tail -f /dev/null"
restart: always
environment:
TEST: ${TEST:-"docker-compose dev"}
ai-pdm-python-base:
build:
dockerfile: ./Docker/pdm.dockerfile
context: .
container_name: ai-pdm-base
command: "tail -f /dev/null"
restart: always
environment:
TEST: ${TEST:-"docker-compose dev"}

0 comments on commit 40125b7

Please sign in to comment.