Memo

メモ > サーバ > 各論: Docker > まとめ

■まとめ
PHP+MySQLの環境を作る例 ■ファイルの作成 C:\Users\refirio\docker\ 内に以下を作成するとする apache_php8_mysql\html\index.php
<?php phpinfo() ?>
apache_php8_mysql\docker\mysql\Dockerfile
FROM mysql:5.7
apache_php8_mysql\docker\mysql\my.cnf
[mysqld] character-set-server=utf8
apache_php8_mysql\docker\php\Dockerfile
FROM php:8.1-apache RUN apt-get update RUN apt-get install -y libonig-dev RUN docker-php-ext-install pdo_mysql mysqli mbstring
apache_php8_mysql\docker\php\php.ini
date.timezone = Asia/Tokyo
apache_php8_mysql\docker-compose.yml
version: '3' networks: compose_network: volumes: compose_mysql_data: services: mysql: container_name: mysql volumes: - ./docker/mysql/my.cnf:/etc/mysql/conf.d/my.cnf:ro - compose_mysql_data:/var/lib/mysql:rw environment: TZ: Asia/Tokyo MYSQL_ROOT_PASSWORD: rootpass MYSQL_USER: user MYSQL_PASSWORD: userpass MYSQL_DATABASE: test networks: - compose_network build: ./docker/mysql php: container_name: php volumes: - ./docker/php/php.ini:/usr/local/etc/php/conf.d/php.ini:ro - ./:/var/www:rw environment: TZ: Asia/Tokyo ports: - 80:80 networks: - compose_network build: ./docker/php
■設定の上書き docker-compose.yml と同じ階層に docker-compose.override.yml を置くと、その設定内容が優先される 以下の場合、MySQLのユーザ情報が「user / userpass」から「test / testpass」に変更される apache_php8_mysql\docker-compose.override.yml
version: '3' services: mysql: environment: MYSQL_USER: test MYSQL_PASSWORD: testpass
■よく使用するコマンド
$ cd docker/apache_php8_mysql $ docker-compose build … ビルドする場合(構成を変更した場合など) $ docker-compose up -d … 起動 $ docker-compose down … 終了 $ docker container exec -it php bash … phpコンテナのターミナルに接続する場合 $ docker container exec -it mysql bash … mysqlコンテナのターミナルに接続する場合 $ mysql -u root -p … MySQLに接続 $ docker volume ls ... ボリュームを確認 $ docker volume rm compose_mysql_data ... ボリュームを削除
■ブラウザからのアクセス http://127.0.0.1/ また以下のようなコードで、PHPからMySQLに接続できる エラーになる場合、mysqlコンテナの起動が完了していない可能性があるので待つ
<?php try { $pdo = new PDO( 'mysql:dbname=test;host=mysql', 'test', 'testpass' ); $stmt = $pdo->query('SELECT NOW() AS now;'); $data = $stmt->fetch(PDO::FETCH_ASSOC); echo "<p>" . $data['now'] . "</p>\n"; $pdo = null; } catch (PDOException $e) { exit($e->getMessage()); }

Advertisement