まとめ。Composer が使える Docker の php:apache の Dockerfile
From php:apache RUN apt-get update && apt-get install -y \ unzip \ zlib1g-dev \ && docker-php-ext-install \ zip \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN curl -s http://getcomposer.org/installer | php && \ mv composer.phar /usr/local/bin/composer
これが最低限必要なものを追加した Dockerfile と思いますが、ちょっと及び腰で念の為という気持ちで、利便性や、参考ページにあったものも一応追加したものが次となります。
- git はインストールしなくても使えるが入れた。
echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \
も無くてもよいと思う (未検証) が、一応入れた。
From php:apache RUN apt-get update && apt-get install -y \ git \ unzip \ zlib1g-dev \ && docker-php-ext-install \ zip \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN curl -s http://getcomposer.org/installer | php && \ echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \ mv composer.phar /usr/local/bin/composer
はじめるにあたって
次をベースにしました。
の次の部分です。
##################################### # Composer: ##################################### # Install composer and add its bin to the PATH. RUN curl -s http://getcomposer.org/installer | php && \ echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \ mv composer.phar /usr/local/bin/composer # Source the bash RUN . ~/.bashrc
試行錯誤するのに使うコマンドまとめ
# イメージをビルド。キャッシュを使用しない docker image build --no-cache=true -t name:tag . # イメージの一覧 docker image ls -a # 使い捨てでコンテナを起動し bash で入る docker container run --rm -it name:tag bash # PHP 拡張の確認 php -m # Composer の動きを見るために Laravel インストーラーの導入 laravel new blog composer create-project --prefer-dist laravel/laravel blog
デフォルトで入っている PHP 拡張のリスト
上記参照
試行錯誤 1. crypt の有効に失敗する
From php:apache RUN curl -s http://getcomposer.org/installer | php && \ echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \ mv composer.phar /usr/local/bin/composer
bash で入ったあと、composer を使ってみますと、次のようにエラーとなりました><。
$ docker container run --rm -it pc:1 bash root@d8b4bc873df6:/var/www/html# composer global require "laravel/installer" Changed current directory to /root/.composer Do not run Composer as root/super user! See https://getcomposer.org/root for details [Composer\Downloader\TransportException] The "https://repo.packagist.org/packages.json" file could not be downloaded: SSL operation failed with code 1. OpenSSL Error messages: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed Failed to enable crypto failed to open stream: operation failed require [--dev] [--prefer-source] [--prefer-dist] [--no-progress] [--no-suggest] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--update-with-all-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--] [<packages>]... root@d8b4bc873df6:/var/www/html#
crypto が入っていないからでしょうか。PHP 拡張の mcrypt を入れれば良いでしょうか。。。
と思ったらダメなようです。PHP 7.2 から削除されています。
となると、php-openssl ですが、これは最初から入っています。ですので、OpenSSL を入れれば良いでしょうか。
From php:apache RUN apt-get update && apt-get install -y \ openssl \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN curl -s http://getcomposer.org/installer | php && \ echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \ mv composer.phar /usr/local/bin/composer
これでビルドしてみましたけれども、OpenSSL はすでに入っているようなのですよね。。。
$ docker build -t pc:1 . Sending build context to Docker daemon 2.048kB ... 略 ... penssl is already the newest version (1.1.0f-3+deb9u2). openssl set to manually installed. 0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded. Removing intermediate container 1452c3998c7b ---> aae4dbeccf2c ... 略 ...
気になって、最初の Dockerfile でコンテナ、イメージ、全て削除してからビルドしてやり直して、Composer を動かしてみましたら、再現しませんでした。
よって、apt-get openssl は不要でしょう♪
試行錯誤 2. php-zip が無い
ではうまく行ったかと申しますと、ダメでした><。
PHP 拡張の ZIP が無い、とのことです。
$ docker container run --rm -it pc:1 bash root@e91bb8cebba4:/var/www/html# composer global require "laravel/installer" Changed current directory to /root/.composer Do not run Composer as root/super user! See https://getcomposer.org/root for details Using version ^2.0 for laravel/installer ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - laravel/installer v2.0.1 requires ext-zip * -> the requested PHP extension zip is missing from your system. - laravel/installer v2.0.0 requires ext-zip * -> the requested PHP extension zip is missing from your system. - Installation request for laravel/installer ^2.0 -> satisfiable by laravel/installer[v2.0.0, v2.0.1]. To enable extensions, verify that they are enabled in your .ini files: - - /usr/local/etc/php/conf.d/docker-php-ext-sodium.ini You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode. Installation failed, deleting ./composer.json. root@e91bb8cebba4:/var/www/html#
システムに ZIP があるか、PHP の ZIP はあるか、調べました。
どちらも、ありませんでした。
$ docker container run --rm -it pc:1 bash root@54939e75627f:/var/www/html# dpkg -l zip dpkg-query: no packages found matching zip root@54939e75627f:/var/www/html# php -m | grep zip root@54939e75627f:/var/www/html#
まずは、PHP 拡張の ZIP のみ入れてみます。
From php:apache RUN docker-php-ext-install \ zip RUN curl -s http://getcomposer.org/installer | php && \ echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \ mv composer.phar /usr/local/bin/composer
$ docker image build --no-cache=true -t pc:1 . Sending build context to Docker daemon 14.85kB ... 略 ... checking libzip... no checking for the location of zlib... configure: error: zip support requires ZLIB. Use --with-zlib-dir=<DIR> to specify prefix where ZLIB include and library are located The command '/bin/sh -c docker-php-ext-install zip' returned a non-zero code: 1
ダメでした。ZLIB が足りないようです。
を見て、次のようにしました。
From php:apache RUN apt-get update && apt-get install -y \ zlib1g-dev \ && docker-php-ext-install \ zip \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN curl -s http://getcomposer.org/installer | php && \ echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \ mv composer.phar /usr/local/bin/composer
これで、ビルドしたところ、うまくいきました。確かめてみます。
$ docker container run --rm -it pc:1 bash root@d8654ce3554b:/var/www/html# dpkg -l zip dpkg-query: no packages found matching zip root@d8654ce3554b:/var/www/html# root@d8654ce3554b:/var/www/html# dpkg -l zlib1g-dev Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-=====================================-=======================-=======================-=============================================================================== ii zlib1g-dev:amd64 1:1.2.8.dfsg-5 amd64 compression library - development root@d8654ce3554b:/var/www/html# php -m | grep zip zip root@d8654ce3554b:/var/www/html#
そもそも、dpkg -l zip
ではシステムに ZIP が入っているかどうかはわからないのですね。ですので、今回インストールした zlib1g-dev で確認しました。PHP には、zip が入っています。
また、zip コマンドを試してみたところ、これは入っていませんでした。システムには zip は入っていませんけれども、PHP 拡張としては入ったことになります。
さて、もう一度 Composer を試してみましょう。
$ docker container run --rm -it pc:1 bash root@841b3d1a7cc9:/var/www/html# composer global require "laravel/installer" Changed current directory to /root/.composer Do not run Composer as root/super user! See https://getcomposer.org/root for details Using version ^2.0 for laravel/installer ./composer.json has been created Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 10 installs, 0 updates, 0 removals As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension. This may cause invalid reports of corrupted archives. Installing 'unzip' may remediate them. - Installing symfony/process (v4.1.6): Downloading (100%) - Installing symfony/polyfill-ctype (v1.9.0): Downloading (100%) - Installing symfony/filesystem (v4.1.6): Downloading (100%) - Installing symfony/polyfill-mbstring (v1.9.0): Downloading (100%) - Installing symfony/console (v4.1.6): Downloading (100%) - Installing guzzlehttp/promises (v1.3.1): Downloading (100%) - Installing psr/http-message (1.0.1): Downloading (100%) - Installing guzzlehttp/psr7 (1.4.2): Downloading (100%) - Installing guzzlehttp/guzzle (6.3.3): Downloading (100%) - Installing laravel/installer (v2.0.1): Downloading (100%) symfony/console suggests installing psr/log-implementation (For using the console logger) symfony/console suggests installing symfony/event-dispatcher symfony/console suggests installing symfony/lock guzzlehttp/guzzle suggests installing psr/log (Required for using the Log middleware) Writing lock file Generating autoload files root@841b3d1a7cc9:/var/www/html#
無事、Laravel のインストーラーがインストールできました!やったぜ!
試行錯誤 3. Laravel プロジェクトを作ってみる。
続いて、Laravel プロジェクトを作ってみます。
root@841b3d1a7cc9:/var/www/html# laravel new blog bash: laravel: command not found root@841b3d1a7cc9:/var/www/html#
ダメです。
を見ると、laravle コマンドが使えるように、$PATH
を通してやれば良いようです。インストーラーのインストール時に、
Changed current directory to /root/.composer
とありましたのでここらへんを探せばよいのでしょう。
root@841b3d1a7cc9:/var/www/html# ls -al ~/.composer/vendor/bin total 8 drwxr-xr-x 2 root root 4096 Oct 10 22:55 . drwxr-xr-x 8 root root 4096 Oct 10 22:55 .. lrwxrwxrwx 1 root root 28 Oct 10 22:55 laravel -> ../laravel/installer/laravel root@841b3d1a7cc9:/var/www/html#
ありました! 早速、$PTATH
を通します。
次も参考になりました!
root@841b3d1a7cc9:/var/www/html# echo "export PATH=${PATH}:~/.composer/vendor/bin" >> ~/.bashrc root@841b3d1a7cc9:/var/www/html# source ~/.bashrc root@841b3d1a7cc9:/var/www/html# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/www/vendor/bin:/root/.composer/vendor/bin root@841b3d1a7cc9:/var/www/html#
これで、larabel new コマンドが、次のように使えるようになりました!
root@841b3d1a7cc9:/var/www/html# laravel new blog Crafting application... Do not run Composer as root/super user! See https://getcomposer.org/root for details Loading composer repositories with package information Installing dependencies (including require-dev) from lock file Package operations: 72 installs, 0 updates, 0 removals As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension. This may cause invalid reports of corrupted archives. Installing 'unzip' may remediate them. - Installing doctrine/inflector (v1.3.0): Downloading (100%) - Installing doctrine/lexer (v1.0.1): Downloading (100%) - Installing dragonmantank/cron-expression (v2.2.0): Downloading (100%) - Installing erusev/parsedown (1.7.1): Downloading (100%) - Installing vlucas/phpdotenv (v2.5.1): Downloading (100%) - Installing symfony/css-selector (v4.1.6): Downloading (100%) - Installing tijsverkoyen/css-to-inline-styles (2.2.1): Downloading (100%) - Installing symfony/polyfill-php72 (v1.9.0): Downloading (100%) - Installing symfony/polyfill-mbstring (v1.9.0): Loading from cache - Installing symfony/var-dumper (v4.1.6): Downloading (100%) - Installing symfony/routing (v4.1.6): Downloading (100%) - Installing symfony/process (v4.1.6): Loading from cache - Installing symfony/polyfill-ctype (v1.9.0): Loading from cache - Installing symfony/http-foundation (v4.1.6): Downloading (100%) - Installing symfony/event-dispatcher (v4.1.6): Downloading (100%) - Installing psr/log (1.0.2): Downloading (100%) - Installing symfony/debug (v4.1.6): Downloading (100%) - Installing symfony/http-kernel (v4.1.6): Downloading (100%) - Installing symfony/finder (v4.1.6): Downloading (100%) - Installing symfony/console (v4.1.6): Loading from cache - Installing egulias/email-validator (2.1.6): Downloading (100%) - Installing swiftmailer/swiftmailer (v6.1.3): Downloading (100%) - Installing paragonie/random_compat (v9.99.99): Downloading (100%) - Installing ramsey/uuid (3.8.0): Downloading (100%) - Installing psr/simple-cache (1.0.1): Downloading (100%) - Installing psr/container (1.0.0): Downloading (100%) - Installing opis/closure (3.1.1): Downloading (100%) - Installing symfony/translation (v4.1.6): Downloading (100%) - Installing nesbot/carbon (1.34.0): Downloading (100%) - Installing monolog/monolog (1.23.0): Downloading (100%) - Installing league/flysystem (1.0.47): Downloading (100%) - Installing laravel/framework (v5.7.9): Downloading (100%) - Installing fideloper/proxy (4.0.0): Downloading (100%) - Installing jakub-onderka/php-console-color (v0.2): Downloading (100%) - Installing nikic/php-parser (v4.1.0): Downloading (100%) - Installing jakub-onderka/php-console-highlighter (v0.3.2): Downloading (100%) - Installing dnoegel/php-xdg-base-dir (0.1): Downloading (100%) - Installing psy/psysh (v0.9.8): Downloading (100%) - Installing laravel/tinker (v1.0.7): Downloading (100%) - Installing beyondcode/laravel-dump-server (1.2.2): Downloading (100%) - Installing fzaninotto/faker (v1.8.0): Downloading (100%) - Installing hamcrest/hamcrest-php (v2.0.0): Downloading (100%) - Installing mockery/mockery (1.2.0): Downloading (100%) - Installing filp/whoops (2.2.1): Downloading (100%) - Installing nunomaduro/collision (v2.1.0): Downloading (100%) - Installing webmozart/assert (1.3.0): Downloading (100%) - Installing phpdocumentor/reflection-common (1.0.1): Downloading (100%) - Installing phpdocumentor/type-resolver (0.4.0): Downloading (100%) - Installing phpdocumentor/reflection-docblock (4.3.0): Downloading (100%) - Installing phpunit/php-token-stream (3.0.0): Downloading (100%) - Installing sebastian/version (2.0.1): Downloading (100%) - Installing sebastian/resource-operations (2.0.1): Downloading (100%) - Installing sebastian/recursion-context (3.0.0): Downloading (100%) - Installing sebastian/object-reflector (1.1.1): Downloading (100%) - Installing sebastian/object-enumerator (3.0.3): Downloading (100%) - Installing sebastian/global-state (2.0.0): Downloading (100%) - Installing sebastian/exporter (3.1.0): Downloading (100%) - Installing sebastian/environment (3.1.0): Downloading (100%) - Installing sebastian/diff (3.0.1): Downloading (100%) - Installing sebastian/comparator (3.0.2): Downloading (100%) - Installing phpunit/php-timer (2.0.0): Downloading (100%) - Installing phpunit/php-text-template (1.2.1): Downloading (100%) - Installing phpunit/php-file-iterator (2.0.2): Downloading (100%) - Installing theseer/tokenizer (1.1.0): Downloading (100%) - Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (100%) - Installing phpunit/php-code-coverage (6.0.8): Downloading (100%) - Installing doctrine/instantiator (1.1.0): Downloading (100%) - Installing phpspec/prophecy (1.8.0): Downloading (100%) - Installing phar-io/version (2.0.1): Downloading (100%) - Installing phar-io/manifest (1.0.3): Downloading (100%) - Installing myclabs/deep-copy (1.8.1): Downloading (100%) - Installing phpunit/phpunit (7.4.0): Downloading (100%) symfony/var-dumper suggests installing ext-intl (To show region name in time zone dump) symfony/routing suggests installing doctrine/annotations (For using the annotation loader) symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader) symfony/routing suggests installing symfony/dependency-injection (For loading routes from a service) symfony/routing suggests installing symfony/expression-language (For using expression matching) symfony/routing suggests installing symfony/yaml (For using the YAML loader) symfony/event-dispatcher suggests installing symfony/dependency-injection symfony/http-kernel suggests installing symfony/browser-kit symfony/http-kernel suggests installing symfony/config symfony/http-kernel suggests installing symfony/dependency-injection symfony/console suggests installing symfony/lock egulias/email-validator suggests installing ext-intl (PHP Internationalization Libraries are required to use the SpoofChecking validation) swiftmailer/swiftmailer suggests installing ext-intl (Needed to support internationalized email addresses) swiftmailer/swiftmailer suggests installing true/punycode (Needed to support internationalized email addresses, if ext-intl is not installed) paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.) ramsey/uuid suggests installing ext-libsodium (Provides the PECL libsodium extension for use with the SodiumRandomGenerator) ramsey/uuid suggests installing ext-uuid (Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator) ramsey/uuid suggests installing ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter) ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).) ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid) ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of Ramsey\Uuid\Uuid as Doctrine field type.) symfony/translation suggests installing symfony/config symfony/translation suggests installing symfony/yaml monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB) monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server) monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required)) monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server) monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server) monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver) monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib) monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome) monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar) monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server) monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server) league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2) league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3) league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage) league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching) league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem) league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files) league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib) league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage) league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter) league/flysystem suggests installing spatie/flysystem-dropbox (Allows you to use Dropbox storage) league/flysystem suggests installing srmklive/flysystem-dropbox-v2 (Allows you to use Dropbox storage for PHP 5 applications) laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver and SES mail driver (^3.0).) laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (^2.6).) laravel/framework suggests installing ext-pcntl (Required to use all features of the queue worker.) laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).) laravel/framework suggests installing league/flysystem-aws-s3-v3 (Required to use the Flysystem S3 driver (^1.0).) laravel/framework suggests installing league/flysystem-cached-adapter (Required to use the Flysystem cache (^1.0).) laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (^1.0).) laravel/framework suggests installing league/flysystem-sftp (Required to use the Flysystem SFTP driver (^1.0).) laravel/framework suggests installing moontoast/math (Required to use ordered UUIDs (^1.1).) laravel/framework suggests installing nexmo/client (Required to use the Nexmo transport (^1.0).) laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (^3.0).) laravel/framework suggests installing predis/predis (Required to use the redis cache and queue drivers (^1.0).) laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (^3.0).) laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (^4.1).) laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging features (^1.0).) psy/psysh suggests installing ext-pcntl (Enabling the PCNTL extension makes PsySH a lot happier :)) psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.) psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.) filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses) sebastian/global-state suggests installing ext-uopz (*) phpunit/php-code-coverage suggests installing ext-xdebug (^2.6.0) phpunit/phpunit suggests installing ext-soap (*) phpunit/phpunit suggests installing ext-xdebug (*) phpunit/phpunit suggests installing phpunit/php-invoker (^2.0) Generating optimized autoload files Do not run Composer as root/super user! See https://getcomposer.org/root for details > @php -r "file_exists('.env') || copy('.env.example', '.env');" Do not run Composer as root/super user! See https://getcomposer.org/root for details > @php artisan key:generate --ansi Application key set successfully. Do not run Composer as root/super user! See https://getcomposer.org/root for details > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: beyondcode/laravel-dump-server Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. Application ready! Build something amazing. root@841b3d1a7cc9:/var/www/html#
おや?
As there is no ‘unzip’ command installed zip files are being unpacked using the PHP zip extension.
This may cause invalid reports of corrupted archives. Installing ‘unzip’ may remediate them.
とあります。また ZIP です。
試行錯誤 4. unzip と git をインストールする。
試しにapt-get install unzip
でインストールしてから、もう一度やってみました。今度は laravel new blog2
。
すると、エラーが消えました♪
の System Requirements を見ると、次のようあります。
To install packages from sources instead of simple zip archives, you will need git, svn, fossil or hg depending on how the package is version-controlled.
ということは、もしかして unzip で無くても git があれば、git を使っているパッケージであればよいのでしょう。
試してみましょう。 apt remove unzip
後、apt-get install git
しました。
そして laravel new blog4
などとしてみると、、、
As there is no ‘unzip’ command installed zip files are being unpacked using the PHP zip extension.
は出ました。
ということは、 unzip は composer に必須 、という理解で良さそうです。
そして、もしかしたら必須ではないのかもしれませんが、ドキュメントにも必要になるだろうとありますし、git は加えておこうと思います。
From php:apache RUN apt-get update && apt-get install -y \ git \ unzip \ zlib1g-dev \ && docker-php-ext-install \ zip \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* RUN curl -s http://getcomposer.org/installer | php && \ echo "export PATH=${PATH}:/var/www/vendor/bin" >> ~/.bashrc && \ mv composer.phar /usr/local/bin/composer
次のコマンドで、ビルドし、コンテナに入って確かめてみます。
docker image build --no-cache=true -t pc:1 . docker container run -it --rm pc:1 bash
今度は、composer create-project --prefer-dist laravel/laravel blog
コマンドで Laravel インストールをしてみます。
root@e4938e88ca85:/var/www/html# composer create-project --prefer-dist laravel/laravel blog Do not run Composer as root/super user! See https://getcomposer.org/root for details Installing laravel/laravel (v5.7.0) - Installing laravel/laravel (v5.7.0): Downloading (100%) Created project in blog > @php -r "file_exists('.env') || copy('.env.example', '.env');" Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 72 installs, 0 updates, 0 removals - Installing vlucas/phpdotenv (v2.5.1): Downloading (100%) - Installing symfony/css-selector (v4.1.6): Downloading (100%) - Installing tijsverkoyen/css-to-inline-styles (2.2.1): Downloading (100%) - Installing symfony/polyfill-php72 (v1.9.0): Downloading (100%) - Installing symfony/polyfill-mbstring (v1.9.0): Downloading (100%) - Installing symfony/var-dumper (v4.1.6): Downloading (100%) - Installing symfony/routing (v4.1.6): Downloading (100%) - Installing symfony/process (v4.1.6): Downloading (100%) - Installing symfony/polyfill-ctype (v1.9.0): Downloading (100%) - Installing symfony/http-foundation (v4.1.6): Downloading (100%) - Installing symfony/event-dispatcher (v4.1.6): Downloading (100%) - Installing psr/log (1.0.2): Downloading (100%) - Installing symfony/debug (v4.1.6): Downloading (100%) - Installing symfony/http-kernel (v4.1.6): Downloading (100%) - Installing symfony/finder (v4.1.6): Downloading (100%) - Installing symfony/console (v4.1.6): Downloading (100%) - Installing doctrine/lexer (v1.0.1): Downloading (100%) - Installing egulias/email-validator (2.1.6): Downloading (100%) - Installing swiftmailer/swiftmailer (v6.1.3): Downloading (100%) - Installing paragonie/random_compat (v9.99.99): Downloading (100%) - Installing ramsey/uuid (3.8.0): Downloading (100%) - Installing psr/simple-cache (1.0.1): Downloading (100%) - Installing psr/container (1.0.0): Downloading (100%) - Installing opis/closure (3.1.1): Downloading (100%) - Installing symfony/translation (v4.1.6): Downloading (100%) - Installing nesbot/carbon (1.34.0): Downloading (100%) - Installing monolog/monolog (1.23.0): Downloading (100%) - Installing league/flysystem (1.0.47): Downloading (100%) - Installing erusev/parsedown (1.7.1): Downloading (100%) - Installing dragonmantank/cron-expression (v2.2.0): Downloading (100%) - Installing doctrine/inflector (v1.3.0): Downloading (100%) - Installing laravel/framework (v5.7.9): Downloading (100%) - Installing fideloper/proxy (4.0.0): Downloading (100%) - Installing nikic/php-parser (v4.1.0): Downloading (100%) - Installing jakub-onderka/php-console-color (v0.2): Downloading (100%) - Installing jakub-onderka/php-console-highlighter (v0.3.2): Downloading (100%) - Installing dnoegel/php-xdg-base-dir (0.1): Downloading (100%) - Installing psy/psysh (v0.9.8): Downloading (100%) - Installing laravel/tinker (v1.0.7): Downloading (100%) - Installing beyondcode/laravel-dump-server (1.2.2): Downloading (100%) - Installing fzaninotto/faker (v1.8.0): Downloading (100%) - Installing hamcrest/hamcrest-php (v2.0.0): Downloading (100%) - Installing mockery/mockery (1.2.0): Downloading (100%) - Installing filp/whoops (2.2.1): Downloading (100%) - Installing nunomaduro/collision (v2.1.0): Downloading (100%) - Installing sebastian/version (2.0.1): Downloading (100%) - Installing sebastian/resource-operations (2.0.1): Downloading (100%) - Installing sebastian/object-reflector (1.1.1): Downloading (100%) - Installing sebastian/recursion-context (3.0.0): Downloading (100%) - Installing sebastian/object-enumerator (3.0.3): Downloading (100%) - Installing sebastian/global-state (2.0.0): Downloading (100%) - Installing sebastian/exporter (3.1.0): Downloading (100%) - Installing sebastian/environment (3.1.0): Downloading (100%) - Installing sebastian/diff (3.0.1): Downloading (100%) - Installing sebastian/comparator (3.0.2): Downloading (100%) - Installing phpunit/php-timer (2.0.0): Downloading (100%) - Installing phpunit/php-text-template (1.2.1): Downloading (100%) - Installing phpunit/php-file-iterator (2.0.2): Downloading (100%) - Installing theseer/tokenizer (1.1.0): Downloading (100%) - Installing sebastian/code-unit-reverse-lookup (1.0.1): Downloading (100%) - Installing phpunit/php-token-stream (3.0.0): Downloading (100%) - Installing phpunit/php-code-coverage (6.0.8): Downloading (100%) - Installing doctrine/instantiator (1.1.0): Downloading (100%) - Installing webmozart/assert (1.3.0): Downloading (100%) - Installing phpdocumentor/reflection-common (1.0.1): Downloading (100%) - Installing phpdocumentor/type-resolver (0.4.0): Downloading (100%) - Installing phpdocumentor/reflection-docblock (4.3.0): Downloading (100%) - Installing phpspec/prophecy (1.8.0): Downloading (100%) - Installing phar-io/version (2.0.1): Downloading (100%) - Installing phar-io/manifest (1.0.3): Downloading (100%) - Installing myclabs/deep-copy (1.8.1): Downloading (100%) - Installing phpunit/phpunit (7.4.0): Downloading (100%) symfony/var-dumper suggests installing ext-intl (To show region name in time zone dump) symfony/routing suggests installing doctrine/annotations (For using the annotation loader) symfony/routing suggests installing symfony/config (For using the all-in-one router or any loader) symfony/routing suggests installing symfony/dependency-injection (For loading routes from a service) symfony/routing suggests installing symfony/expression-language (For using expression matching) symfony/routing suggests installing symfony/yaml (For using the YAML loader) symfony/event-dispatcher suggests installing symfony/dependency-injection symfony/http-kernel suggests installing symfony/browser-kit symfony/http-kernel suggests installing symfony/config symfony/http-kernel suggests installing symfony/dependency-injection symfony/console suggests installing symfony/lock egulias/email-validator suggests installing ext-intl (PHP Internationalization Libraries are required to use the SpoofChecking validation) swiftmailer/swiftmailer suggests installing ext-intl (Needed to support internationalized email addresses) swiftmailer/swiftmailer suggests installing true/punycode (Needed to support internationalized email addresses, if ext-intl is not installed) paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.) ramsey/uuid suggests installing ircmaxell/random-lib (Provides RandomLib for use with the RandomLibAdapter) ramsey/uuid suggests installing ext-libsodium (Provides the PECL libsodium extension for use with the SodiumRandomGenerator) ramsey/uuid suggests installing ext-uuid (Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator) ramsey/uuid suggests installing moontoast/math (Provides support for converting UUID to 128-bit integer (in string form).) ramsey/uuid suggests installing ramsey/uuid-doctrine (Allows the use of Ramsey\Uuid\Uuid as Doctrine field type.) ramsey/uuid suggests installing ramsey/uuid-console (A console application for generating UUIDs with ramsey/uuid) symfony/translation suggests installing symfony/config symfony/translation suggests installing symfony/yaml monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB) monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server) monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required)) monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server) monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server) monolog/monolog suggests installing mongodb/mongodb (Allow sending log messages to a MongoDB server via PHP Driver) monolog/monolog suggests installing php-amqplib/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib) monolog/monolog suggests installing php-console/php-console (Allow sending log messages to Google Chrome) monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar) monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server) monolog/monolog suggests installing sentry/sentry (Allow sending log messages to a Sentry server) league/flysystem suggests installing league/flysystem-aws-s3-v2 (Allows you to use S3 storage with AWS SDK v2) league/flysystem suggests installing league/flysystem-aws-s3-v3 (Allows you to use S3 storage with AWS SDK v3) league/flysystem suggests installing league/flysystem-azure (Allows you to use Windows Azure Blob storage) league/flysystem suggests installing league/flysystem-cached-adapter (Flysystem adapter decorator for metadata caching) league/flysystem suggests installing league/flysystem-eventable-filesystem (Allows you to use EventableFilesystem) league/flysystem suggests installing league/flysystem-rackspace (Allows you to use Rackspace Cloud Files) league/flysystem suggests installing league/flysystem-sftp (Allows you to use SFTP server storage via phpseclib) league/flysystem suggests installing league/flysystem-webdav (Allows you to use WebDAV storage) league/flysystem suggests installing league/flysystem-ziparchive (Allows you to use ZipArchive adapter) league/flysystem suggests installing spatie/flysystem-dropbox (Allows you to use Dropbox storage) league/flysystem suggests installing srmklive/flysystem-dropbox-v2 (Allows you to use Dropbox storage for PHP 5 applications) laravel/framework suggests installing aws/aws-sdk-php (Required to use the SQS queue driver and SES mail driver (^3.0).) laravel/framework suggests installing doctrine/dbal (Required to rename columns and drop SQLite columns (^2.6).) laravel/framework suggests installing ext-pcntl (Required to use all features of the queue worker.) laravel/framework suggests installing guzzlehttp/guzzle (Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).) laravel/framework suggests installing league/flysystem-aws-s3-v3 (Required to use the Flysystem S3 driver (^1.0).) laravel/framework suggests installing league/flysystem-cached-adapter (Required to use the Flysystem cache (^1.0).) laravel/framework suggests installing league/flysystem-rackspace (Required to use the Flysystem Rackspace driver (^1.0).) laravel/framework suggests installing league/flysystem-sftp (Required to use the Flysystem SFTP driver (^1.0).) laravel/framework suggests installing moontoast/math (Required to use ordered UUIDs (^1.1).) laravel/framework suggests installing nexmo/client (Required to use the Nexmo transport (^1.0).) laravel/framework suggests installing pda/pheanstalk (Required to use the beanstalk queue driver (^3.0).) laravel/framework suggests installing predis/predis (Required to use the redis cache and queue drivers (^1.0).) laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (^3.0).) laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (^4.1).) laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging features (^1.0).) psy/psysh suggests installing ext-pcntl (Enabling the PCNTL extension makes PsySH a lot happier :)) psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.) psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.) filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses) sebastian/global-state suggests installing ext-uopz (*) phpunit/php-code-coverage suggests installing ext-xdebug (^2.6.0) phpunit/phpunit suggests installing phpunit/php-invoker (^2.0) phpunit/phpunit suggests installing ext-soap (*) phpunit/phpunit suggests installing ext-xdebug (*) Writing lock file Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover Discovered Package: beyondcode/laravel-dump-server Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. > @php artisan key:generate Application key set successfully. root@e4938e88ca85:/var/www/html#
うまくいきました。
これでおしまいです。
おわりに
PHP の環境を整えて、Larvel を自由に使いたいのですけれども、Composer 一つとっても考えるべきことが多いです。
一つづつ理解していこうと思います。
以上です。