Skip to content

Commit b3552bf

Browse files
committed
dhi helper image
1 parent c249004 commit b3552bf

File tree

2 files changed

+308
-0
lines changed

2 files changed

+308
-0
lines changed
Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
name: 'docker: DHI + Helper'
2+
3+
on:
4+
#push:
5+
# branches:
6+
# - 'main'
7+
# - 'master'
8+
# paths:
9+
# - 'dhi.helper.Dockerfile'
10+
# - '.github/workflows/build_docker-dhi_helper.yml'
11+
workflow_dispatch:
12+
schedule:
13+
- cron: '45 2 25 * *' # At 02:45 on day-of-month 25.
14+
15+
defaults:
16+
run:
17+
shell: bash
18+
19+
jobs:
20+
21+
# --------------------------------------------------
22+
# JOB: PREPARE (Variables)
23+
# --------------------------------------------------
24+
prepare:
25+
name: Prepare build variables
26+
runs-on: ubuntu-latest
27+
28+
steps:
29+
#- name: Checkout
30+
# uses: actions/checkout@v6
31+
32+
- name: Generate build variables
33+
id: vars
34+
shell: bash
35+
run: |
36+
BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')"
37+
BUILD_DATE_NUMERIC="${BUILD_DATE//[^[:digit:]]/}"
38+
#COMMIT_HASH=$(git rev-parse --short "$GITHUB_SHA")
39+
COMMIT_HASH=${GITHUB_SHA::7}
40+
GIT_URL=$(echo "${GITHUB_SERVER_URL}" | awk -F/ '{print $3}' | sed 's/\/*$//')
41+
GIT_URL=$(echo "$GIT_URL" | sed 's/github\.com/ghcr\.io/g') # GIT_URL switch to ghcr.io registry for GitHub
42+
GIT_REPO=${GITHUB_REPOSITORY,,}
43+
GIT_REPO_SHORT=${GIT_REPO#*/}
44+
GIT_REPO_SHORT=${GIT_REPO_SHORT#"docker-"}
45+
DOCKER_REPO=${{ vars.DOCKER_USERNAME }}/${GIT_REPO_SHORT}
46+
REDHAT_QUAY_REPO=${{ vars.REDHAT_QUAY_USERNAME }}/${GIT_REPO_SHORT}
47+
48+
#echo "ENVs: BUILD_DATE=${BUILD_DATE}, BUILD_DATE_NUMERIC=${BUILD_DATE_NUMERIC}, COMMIT_HASH=${COMMIT_HASH}, GIT_URL=${GIT_URL}, GIT_REPO=${GIT_REPO}, DOCKER_REPO=${DOCKER_REPO}, REDHAT_QUAY_REPO=${REDHAT_QUAY_REPO}"
49+
50+
# Set output parameters to action.
51+
echo "build_date=${BUILD_DATE}" >> "$GITHUB_OUTPUT"
52+
echo "build_date_numeric=${BUILD_DATE_NUMERIC}" >> "$GITHUB_OUTPUT"
53+
echo "commit_hash=${COMMIT_HASH}" >> "$GITHUB_OUTPUT"
54+
echo "git_url=${GIT_URL}" >> "$GITHUB_OUTPUT"
55+
echo "git_repo=${GIT_REPO}" >> "$GITHUB_OUTPUT"
56+
echo "git_repo_short=${GIT_REPO_SHORT}" >> "$GITHUB_OUTPUT"
57+
echo "docker_repo=${DOCKER_REPO}" >> "$GITHUB_OUTPUT"
58+
echo "redhat_quay_repo=${REDHAT_QUAY_REPO}" >> "$GITHUB_OUTPUT"
59+
60+
outputs:
61+
build_date: ${{ steps.vars.outputs.build_date }}
62+
build_date_numeric: ${{ steps.vars.outputs.build_date_numeric }}
63+
commit_hash: ${{ steps.vars.outputs.commit_hash }}
64+
git_url: ${{ steps.vars.outputs.git_url }}
65+
git_repo: ${{ steps.vars.outputs.git_repo }}
66+
git_repo_short: ${{ steps.vars.outputs.git_repo_short }}
67+
docker_repo: ${{ steps.vars.outputs.docker_repo }}
68+
quay_repo: ${{ steps.vars.outputs.redhat_quay_repo }}
69+
70+
71+
# --------------------------------------------------
72+
# JOB: DHI Alpine Helper
73+
# --------------------------------------------------
74+
build-dhi-helper-alpine:
75+
name: Build DHI Helper (Alpine)
76+
runs-on: ubuntu-latest
77+
needs: prepare
78+
79+
env:
80+
BUILD_DATE: ${{ needs.prepare.outputs.build_date }}
81+
BUILD_DATE_NUMERIC: ${{ needs.prepare.outputs.build_date_numeric}}
82+
COMMIT_HASH: ${{ needs.prepare.outputs.commit_hash }}
83+
GIT_URL: ${{ needs.prepare.outputs.git_url }}
84+
GIT_REPO: ${{ needs.prepare.outputs.git_repo }}
85+
GIT_REPO_SHORT: ${{ needs.prepare.outputs.git_repo_short }}
86+
DOCKER_REPO: ${{ needs.prepare.outputs.docker_repo }}
87+
QUAY_REPO: ${{ needs.prepare.outputs.quay_repo }}
88+
PHP_VERSION: ${{ matrix.php }}
89+
90+
steps:
91+
- name: Checkout
92+
uses: actions/checkout@v6
93+
94+
- name: Debug Variables
95+
run: |
96+
echo "BUILD_DATE=${BUILD_DATE}"
97+
echo "BUILD_DATE_NUMERIC=${BUILD_DATE_NUMERIC}"
98+
echo "COMMIT_HASH=${COMMIT_HASH}"
99+
echo "GIT_URL=${GIT_URL}"
100+
echo "GIT_REPO=${GIT_REPO}"
101+
echo "GIT_REPO_SHORT=${GIT_REPO_SHORT}"
102+
echo "DOCKER_REPO=${DOCKER_REPO}"
103+
echo "QUAY_REPO=${QUAY_REPO}"
104+
105+
- name: Execute Docker Setup
106+
id: docker-setup
107+
uses: ./.github/actions/docker-setup
108+
#uses: tob1as/docker-build-example/.github/actions/docker-setup@main
109+
with:
110+
git_url: ${{ env.GIT_URL }}
111+
git_username: ${{ github.repository_owner }}
112+
git_token: ${{ secrets.GITHUB_TOKEN }}
113+
docker_username: ${{ vars.DOCKER_USERNAME }}
114+
docker_password: ${{ secrets.DOCKER_PASSWORD }}
115+
quay_username: ${{ vars.REDHAT_QUAY_USERNAME }}
116+
quay_password: ${{ secrets.REDHAT_QUAY_PASSWORD }}
117+
118+
- name: Build
119+
uses: docker/build-push-action@v6
120+
with:
121+
builder: ${{ steps.docker-setup.outputs.builder_name }}
122+
context: .
123+
file: ./dhi.helper.Dockerfile
124+
platforms: linux/amd64,linux/arm64
125+
pull: true
126+
push: true
127+
target: production-alpine
128+
build-args: |
129+
BUILD_DATE=${{ env.BUILD_DATE }}
130+
VCS_REF=${{ env.COMMIT_HASH }}
131+
tags: |
132+
docker.io/${{env.DOCKER_REPO}}:${{env.PHP_VERSION}}-dhi-helper-alpine
133+
docker.io/${{env.DOCKER_REPO}}:${{env.PHP_VERSION}}-dhi-helper-alpine-${{env.COMMIT_HASH}}
134+
# ${{env.GIT_URL}}/${{env.GIT_REPO}}:${{env.PHP_VERSION}}-dhi-helper-alpine
135+
# quay.io/${{env.QUAY_REPO}}:${{env.PHP_VERSION}}-dhi-helper-alpine
136+
137+
138+
# --------------------------------------------------
139+
# JOB: DHI Debian Helper
140+
# --------------------------------------------------
141+
build-dhi-helper-debian:
142+
name: Build DHI Helper (Debian)
143+
runs-on: ubuntu-latest
144+
needs: prepare
145+
146+
env:
147+
BUILD_DATE: ${{ needs.prepare.outputs.build_date }}
148+
BUILD_DATE_NUMERIC: ${{ needs.prepare.outputs.build_date_numeric}}
149+
COMMIT_HASH: ${{ needs.prepare.outputs.commit_hash }}
150+
GIT_URL: ${{ needs.prepare.outputs.git_url }}
151+
GIT_REPO: ${{ needs.prepare.outputs.git_repo }}
152+
GIT_REPO_SHORT: ${{ needs.prepare.outputs.git_repo_short }}
153+
DOCKER_REPO: ${{ needs.prepare.outputs.docker_repo }}
154+
QUAY_REPO: ${{ needs.prepare.outputs.quay_repo }}
155+
PHP_VERSION: ${{ matrix.php }}
156+
157+
steps:
158+
- name: Checkout
159+
uses: actions/checkout@v6
160+
161+
- name: Debug Variables
162+
run: |
163+
echo "BUILD_DATE=${BUILD_DATE}"
164+
echo "BUILD_DATE_NUMERIC=${BUILD_DATE_NUMERIC}"
165+
echo "COMMIT_HASH=${COMMIT_HASH}"
166+
echo "GIT_URL=${GIT_URL}"
167+
echo "GIT_REPO=${GIT_REPO}"
168+
echo "GIT_REPO_SHORT=${GIT_REPO_SHORT}"
169+
echo "DOCKER_REPO=${DOCKER_REPO}"
170+
echo "QUAY_REPO=${QUAY_REPO}"
171+
172+
- name: Execute Docker Setup
173+
id: docker-setup
174+
uses: ./.github/actions/docker-setup
175+
#uses: tob1as/docker-build-example/.github/actions/docker-setup@main
176+
with:
177+
git_url: ${{ env.GIT_URL }}
178+
git_username: ${{ github.repository_owner }}
179+
git_token: ${{ secrets.GITHUB_TOKEN }}
180+
docker_username: ${{ vars.DOCKER_USERNAME }}
181+
docker_password: ${{ secrets.DOCKER_PASSWORD }}
182+
quay_username: ${{ vars.REDHAT_QUAY_USERNAME }}
183+
quay_password: ${{ secrets.REDHAT_QUAY_PASSWORD }}
184+
185+
- name: Build
186+
uses: docker/build-push-action@v6
187+
with:
188+
builder: ${{ steps.docker-setup.outputs.builder_name }}
189+
context: .
190+
file: ./dhi.helper.Dockerfile
191+
platforms: linux/amd64,linux/arm64
192+
pull: true
193+
push: true
194+
target: production-debian
195+
build-args: |
196+
BUILD_DATE=${{ env.BUILD_DATE }}
197+
VCS_REF=${{ env.COMMIT_HASH }}
198+
tags: |
199+
docker.io/${{env.DOCKER_REPO}}:${{env.PHP_VERSION}}-dhi-helper-debian
200+
docker.io/${{env.DOCKER_REPO}}:${{env.PHP_VERSION}}-dhi-helper-debian-${{env.COMMIT_HASH}}
201+
# ${{env.GIT_URL}}/${{env.GIT_REPO}}:${{env.PHP_VERSION}}-dhi-helper-debian
202+
# quay.io/${{env.QUAY_REPO}}:${{env.PHP_VERSION}}-dhi-helper-debian

dhi.helper.Dockerfile

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# build: docker build --no-cache --progress=plain --target=production-alpine -t docker.io/tobi312/php:dhi-helper-alpine -f dhi.helper.Dockerfile .
2+
ARG ALPINE_OS_VERSION=3.23
3+
ARG DEBIAN_OS_VERSION=trixie
4+
FROM dhi.io/alpine-base:${ALPINE_OS_VERSION}-dev AS dev-alpine
5+
6+
SHELL ["/bin/sh", "-o", "pipefail", "-c"]
7+
8+
COPY <<'EOF' /usr/local/bin/php-fpm-healthcheck.sh
9+
#!/bin/sh
10+
# required: fcgi (alpine) or libfcgi-bin (debian)
11+
: "${PHP_FPM_STATUS_HOST:="127.0.0.1"}" # set host
12+
: "${PHP_FPM_STATUS_PORT:="9001"}" # PHP-FPM Status/Ping Port (default: 9000, but here use 9001)
13+
: "${PHP_FPM_PING_PATH:="/php_fpm_ping"}" # (default: /ping, but here use /php_fpm_ping)
14+
echo ">> FCGI Settings: Host=${PHP_FPM_STATUS_HOST}, Port=${PHP_FPM_STATUS_PORT}, Path=${PHP_FPM_PING_PATH}"
15+
SCRIPT_NAME="${PHP_FPM_PING_PATH}" SCRIPT_FILENAME="${PHP_FPM_PING_PATH}" REQUEST_METHOD=GET cgi-fcgi -bind -connect "${PHP_FPM_PING_HOST}:${PHP_FPM_STATUS_PORT}" >/dev/null 2>&1
16+
echo $?
17+
EOF
18+
19+
RUN chmod +x /usr/local/bin/*.sh
20+
21+
22+
FROM dev-alpine AS builder-alpine
23+
24+
SHELL ["/bin/sh", "-o", "pipefail", "-c"]
25+
26+
WORKDIR /tmp
27+
28+
ENV PACKAGE_LIST_CURL=""
29+
ENV PACKAGE_LIST_NANO=""
30+
ENV PACKAGE_LIST_DB=""
31+
# example package extractor: https://github.com/Tob1as/docker-php/blob/master/dhi.alpine.fpm.wsc.Dockerfile#L131
32+
# List of packages for download separated by spaces.
33+
ENV PACKAGE_LIST_CURL="curl libcurl zlib c-ares nghttp3 nghttp2-libs libidn2 libpsl libssl3 libcrypto3 zstd-libs brotli-libs libunistring"
34+
#ENV PACKAGE_LIST_NANO="nano libncursesw ncurses-terminfo-base"
35+
#ENV PACKAGE_LIST_DB="mysql-client mariadb-client mariadb-backup libstdc++ libgcc"
36+
ENV PACKAGE_LIST="fcgi unzip ${PACKAGE_LIST_CURL} ${PACKAGE_LIST_NANO} ${PACKAGE_LIST_DB}"
37+
# hadolint ignore=DL3008,DL3015,SC2086
38+
RUN \
39+
#apk fetch --no-cache --recursive $PACKAGE_LIST && \
40+
apk fetch --no-cache $PACKAGE_LIST && \
41+
mkdir -p /apkroot && \
42+
for pkg in *.apk; do \
43+
tar -xzf "$pkg" -C /apkroot; \
44+
done && \
45+
echo "Packages have been processed !"
46+
# List directory and file structure
47+
#RUN tree /apkroot
48+
49+
COPY --from=dev-alpine /usr/local/bin/php-fpm-healthcheck.sh /apkroot/usr/local/bin/php-fpm-healthcheck.sh
50+
51+
RUN tree /apkroot
52+
53+
54+
FROM dhi.io/alpine-base:${ALPINE_OS_VERSION} AS production-alpine
55+
ARG BUILD_PHP_VERSION
56+
ARG VCS_REF
57+
ARG BUILD_DATE
58+
#ENV TERM=xterm
59+
LABEL org.opencontainers.image.authors="Tobias Hargesheimer <docker@ison.ws>" \
60+
org.opencontainers.image.title="Helper tools (dhi alpine)" \
61+
org.opencontainers.image.description="DHI (Docker Hardened Images): Helper tools on Alpine" \
62+
org.opencontainers.image.created="${BUILD_DATE}" \
63+
org.opencontainers.image.revision="${VCS_REF}" \
64+
org.opencontainers.image.licenses="Apache-2.0" \
65+
org.opencontainers.image.url="https://hub.docker.com/r/tobi312/php" \
66+
org.opencontainers.image.source="https://github.com/Tob1as/docker-php"
67+
# Copy the libraries from the extractor/dev stage into root
68+
COPY --from=builder-alpine /apkroot /
69+
WORKDIR /tmp
70+
#USER nonroot
71+
CMD [ "tail", "-f", "/dev/null" ]
72+
73+
74+
FROM dhi.io/debian-base:${DEBIAN_OS_VERSION} AS production-debian
75+
ARG BUILD_PHP_VERSION
76+
ARG VCS_REF
77+
ARG BUILD_DATE
78+
#ENV TERM=xterm
79+
LABEL org.opencontainers.image.authors="Tobias Hargesheimer <docker@ison.ws>" \
80+
org.opencontainers.image.title="Helper tools (dhi debian)" \
81+
org.opencontainers.image.description="DHI (Docker Hardened Images): Helper tools on Debian" \
82+
org.opencontainers.image.created="${BUILD_DATE}" \
83+
org.opencontainers.image.revision="${VCS_REF}" \
84+
org.opencontainers.image.licenses="Apache-2.0" \
85+
org.opencontainers.image.url="https://hub.docker.com/r/tobi312/php" \
86+
org.opencontainers.image.source="https://github.com/Tob1as/docker-php"
87+
88+
#USER root
89+
90+
RUN apt-get update && \
91+
apt-get install -y \
92+
libfcgi-bin \
93+
unzip \
94+
curl \
95+
wget \
96+
netcat-openbsd \
97+
#nano \
98+
#mariadb-client \
99+
&& \
100+
rm -rf /var/lib/apt/lists/*
101+
102+
COPY --from=dev-alpine /usr/local/bin/php-fpm-healthcheck.sh /usr/local/bin/php-fpm-healthcheck.sh
103+
104+
WORKDIR /tmp
105+
USER nonroot
106+
CMD [ "tail", "-f", "/dev/null" ]

0 commit comments

Comments
 (0)