ども、シローです。
今回は、DockerでApache+PHP+MySQLの環境を構築したので、サンプルリポジトリも含めてご紹介します。
それにしてもDockerいいですね〜、他の人でも簡単に再現できるというのが良い
サンプルプロジェクト
実際に作成したサンプルはこちら=> (https://github.com/smithshiro/docker-tohu-env)
Tohu ENVという名前ですが、豆腐はTofuらしいですね笑
名前の由来は豆腐を最近食べているから、それ以上でもそれ以下でもない。
環境構築した後でもサンプルコードで次のようなページを開いてフォームの送信などでDBとの疎通を確認できます。
フレームワークとか一切使ってないっす
環境
ApacheとかPHPとかMySQLの環境
Apache | 2.4.38 (Debian) |
PHP | 7.4.20 |
MySQL | 5.7.33 |
そんな古くはないと思う(2021-06-08)
インストール+立ち上げ
プロジェクトをgit clone
でインストール
$ git clone git@github.com:smithshiro/docker-tohu-env.gi
1 |
$ git clone https://github.com/smithshiro/docker-tohu-env.git |
プロジェクトに入ってdocker-compose up
で立ち上げ(僕は-d
をつけない派、Ctrl+cですぐ閉じれるので)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ cd docker-tohu-env $ docker-compose up Docker Compose is now in the Docker CLI, try `docker compose up` Creating network "docker-tohu-env_default" with the default driver Building db [+] Building 0.2s (11/11) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 231B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/mysql:5.7 0.0s => [1/6] FROM docker.io/library/mysql:5.7 0.0s => [internal] load build context 0.0s => => transferring context: 732B 0.0s => CACHED [2/6] RUN apt-get update .... app_1 | 172.21.0.1 - - [08/Jun/2021:13:25:19 +0000] "GET / HTTP/1.1" 200 1306 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" app_1 | 172.21.0.1 - - [08/Jun/2021:13:25:19 +0000] "GET / HTTP/1.1" 200 1298 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" app_1 | 172.21.0.1 - - [08/Jun/2021:13:25:21 +0000] "GET / HTTP/1.1" 200 1306 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36" app_1 | 172.21.0.1 - - [08/Jun/2021:13:26:01 +0000] "-" 408 0 "-" "-" ^CGracefully stopping... (press Ctrl+C again to force) Stopping docker-tohu-env_app_1 ... done Stopping docker-tohu-env_db_1 ... done |
このようにプロセスが立ち上がっているはず
1 2 3 4 5 |
$ docker-compose ps Name Command State Ports --------------------------------------------------------------------------------------------------- docker-tohu-env_app_1 docker-php-entrypoint apac ... Up 0.0.0.0:18080->80/tcp docker-tohu-env_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:13306->3306/tcp, 33060/tcp |
ブラウザで(http://localhost:18080)で開いてサンプルページが表示されればOK
解説など
このサンプルについてつらつらとまとめます〜
Apache+PHPのDockerリポジトリについて
phpのリポジトリに-apache
をつけるとapache+phpの環境になるぽいですね、公式 (https://hub.docker.com/_/php)
1 2 3 4 5 6 7 8 9 |
FROM 'php:7.4-apache' RUN apt-get update RUN set -ex apk --no-cache add postgresql-dev libpq-dev RUN apt-get install -y vim htop libpq-dev libonig-dev RUN docker-php-ext-install mbstring pdo_mysql opcache COPY ./conf/httpd.conf /usr/local/apache2/conf/ COPY ./conf/php.ini /usr/local/etc/php/ |
動かしてみて、追加の拡張が必要なときなこのファイル(docker/apache/Dockerfile)をいじれば良いです。
設定ファイルとしては、Apacheの設定(httpd.conf)とPHPの設定(php.ini 空っぽだけど)を編集すれば良いです。
MySQLのリポジトリについて
mycli
というコマンドが便利なので、それが使えるようにしています。mycli => (https://www.mycli.net/)
1 2 3 4 5 6 7 8 |
FROM 'mysql:5.7' RUN apt-get update RUN apt install -y python-pip python3-pip RUN pip3 install mycli COPY ./conf/my.cnf /etc/mysql/conf.d/my.cnf COPY ./init /docker-entrypoint-initdb.d |
my.cnf(docker/db/conf/my.cnf)というファイルを編集してDBに関する設定を変更できます。
初期データを追加したりなどはdocker/db/init/
配下にSQLファイルをセットすれば、立ち上げ時に実行してくれます。
データベースの実態はdocker/db/data
の中に入ってます。もちろんgitでは管理してません。
空ディレクトリをリポジトリに加える場合はディレクトリ内に.gitkeep
を作成して、リポジトリ配下のファイルをイグノアーすればいいようです。
まとめ
- Apache+PHPのDockerリポジトリは
php:(version)-apache
である - Apacheの設定ファイル、PHPの設定ファイルは立ち上げ時に反映できるようにしたほうがいい
- MySQLのリポジトリは
my.cnf
で立ち上げ時に反映できるようにしたほうがいい - 豆腐はTofu
よかったら使ってくださいね〜
本書では、技術者だけでなく、IT基盤の方向性の検討や戦略の立案、意思決定を行う立場の方が、導入前の検討を実践できる内容を盛り込みました。具体的には、コンテナの特徴、導入時の検討項目、注意点などのチェックリストを設け、システム構成例などを解説図にまとめ、要点を把握しやすいようにしました。また、大規模データセンター向けのコンテナ基盤構築の経験がない技術者でも、その基礎を理解できるよう、Dockerのインストール手順、使用法などを具体的に記載しています。