# Composer の情報を表示 docker run --rm -it -v $PWD:/app composer:latest composer # Comoser の実行場所がホストの指定場所となっているかを、共有場所の一覧を表示することで確認 docker run --rm -it -v $PWD:/app composer:latest ls -al
月: 2018年10月
はじめに
php:7.2-apache をビルドするときに、 DocumentRoot を設定していました。特に疑問に感じていませんでしたけれどもあるとき、さまざまな Docker イメージを見ていると設定は build 時ではなく、 run 時に環境変数で設定していることに気が付きました。
DocumentRoot も run 時に設定したいと思いました。
そうするためには、次の手順で実現できると思いました。
- Dockerfile で行っていた設定ファイルの COPY を、不要ならやめる。
- docker-compose run 時に volumes で設定ファイルのディレクトリを共有することでコンテナに設定ファイルを渡してやる。
- コンテナに渡す設定ファイルの必要項目を変数化して run 時に埋め込む。
上記の方法のうち、 1. と 2. は簡単です。 3. が難しかったです><。
今回、応急処置的な一時しのぎ的なワークアラウンドではありますけれども、汎用的で Linux コマンドの勉強になりましたので、解決するまでの道筋を順番に記録に残していこうと思います。
まとめ
[mysql] default-character-set=utf8mb4 [mysqld] character_set_server=utf8mb4 collation-server=utf8mb4_bin
- [mysql] の default-character-set=utf8mb4 で変更される項目
- character_set_client: latin1 -> utf8mb4
- character_set_connection: latin1 -> utf8mb4
- character_set_results: latin1 -> utf8mb4
- [mysqld] の character_set_server=utf8mb4 で変更される項目
- character_set_database: utf8mb4 -> utf8mb4
- character_set_server: utf8mb4 -> utf8mb4
- [mysqld] の collation-server=utf8mb4_bin で変更される項目
- collation_database: utf8mb4_0900_ai_ci -> utf8mb4_bin
まとめ
FROM debian:stretch-slim
なイメージはこれで OK でした。
例えば、今回設定したのは次です。
- php:apache
- mysql:latest
FROM mysql:latest ARG TZ=UTC ENV TZ ${TZ} RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone COPY ./config-file.cnf /etc/mysql/conf.d/
${TZ} は、docker-compose.yml で定義しました。args と environment です。
${WORKSPACE_TIMEZONE} は、.env ファイルで定義しています。
services: php_apache: build: context: ./php_apache args: TZ: ${WORKSPACE_TIMEZONE} environment: - TZ=${WORKSPACE_TIMEZONE} ... 略 ...
まとめ。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
PHP で OpenSSL をインストールする Dockerfile
From php:apache RUN apt-get update && apt-get install -y \ libssl-dev \ openssl \ ssl-cert \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* \ && a2enmod ssl \ && a2ensite default-ssl
注意点
Laradock で編集必要な点まとめ
cp env-example .env
すること- .env の、APP_CODE_PATH_HOST を編集すること
前提
次のアプリが使用可能なこと
- Git
- Docker
- Composer
Laradock で環境構築したい Laravel プロジェクト概要
- samplelaravel ディレクトリを作り、その中で作業する。
- Laravel プロジェクト名を、SampleProject とする。
- Laravel 5.4.36
- MySQL 8.0.12
使ったもの
- CodeIgniter3
- bootstrap-fileinput 4.4.9
- Bootstrap 3.3.7
- jQuery 3.2.1
作ったサンプルの内容
- できること
- ページ初期表示時にサーバのファイルを表示
- bootstrap-fileinput 部分のアップロードボタンでファイルをアップロードする
- 各ファイルの削除ボタンでサーバのファイルを削除する
- できないこと
- フォームの Submit で他の input のデータと共にファイルをアップロードする
引き継ぐもの
- 旧 iPhone: iPhone 6s Plus
- 新 iPhone: iPhone XS