DOCKERでCMDコマンドを仕込んでみる。 | 自分、ぼっちですが何か? (taki-lab.site)
Dockerは1アプリケーション1コンテナというのが基本的な使い方らしいです。
今回はPHP+DBという構成を構築してみたいと思います。
こういった複数をアプリ(コンテナ)をセットで扱いたい場合は、docker-composeを使用します。
プロジェクト構成
PHPはDockerファイルで、DBはDockerHubで用意されている物を使用します。
Dockerfile
FROM php:7.4-apache
RUN apt-get update && apt-get install -y \
tzdata \
libpq-dev \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-install pdo_pgsql
ENV TZ=Asia/Tokyo
php.ini
[Date]
date.timezone = Asia/Tokyo
[mbstring]
mbstring.language = Japanese
sample1.php
<?php
print('ただいまの日時は、'.date("Y-m-d H:i:s").'です。<br>');
$dbname='postgres';
$host='ex11_db';
$dbuser='postgres';
$dbpass='postgres';
try {
$dbh = new PDO("pgsql:dbname=$dbname;host=$host", $dbuser, $dbpass);
print('正常に接続されました。<br>');
print('sysid, ユーザー名<br>');
$sql = 'SELECT * FROM pg_user';
foreach ($dbh->query($sql) as $row) {
print($row['usesysid'].', ');
print($row['usename'].'<br>');
}
} catch (PDOException $e) {
print('エラー:'.$e->gwtMessage());
exit();
}
?>
docker-compose.yml
version: '3.8'
services:
db:
image: postgres:13.1-alpine
container_name: 'ex11_db'
expose:
- "5432"
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- HOGE=hoge
web:
image: ex11/web:1.0
build: ./web
container_name: 'ex11_web'
ports:
- 8080:80
working_dir: '/var/www/html'
volumes:
- ./web/php.ini:/usr/local/etc/php/php.ini
- type: bind
source: ./web/src
target: /var/www/html
depends_on:
- db
~/dockerenv/ex11$ docker-compose up
~/dockerenv/ex11$ docker-compose down --rmi all