@@ -23,9 +23,10 @@ LABEL maintainer="sherifabdlnaby@gmail.com"
23
23
24
24
RUN apt-get update && apt-get -y --no-install-recommends install \
25
25
# Needed for Image
26
- libfcgi-bin=2.4.0-10 \
27
- tini=0.18.0-1 \
28
- # Needed for PHP
26
+ tini=0.18.0-1 \
27
+ libfcgi-bin=2.4.0-10 \
28
+ libicu-dev=63.1-6+deb10u1 \
29
+ # Needed for Application Runtime
29
30
30
31
# Clean metadata and clear caches
31
32
&& apt-get autoremove --purge -y && apt-get clean \
@@ -38,42 +39,47 @@ RUN apt-get update && apt-get -y --no-install-recommends install \
38
39
# head to: https://github.com/docker-library/docs/tree/master/php#how-to-install-more-php-extensions
39
40
# EX: RUN docker-php-ext-install curl pdo pdo_mysql mysqli
40
41
# EX: RUN pecl install memcached && docker-php-ext-enable memcached
41
- RUN docker-php-ext-install \
42
+ RUN docker-php-ext-install -j$(nproc) \
42
43
opcache \
44
+ intl \
43
45
pdo_mysql
44
46
# Pecl Extentions
47
+ RUN pecl install apcu-5.1.20 && docker-php-ext-enable apcu
45
48
# EX: RUN pecl install memcached && docker-php-ext-enable memcached
46
49
47
50
# ------------------------------------------------ PHP Configuration ---------------------------------------------------
48
51
49
- # Add Base Config
52
+ # Add Default Config
50
53
RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
51
54
52
- # Add in Custom Config
55
+ # Add in Base PHP Config
53
56
COPY docker/php/base-* $PHP_INI_DIR/conf.d
54
57
55
58
# ---------------------------------------------- PHP FPM Configuration -------------------------------------------------
56
59
57
60
# Clean bundled config & create composer directories (since we run as non-root later)
58
- RUN rm -rf /var/www /usr/local/etc/php-fpm.d/* && \
59
- mkdir -p /var/www/.composer /var/www/app && chown -R www-data:www-data /var/www/ /var/www/app && \
60
- usermod -u 1000 www-data
61
+ RUN usermod -u 1000 www-data && rm -rf /var/www /usr/local/etc/php-fpm.d/* && \
62
+ mkdir -p /var/www/.composer /var/www/app && chown -R www-data:www-data /var/www/app /var/www/.composer
61
63
62
64
# Copy scripts and PHP-FPM config
63
65
COPY docker/fpm/*.conf /usr/local/etc/php-fpm.d/
64
66
65
67
# --------------------------------------------------- Scripts ----------------------------------------------------------
66
68
67
- COPY docker/fpm/fpm-healthcheck /usr/local/bin/
68
- COPY docker/entrypoints/base-* /usr/local/bin/
69
- COPY docker/healthcheck /usr/local/bin/
70
- COPY docker/post-install /usr/local/bin/
71
- RUN chmod +x /usr/local/bin/base -* /usr/local/bin/*healthcheck /usr/local/bin/post-install
69
+ COPY docker/entrypoints /usr/local/bin/
70
+ COPY docker/healthcheck /usr/local/bin/
71
+ COPY docker/post-* /usr/local/bin/
72
+ COPY docker/fpm/fpm-healthcheck /usr/local/bin/
73
+ RUN chmod +x /usr/local/bin/entrypoint -* /usr/local/bin/post-* /usr/local/bin/healthcheck
72
74
73
75
# ---------------------------------------------------- Composer --------------------------------------------------------
74
76
75
77
COPY --from=composer /usr/bin/composer /usr/bin/composer
76
78
79
+ # ----------------------------------------------- NON-ROOT SWITCH ------------------------------------------------------
80
+
81
+ USER www-data
82
+
77
83
# ----------------------------------------------------- MISC -----------------------------------------------------------
78
84
79
85
WORKDIR /var/www/app
@@ -92,7 +98,7 @@ HEALTHCHECK CMD ["healthcheck"]
92
98
93
99
# -------------------------------------------------- ENTRYPOINT --------------------------------------------------------
94
100
95
- ENTRYPOINT ["base- entrypoint" ]
101
+ ENTRYPOINT ["entrypoint-base " ]
96
102
CMD ["php-fpm" ]
97
103
98
104
# ======================================================================================================================
@@ -104,7 +110,7 @@ FROM composer as vendor
104
110
105
111
ARG PHP_VERSION
106
112
ARG COMPOSER_AUTH
107
- # A Json Object with Bitbucket or Github token to clone private Repos with composer
113
+ # A Json Object with remote repository token to clone private Repos with composer
108
114
# Reference: https://getcomposer.org/doc/03-cli.md#composer-auth
109
115
ENV COMPOSER_AUTH $COMPOSER_AUTH
110
116
@@ -116,27 +122,18 @@ COPY composer.lock composer.lock
116
122
RUN composer config platform.php ${PHP_VERSION}
117
123
118
124
# Install Dependeinces
119
- # # * Platform requirments are checked at the next image steps.
120
- # # * Scripts and Autoload are run at the next image steps.
125
+ # # * Platform requirments are checked at the later steps.
126
+ # # * Scripts and Autoload are run at later steps.
121
127
RUN composer install -n --no-progress --ignore-platform-reqs --no-plugins --no-scripts --no-autoloader --prefer-dist
122
128
123
129
# ======================================================================================================================
124
- # =========================================== PRODUCTION FINAL STAGES ================================================
130
+ # ============================================== PRODUCTION IMAGE ==== ================================================
125
131
# --- PROD ---
126
132
# ======================================================================================================================
127
133
128
134
FROM base AS app
129
135
130
- # Switch to root to add stuff
131
- USER root
132
-
133
- # Copy Prod Entrypoint && PHP Config
134
- COPY docker/entrypoints/prod-* /usr/local/bin/
135
136
COPY docker/php/prod-* $PHP_INI_DIR/conf.d/
136
- RUN chmod +x /usr/local/bin/prod-*
137
-
138
- # Run as non-root
139
- USER www-data
140
137
141
138
# Copy Vendor
142
139
COPY --chown=www-data:www-data --from=vendor /app/vendor /var/www/app/vendor
@@ -147,10 +144,11 @@ COPY --chown=www-data:www-data . .
147
144
# 1. Dump optimzed autoload for vendor and app classes.
148
145
# 2. --no-scripts as scripts are run on runtime via entrypoint.
149
146
# 3. checks that PHP and extensions versions match the platform requirements of the installed packages.
150
- RUN composer dump-autoload -n --optimize --no-scripts --no-dev --classmap-authoritative && composer check-platform-reqs
151
-
147
+ RUN composer dump-autoload -n --optimize --no-scripts --no-dev --classmap-authoritative && \
148
+ composer check-platform-reqs && \
149
+ post-build
152
150
153
- ENTRYPOINT ["prod- entrypoint" ]
151
+ ENTRYPOINT ["entrypoint-prod " ]
154
152
CMD ["php-fpm" ]
155
153
156
154
# ======================================================================================================================
@@ -187,21 +185,19 @@ COPY docker/php/dev-* $PHP_INI_DIR/conf.d/
187
185
188
186
# ------------------------------------------------- Entry Point --------------------------------------------------------
189
187
190
- # Copy Entrypoint
191
- COPY docker/entrypoints/dev-* /usr/local/bin/
192
- RUN chmod +x /usr/local/bin/dev-*
193
-
194
188
# Run as non-root
195
189
USER www-data
196
190
197
- # Copy Vendor And Generate Autoload
198
- COPY --chown=www-data:www-data --from=vendor /app/vendor /var/www/app/vendor
191
+ # Copy Vendor And Generate Autoload ( Needs Composer.* to check reqs and generate autoload)
199
192
COPY --chown=www-data:www-data composer.json composer.json
200
193
COPY --chown=www-data:www-data composer.lock composer.lock
201
- RUN composer dump-autoload -n --no-scripts && composer check-platform-reqs
202
-
203
- ENTRYPOINT ["dev-entrypoint" ]
194
+ COPY --chown=www-data:www-data --from=vendor /app/vendor /var/www/app/vendor
195
+ RUN composer install --no-scripts && composer dump-autoload -n --no-scripts && \
196
+ composer check-platform-reqs && \
197
+ post-build
204
198
199
+ # Entrypoints
200
+ ENTRYPOINT ["entrypoint-dev" ]
205
201
CMD ["php-fpm" ]
206
202
207
203
@@ -212,8 +208,7 @@ CMD ["php-fpm"]
212
208
# ======================================================================================================================
213
209
FROM nginx:${NGINX_VERSION}-alpine AS nginx
214
210
215
- RUN rm -rf /var/www/* /etc/nginx/conf.d/* /usr/local/etc/php-fpm.d/* && \
216
- adduser -u 1000 -D -S -G www-data www-data
211
+ RUN rm -rf /var/www/* /etc/nginx/conf.d/* && adduser -u 1000 -D -S -G www-data www-data
217
212
218
213
COPY docker/nginx/nginx-* /usr/local/bin/
219
214
COPY docker/nginx/ /etc/nginx/
0 commit comments