Skip to content

Commit 78e3cb7

Browse files
J0WIibennetch
authored andcommitted
Refactor Dockerfile to support multiple variants and drop supervisord (#200)
* Refactor Dockerfile to support multiple variants and drop supervisord * Rename run.sh to docker-entrypoint.sh * Update tests for apache conatiner * Fix tests in conatiner * Fix database startup * Update Makefile to build all variants * Update phpMyAdmin to 4.8.4 * Rebase on top of v4.8.5
1 parent a114733 commit 78e3cb7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+2845
-100
lines changed

.travis.yml

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ python:
88
env:
99
matrix:
1010
- DB=mysql:latest
11-
- DB=mariadb:10.2
11+
- DB=mariadb:latest
1212

1313
before_install:
1414
- export TESTSUITE_PASSWORD=`openssl rand -base64 30`
@@ -19,7 +19,7 @@ install:
1919

2020
script:
2121
# Build image
22-
- docker build -t phpmyadmin/phpmyadmin .
22+
- docker build -t phpmyadmin/phpmyadmin apache
2323
# Test for single database
2424
- docker run --name testadmin -d --link db_server:db -p 9090:80 phpmyadmin/phpmyadmin
2525
- ./testing/test-docker.sh testadmin 9090
@@ -37,5 +37,6 @@ script:
3737
- ./testing/test-docker.sh phpmyadmin 8080 db_server
3838
- docker-compose stop
3939
# Run tests in testing container
40-
- docker-compose -f docker-compose.testing.yml up -d phpmyadmin
41-
- ./testing/wait-for-testing.sh
40+
- docker-compose -f docker-compose.testing.yml up -d db_server
41+
- docker-compose -f docker-compose.testing.yml up -d
42+
- docker-compose exec phpmyadmin /test-docker.sh phpmyadmin_testing 80 phpmyadmin_testing_db

Dockerfile-alpine.template

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
FROM php:7.2-%%VARIANT%%
2+
3+
# docker-entrypoint.sh dependencies
4+
RUN apk add --no-cache \
5+
bash
6+
7+
# Install dependencies
8+
RUN set -ex; \
9+
\
10+
apk add --no-cache --virtual .build-deps \
11+
bzip2-dev \
12+
freetype-dev \
13+
libjpeg-turbo-dev \
14+
libpng-dev \
15+
libwebp-dev \
16+
libxpm-dev \
17+
; \
18+
\
19+
docker-php-ext-configure gd --with-freetype-dir=/usr --with-jpeg-dir=/usr --with-webp-dir=/usr --with-png-dir=/usr --with-xpm-dir=/usr; \
20+
docker-php-ext-install bz2 gd mysqli opcache zip; \
21+
\
22+
runDeps="$( \
23+
scanelf --needed --nobanner --format '%n#p' --recursive /usr/local/lib/php/extensions \
24+
| tr ',' '\n' \
25+
| sort -u \
26+
| awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
27+
)"; \
28+
apk add --virtual .phpmyadmin-phpexts-rundeps $runDeps; \
29+
apk del .build-deps
30+
31+
# Calculate download URL
32+
ENV VERSION 4.8.5
33+
ENV URL https://files.phpmyadmin.net/phpMyAdmin/${VERSION}/phpMyAdmin-${VERSION}-all-languages.tar.xz
34+
LABEL version=$VERSION
35+
36+
# Download tarball, verify it using gpg and extract
37+
RUN set -ex; \
38+
apk add --no-cache --virtual .fetch-deps \
39+
gnupg \
40+
; \
41+
\
42+
export GNUPGHOME="$(mktemp -d)"; \
43+
export GPGKEY="3D06A59ECE730EB71B511C17CE752F178259BD92"; \
44+
curl --output phpMyAdmin.tar.xz --location $URL; \
45+
curl --output phpMyAdmin.tar.xz.asc --location $URL.asc; \
46+
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPGKEY" \
47+
|| gpg --batch --keyserver ipv4.pool.sks-keyservers.net --recv-keys "$GPGKEY" \
48+
|| gpg --batch --keyserver keys.gnupg.net --recv-keys "$GPGKEY" \
49+
|| gpg --batch --keyserver pgp.mit.edu --recv-keys "$GPGKEY" \
50+
|| gpg --batch --keyserver keyserver.pgp.com --recv-keys "$GPGKEY"; \
51+
gpg --batch --verify phpMyAdmin.tar.xz.asc phpMyAdmin.tar.xz; \
52+
tar -xf phpMyAdmin.tar.xz -C /usr/src; \
53+
gpgconf --kill all; \
54+
rm -r "$GNUPGHOME" phpMyAdmin.tar.xz phpMyAdmin.tar.xz.asc; \
55+
mv /usr/src/phpMyAdmin-$VERSION-all-languages /usr/src/phpmyadmin; \
56+
rm -rf /usr/src/phpmyadmin/setup/ /usr/src/phpmyadmin/examples/ /usr/src/phpmyadmin/test/ /usr/src/phpmyadmin/po/ /usr/src/phpmyadmin/composer.json /usr/src/phpmyadmin/RELEASE-DATE-$VERSION; \
57+
sed -i "s@define('CONFIG_DIR'.*@define('CONFIG_DIR', '/etc/phpmyadmin/');@" /usr/src/phpmyadmin/libraries/vendor_config.php; \
58+
# Add directory for sessions to allow session persistence
59+
mkdir /sessions; \
60+
mkdir -p /var/nginx/client_body_temp; \
61+
apk del .fetch-deps
62+
63+
# Copy configuration
64+
COPY config.inc.php /etc/phpmyadmin/config.inc.php
65+
COPY php.ini /usr/local/etc/php/conf.d/php-phpmyadmin.ini
66+
67+
# Copy main script
68+
COPY docker-entrypoint.sh /docker-entrypoint.sh
69+
70+
ENTRYPOINT [ "/docker-entrypoint.sh" ]
71+
CMD ["%%CMD%%"]

Dockerfile-debian.template

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
FROM php:7.2-%%VARIANT%%
2+
3+
# Install dependencies
4+
RUN set -ex; \
5+
\
6+
savedAptMark="$(apt-mark showmanual)"; \
7+
\
8+
apt-get update; \
9+
apt-get install -y --no-install-recommends \
10+
libbz2-dev \
11+
libfreetype6-dev \
12+
libjpeg-dev \
13+
libpng-dev \
14+
libwebp-dev \
15+
libxpm-dev \
16+
; \
17+
\
18+
docker-php-ext-configure gd --with-freetype-dir=/usr --with-jpeg-dir=/usr --with-webp-dir=/usr --with-png-dir=/usr --with-xpm-dir=/usr; \
19+
docker-php-ext-install bz2 gd mysqli opcache zip; \
20+
\
21+
apt-mark auto '.*' > /dev/null; \
22+
apt-mark manual $savedAptMark; \
23+
ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \
24+
| awk '/=>/ { print $3 }' \
25+
| sort -u \
26+
| xargs -r dpkg-query -S \
27+
| cut -d: -f1 \
28+
| sort -u \
29+
| xargs -rt apt-mark manual; \
30+
\
31+
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
32+
rm -rf /var/lib/apt/lists/*
33+
34+
# Calculate download URL
35+
ENV VERSION 4.8.5
36+
ENV URL https://files.phpmyadmin.net/phpMyAdmin/${VERSION}/phpMyAdmin-${VERSION}-all-languages.tar.xz
37+
LABEL version=$VERSION
38+
39+
# Download tarball, verify it using gpg and extract
40+
RUN set -ex; \
41+
fetchDeps=" \
42+
gnupg \
43+
dirmngr \
44+
"; \
45+
apt-get update; \
46+
apt-get install -y --no-install-recommends $fetchDeps; \
47+
\
48+
export GNUPGHOME="$(mktemp -d)"; \
49+
export GPGKEY="3D06A59ECE730EB71B511C17CE752F178259BD92"; \
50+
curl --output phpMyAdmin.tar.xz --location $URL; \
51+
curl --output phpMyAdmin.tar.xz.asc --location $URL.asc; \
52+
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPGKEY" \
53+
|| gpg --batch --keyserver ipv4.pool.sks-keyservers.net --recv-keys "$GPGKEY" \
54+
|| gpg --batch --keyserver keys.gnupg.net --recv-keys "$GPGKEY" \
55+
|| gpg --batch --keyserver pgp.mit.edu --recv-keys "$GPGKEY" \
56+
|| gpg --batch --keyserver keyserver.pgp.com --recv-keys "$GPGKEY"; \
57+
gpg --batch --verify phpMyAdmin.tar.xz.asc phpMyAdmin.tar.xz; \
58+
tar -xf phpMyAdmin.tar.xz -C /usr/src; \
59+
gpgconf --kill all; \
60+
rm -r "$GNUPGHOME" phpMyAdmin.tar.xz phpMyAdmin.tar.xz.asc; \
61+
mv /usr/src/phpMyAdmin-$VERSION-all-languages /usr/src/phpmyadmin; \
62+
rm -rf /usr/src/phpmyadmin/setup/ /usr/src/phpmyadmin/examples/ /usr/src/phpmyadmin/test/ /usr/src/phpmyadmin/po/ /usr/src/phpmyadmin/composer.json /usr/src/phpmyadmin/RELEASE-DATE-$VERSION; \
63+
sed -i "s@define('CONFIG_DIR'.*@define('CONFIG_DIR', '/etc/phpmyadmin/');@" /usr/src/phpmyadmin/libraries/vendor_config.php; \
64+
# Add directory for sessions to allow session persistence
65+
mkdir /sessions; \
66+
mkdir -p /var/nginx/client_body_temp; \
67+
\
68+
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $fetchDeps; \
69+
rm -rf /var/lib/apt/lists/*
70+
71+
# Copy configuration
72+
COPY config.inc.php /etc/phpmyadmin/config.inc.php
73+
COPY php.ini /usr/local/etc/php/conf.d/php-phpmyadmin.ini
74+
75+
# Copy main script
76+
COPY docker-entrypoint.sh /docker-entrypoint.sh
77+
78+
ENTRYPOINT [ "/docker-entrypoint.sh" ]
79+
CMD ["%%CMD%%"]

Makefile

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@ DOCKER_REPO = phpmyadmin/phpmyadmin
44

55
all: build run logs
66

7-
build:
8-
docker build -t ${DOCKER_REPO}:testing .
7+
build: build-apache build-fpm build-fpm-alpine
98

10-
build_nc:
11-
docker build --no-cache=true -t ${DOCKER_REPO}:testing .
9+
build-apache:
10+
docker build ${DOCKER_FLAGS} -t ${DOCKER_REPO}:testing apache
11+
12+
build-fpm:
13+
docker build ${DOCKER_FLAGS} -t ${DOCKER_REPO}:testing-fpm fpm
14+
15+
build-fpm-alpine:
16+
docker build ${DOCKER_FLAGS} -t ${DOCKER_REPO}:testing-fpm-alpine fpm-alpine
1217

1318
run:
1419
docker-compose -f docker-compose.testing.yml up -d

apache/Dockerfile

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
FROM php:7.2-apache
2+
3+
# Install dependencies
4+
RUN set -ex; \
5+
\
6+
savedAptMark="$(apt-mark showmanual)"; \
7+
\
8+
apt-get update; \
9+
apt-get install -y --no-install-recommends \
10+
libbz2-dev \
11+
libfreetype6-dev \
12+
libjpeg-dev \
13+
libpng-dev \
14+
libwebp-dev \
15+
libxpm-dev \
16+
; \
17+
\
18+
docker-php-ext-configure gd --with-freetype-dir=/usr --with-jpeg-dir=/usr --with-webp-dir=/usr --with-png-dir=/usr --with-xpm-dir=/usr; \
19+
docker-php-ext-install bz2 gd mysqli opcache zip; \
20+
\
21+
apt-mark auto '.*' > /dev/null; \
22+
apt-mark manual $savedAptMark; \
23+
ldd "$(php -r 'echo ini_get("extension_dir");')"/*.so \
24+
| awk '/=>/ { print $3 }' \
25+
| sort -u \
26+
| xargs -r dpkg-query -S \
27+
| cut -d: -f1 \
28+
| sort -u \
29+
| xargs -rt apt-mark manual; \
30+
\
31+
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
32+
rm -rf /var/lib/apt/lists/*
33+
34+
# Calculate download URL
35+
ENV VERSION 4.8.5
36+
ENV URL https://files.phpmyadmin.net/phpMyAdmin/${VERSION}/phpMyAdmin-${VERSION}-all-languages.tar.xz
37+
LABEL version=$VERSION
38+
39+
# Download tarball, verify it using gpg and extract
40+
RUN set -ex; \
41+
fetchDeps=" \
42+
gnupg \
43+
dirmngr \
44+
"; \
45+
apt-get update; \
46+
apt-get install -y --no-install-recommends $fetchDeps; \
47+
\
48+
export GNUPGHOME="$(mktemp -d)"; \
49+
export GPGKEY="3D06A59ECE730EB71B511C17CE752F178259BD92"; \
50+
curl --output phpMyAdmin.tar.xz --location $URL; \
51+
curl --output phpMyAdmin.tar.xz.asc --location $URL.asc; \
52+
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPGKEY" \
53+
|| gpg --batch --keyserver ipv4.pool.sks-keyservers.net --recv-keys "$GPGKEY" \
54+
|| gpg --batch --keyserver keys.gnupg.net --recv-keys "$GPGKEY" \
55+
|| gpg --batch --keyserver pgp.mit.edu --recv-keys "$GPGKEY" \
56+
|| gpg --batch --keyserver keyserver.pgp.com --recv-keys "$GPGKEY"; \
57+
gpg --batch --verify phpMyAdmin.tar.xz.asc phpMyAdmin.tar.xz; \
58+
tar -xf phpMyAdmin.tar.xz -C /usr/src; \
59+
gpgconf --kill all; \
60+
rm -r "$GNUPGHOME" phpMyAdmin.tar.xz phpMyAdmin.tar.xz.asc; \
61+
mv /usr/src/phpMyAdmin-$VERSION-all-languages /usr/src/phpmyadmin; \
62+
rm -rf /usr/src/phpmyadmin/setup/ /usr/src/phpmyadmin/examples/ /usr/src/phpmyadmin/test/ /usr/src/phpmyadmin/po/ /usr/src/phpmyadmin/composer.json /usr/src/phpmyadmin/RELEASE-DATE-$VERSION; \
63+
sed -i "s@define('CONFIG_DIR'.*@define('CONFIG_DIR', '/etc/phpmyadmin/');@" /usr/src/phpmyadmin/libraries/vendor_config.php; \
64+
# Add directory for sessions to allow session persistence
65+
mkdir /sessions; \
66+
mkdir -p /var/nginx/client_body_temp; \
67+
\
68+
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false $fetchDeps; \
69+
rm -rf /var/lib/apt/lists/*
70+
71+
# Copy configuration
72+
COPY config.inc.php /etc/phpmyadmin/config.inc.php
73+
COPY php.ini /usr/local/etc/php/conf.d/php-phpmyadmin.ini
74+
75+
# Copy main script
76+
COPY docker-entrypoint.sh /docker-entrypoint.sh
77+
78+
ENTRYPOINT [ "/docker-entrypoint.sh" ]
79+
CMD ["apache2-foreground"]
File renamed without changes.

apache/docker-entrypoint.sh

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#!/bin/bash
2+
if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then
3+
if [ "$(id -u)" = '0' ]; then
4+
case "$1" in
5+
apache2*)
6+
user="${APACHE_RUN_USER:-www-data}"
7+
group="${APACHE_RUN_GROUP:-www-data}"
8+
;;
9+
*) # php-fpm
10+
user='www-data'
11+
group='www-data'
12+
;;
13+
esac
14+
else
15+
user="$(id -u)"
16+
group="$(id -g)"
17+
fi
18+
19+
chown www-data:www-data /sessions /var/nginx/client_body_temp
20+
21+
if ! [ -e index.php -a -e db_designer.php ]; then
22+
echo >&2 "phpMyAdmin not found in $PWD - copying now..."
23+
if [ "$(ls -A)" ]; then
24+
echo >&2 "WARNING: $PWD is not empty - press Ctrl+C now if this is an error!"
25+
( set -x; ls -A; sleep 10 )
26+
fi
27+
tar --create \
28+
--file - \
29+
--one-file-system \
30+
--directory /usr/src/phpmyadmin \
31+
--owner "$user" --group "$group" \
32+
. | tar --extract --file -
33+
echo >&2 "Complete! phpMyAdmin has been successfully copied to $PWD"
34+
mkdir -p tmp; \
35+
chmod -R 777 tmp; \
36+
fi
37+
38+
if [ ! -f /etc/phpmyadmin/config.secret.inc.php ]; then
39+
cat > /etc/phpmyadmin/config.secret.inc.php <<EOT
40+
<?php
41+
\$cfg['blowfish_secret'] = '$(tr -dc 'a-zA-Z0-9~!@#$%^&*_()+}{?></";.,[]=-' < /dev/urandom | fold -w 32 | head -n 1)';
42+
EOT
43+
fi
44+
45+
if [ ! -f /etc/phpmyadmin/config.user.inc.php ]; then
46+
touch /etc/phpmyadmin/config.user.inc.php
47+
fi
48+
fi
49+
50+
exec "$@"
File renamed without changes.

apache/etc/etc/php-fpm.conf

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[global]
2+
error_log = /var/log/php-fpm.log
3+
log_level = warning
4+
5+
[www]
6+
listen = /var/run/php/php-fpm.sock
7+
listen.mode = 0660
8+
chdir = /var/www/html
9+
pm = dynamic
10+
pm.max_children = 5
11+
pm.start_servers = 2
12+
pm.min_spare_servers = 1
13+
pm.max_spare_servers = 3
14+
catch_workers_output = Yes
15+
clear_env = No

0 commit comments

Comments
 (0)