7.4-apacheに書き換えたらイメージのbuildが必要になるので、Dockerfileに書いてあるapt-get update等が行われるのは当然です。その過程で失敗しているわけです。
エラーメッセージが示されているものだけではわかりませんが、幸いDockerfileがあるので手元でbuildしてみました。
% docker build --no-cache .
...略
#5 6.532 error: /usr/src/php/ext/mcrypt does not exist
#5 6.532
#5 6.532 usage: /usr/local/bin/docker-php-ext-install [-jN] [--ini-name file.ini] ext-name [ext-name ...]
#5 6.532 ie: /usr/local/bin/docker-php-ext-install gd mysqli
#5 6.532 /usr/local/bin/docker-php-ext-install pdo pdo_mysql
#5 6.532 /usr/local/bin/docker-php-ext-install -j5 gd mbstring mysqli pdo pdo_mysql shmop
#5 6.532
#5 6.532 if custom ./configure arguments are necessary, see docker-php-ext-configure
#5 6.532
#5 6.532 Possible values for ext-name:
#5 6.567 bcmath bz2 calendar ctype curl dba dom enchant exif ffi fileinfo filter ftp gd gettext gmp hash iconv imap intl json ldap mbstring mysqli oci8 odbc opcache pcntl pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix pspell readline reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer xml xmlreader xmlrpc xmlwriter xsl zend_test zip
#5 6.569
#5 6.569 Some of the above modules are already compiled into PHP; please check
#5 6.569 the output of "php -i" to see which modules are already loaded.
------
executor failed running [/bin/sh -c apt-get update && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev && docker-php-ext-install pdo_mysql mysqli mbstring gd iconv mcrypt]: exit code: 1
エラーから解るようにmcrypt extensionのインストールがうまくいっていません。ここでmcryptについて調べるとmcryptのインストール手順に
この拡張モジュールは » PECL レポジトリに移動 されており、以下のバージョン以降 PHP にバンドルされなくなっています。 PHP 7.2.0
とあります。phpにバンドルされていた7.0と、PECLに移動したあとの7.4ではインストール方法が違います。
PECL extensionのインストールのやり方は https://hub.docker.com/_/php のPECL extensionsという見出しの所に書いてあるのでそれに従ってDockerfileを書き換えます。
FROM php:7.4-apache
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
&& apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev \
&& docker-php-ext-install pdo_mysql mysqli mbstring gd iconv \
&& pecl install mcrypt \
&& docker-php-ext-enable mcrypt
しかしながらこれでbuildすると今度はmbstringでエラーになってしまいました。mbstringはデフォルトで入っていたような気がするので確認します。
% docker run php:7.4-apache php -m
[PHP Modules]
Core
ctype
curl
date
dom
fileinfo
filter
ftp
hash
iconv
json
libxml
mbstring
mysqlnd
openssl
pcre
PDO
pdo_sqlite
Phar
posix
readline
Reflection
session
SimpleXML
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
zlib
[Zend Modules]
やはりmbstringはphp:7.4-apacheにはじめから入っているので改めてインストールする必要はありません。さらにiconvも入っていることがわかったのでこれらを取り除いて最終的なDockerfileは以下に示すものでいいと思います。手元ではこれでbuildできることを確認済みです。
FROM php:7.4-apache
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
&& apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev libmcrypt-dev \
&& docker-php-ext-install pdo_mysql mysqli gd \
&& pecl install mcrypt \
&& docker-php-ext-enable mcrypt
またこれでいちおうイメージのbuildまではできたことになりますがphpはバージョン間の互換性のない変更もそれなりにありますので、さらに上にのっけたものが動くかどうかは定かではありません。変更点はPHPマニュアルの付録にまとまっているので確認しましょう。