Memo

メモ > サーバ > 各論: Docker > その他の環境構築例

■その他の環境構築例
■nginx+PHP7(Laravelの使用例) ※Laradockによる開発環境構築は「Laradockによる開発環境構築」を参照 ※あらかじめ、nginx+PHP7でURLルーティングありで http://127.0.0.1/ にアクセスできるところまで構築しておく phpコンテナで作業(nginxコンテナではPHPを使えない)
$ docker container exec -it php bash
Programming.txt の内容をもとに、Composerをインストール&動作確認
# composer
さらに関連ツールをインストール
# apt-get install git # apt-get install zip unzip
上記作業はDockerを再起動しても保持されていたが、いったん停止してから起動すると消えていた docker/php/Dockerfile に記載しておく方が良さそう(要検証) composerでLaravelをインストール create-projectを実行した際
Do not run Composer as root/super user! See https://getcomposer.org/root for details
と表示されるが、開発環境なので気にせず進めた(しばらく放置すると進んだ)
# mkdir /var/www/vhosts # cd /var/www/vhosts # composer create-project --prefer-dist laravel/laravel blog
インストール完了後、ドキュメントルートをLaravelのものに変更 C:\Users\Refirio\docker\laravel\docker\nginx\nginx.conf
root /var/www/html; ↓ root /var/www/vhosts/blog/public;
Dockerを再起動
# exit $ docker-compose restart
以下にアクセスすると、Laravelの画面が表示される http://127.0.0.1/ 以降は動作確認。要点のみ 日本語化などを試す
$ docker container exec -it php bash # cd ../blog # composer require laravel-ja/comja5 # vendor/bin/comja5 # vendor/bin/comja5 -c # vendor/bin/comja5 -f
データベースへのアクセスを試す。あらかじめ、mysqlコンテナ側でデータベースを作成し、userがアクセスできるようにしておく
$ docker container exec -it mysql bash > CREATE DATABASE `laravel-blog` CHARACTER SET utf8mb4; > GRANT ALL PRIVILEGES ON `laravel-blog`.* TO user IDENTIFIED BY 'userpass';
phpコンテナからマイグレーションを試す
$ docker container exec -it php bash # php artisan migrate
Laravelの基本機能は使えているみたい はじめてのLaravel5+Docker - Qiita https://qiita.com/kukimo/items/c044ad42fffac062e2f5 以下も参考になりそう 最強のLaravel開発環境をDockerを使って構築する【新編集版】 - Qiita https://qiita.com/ucan-lab/items/5fc1281cd8076c8ac9f4 ■PHP+PostgreSQL C:\Users\refirio\docker\ 内に以下を作成するとする apache_php8_postgresql\html\index.php
<?php phpinfo() ?>
apache_php8_postgresql\docker\php\Dockerfile
FROM php:8.1-apache RUN apt-get update RUN apt-get install -y libonig-dev libpq-dev RUN docker-php-ext-install pdo_pgsql mbstring
apache_php8_postgresql\docker\php\php.ini
date.timezone = Asia/Tokyo
apache_php8_postgresql\docker\postgresql\Dockerfile
FROM postgres:9.2
apache_php8_postgresql\docker-compose.yml
version: '3' networks: compose_network: volumes: compose_postgresql_data: services: postgresql: container_name: postgresql volumes: - compose_postgresql_data:/var/lib/postgresql/data:rw environment: TZ: Asia/Tokyo POSTGRES_USER: user POSTGRES_PASSWORD: userpass POSTGRES_DB: test networks: - compose_network build: ./docker/postgresql 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
以下のように起動する
$ cd docker/apache_php8_postgresql $ docker-compose build … ビルドする場合(構成を変更した場合など) $ docker-compose up -d … 起動 $ docker-compose down … 終了 $ docker container exec -it php bash … phpコンテナのターミナルに接続する場合 $ docker container exec -it postgresql bash … postgresqlコンテナのターミナルに接続する場合 root@bca889e7662a:/# psql -U user test … PostgreSQLに接続(「psql -l」だと「role "root" does not exist」というエラーになる) psql (9.2.23) Type "help" for help. test=# CREATE TABLE test(no INT, name TEXT); test=# INSERT INTO test VALUES(1, 'Taro'); test=# INSERT INTO test VALUES(2, 'Hanako'); test=# SELECT * FROM test LIMIT 100; no | name ----+-------- 1 | Taro 2 | Hanako (2 rows) test=# \q
http://127.0.0.1/ 以下のようなコードで、PHPからPostgreSQLに接続できる エラーになる場合、postgresqlコンテナの起動が完了していない可能性があるので待つ
<?php try { $pdo = new PDO( 'pgsql:dbname=test;host=postgresql', 'user', 'userpass' ); $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()); }
PHPからPostgreSQLに接続し、以下のコードで動作確認を行う
CREATE TABLE test(no INT, name TEXT); INSERT INTO test VALUES(1, '山田タロウ'); INSERT INTO test VALUES(2, '山田ハナコ'); SELECT * FROM test;
[備忘録]Dockerでapache+php+postgresql環境 - Qiita https://qiita.com/cyclon2joker/items/39e620d3d16fa1f6edf0 ■nginx+Node.js C:\Users\refirio\docker\ 内に以下を作成するとする (common.css はテストで作成しているのみで、他から参照されていない。node.jsからMySQLへの接続は未確認) nginx_node\html\css\common.css
@charset "utf-8"; body { line-height: 1.4; margin: 0 auto; padding: 10px 20px; background-color: #FFFFFF; color: #000000; font-size: 80%; font-family: "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", "メイリオ", Meiryo, "MS Pゴシック", sans-serif; }
nginx_node\docker\mysql\Dockerfile
FROM mysql:5.7
nginx_node\docker\mysql\my.cnf
[mysqld] character-set-server=utf8
nginx_node\docker\nginx\Dockerfile
FROM nginx:1.12
nginx_node\docker\nginx\nginx.conf
server { listen 80 default_server; server_name _; index index.php index.html; root /var/www/html; sendfile off; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://node:3000/; } location ~ .*\.(jpg|JPG|gif|GIF|png|PNG|swf|SWF|css|CSS|js|JS|inc|INC|ico|ICO) { } }
nginx_node\docker\node\Dockerfile
FROM node:8.4
nginx_node\docker\node\server.js
const http = require('http'); const port = 3000; http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World!\n'); }).listen(port); console.log('Server running at port ' + port + '.');
nginx_node\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 node: container_name: node volumes: - ./docker/node:/var/nodeapp:rw command: node /var/nodeapp/server.js environment: TZ: Asia/Tokyo PORT: 3000 ports: - 3000:3000 networks: - compose_network build: ./docker/node nginx: container_name: nginx volumes: - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/nginx.conf:ro - ./:/var/www:rw environment: TZ: Asia/Tokyo ports: - 80:80 networks: - compose_network build: ./docker/nginx
以下のように起動する
$ cd docker/nginx_node/docker $ docker-compose build $ docker-compose up -d
http://127.0.0.1:3000/ ... node.js http://127.0.0.1/ ... nginx経由でnode.js ■Node.js(Docker Compose なしで単体起動する場合) dockerコンテナ上でnode.jsのサーバを起動し、ホスト端末からアクセスする - Qiita https://qiita.com/hotdrop_77/items/a2ca316c97ba4b748d9a docker\node\server.js
const http = require('http'); const port = 3000; http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World.\n'); }).listen(port); console.log('Server running at port ' + port + '.');
以下のように起動する
$ docker container run -v docker/node:/var/nodeapp -p 3000:3000 -it node:8.4.0 /bin/bash # node /var/nodeapp/server.js
http://127.0.0.1:3000/ でアクセスできる
# node /var/nodeapp/server.js
の代わりに以下も有効?
# cd /var/nodeapp # node server.js & curl localhost:3000 # exit $ docker container rm -f $(docker container ls -a -q)
上記手順で起動できた 以下は本番環境での稼働手順の参考に AWS EC2でNodeを動作させる - Qiita https://qiita.com/oishihiroaki/items/bc663eb1282d87c46e97

Advertisement