Docker ComposeでLAMPの環境を作ってみる

Windowsの適当なディレクトリ上に

  • html/index.php
  • Vagrantfile
  • Dockerfile
  • docker-compose.yml

のファイルを作成。

Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.network "forwarded_port", guest: 80, host: 80
  config.vm.synced_folder ".", "/vagrant", type:"virtualbox"
  config.vm.provision :docker
  config.vm.provision :docker_compose, yml: "/vagrant/docker-compose.yml", run: "always"
end

Dockerfile

FROM php:apache
RUN apt-get update
RUN docker-php-ext-install pdo_mysql
WORKDIR /var/www/html
EXPOSE 80

docker-compose.php

version: '3'
services:
  hoge-app:
    build: .
    image: hoge-img
    ports:
      - 80:80
    volumes:
      - /vagrant/html:/var/www/html
  hoge-db:
    image: mysql
    ports:
      - 3306:3306
    volumes:
      - hoge-vol:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: hogehoge
volumes:
  hoge-vol:

hoge/index.php

<?php
$pdo = new PDO('mysql:dbname=hoge;host=hoge-db;charset=utf8mb4', 'root', 'hogehoge');
$stmt = $pdo->query('SELECT * FROM hoge_tbl');
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($data as $row) {
    print_r($row);
}

Vagrantで起動。

> vagrant up
> vagrant ssh

MySQLでテーブルを作成し、データを入れる。

$ cd /vagrant
$ docker-compose exec hoge-db mysql -u root -p
Enter password: hogehoge

mysql> CREATE DATABASE hoge;
mysql> USE hoge;
mysql> CREATE TABLE hoge_tbl (id INT, name TEXT);
mysql> INSERT INTO hoge_tbl VALUES (1, 'aaa');
mysql> \q

ブラウザからアクセスすると、テーブルのデータが取得できている。 f:id:yk5656:20210131143655j:plain