構成
service | version |
---|---|
PHP | 7.1-fpm |
CodeIgniter | 3.1.0 |
Nginx | 1.11.5 |
MariaDB | 10.1.18 |
Memcached | 1.4.32 |
Redis | 3.0.7 |
phpMyAdmin | 4.6.4 |
ソーシャルゲーム開発においてよくある構成です
インストールから起動まで
私のリポジトリに
docker用にdatabase.phpを少し変更しただけのプロジェクトがあるのでクローンしてください。
※下で解説します
# git clone
$ git clone git@github.com:wMETAw/php7codeigniter-on-docker.git
# cd docker-compose.ymlがあるディレクトリ
$ docker-compose build
$ docker-compose up -d
phpMyAdminへアクセスし、db1
を作成
http://0.0.0.0:8888/
welcomeページにアクセス http://0.0.0.0:8080/welcome/index
memchaheとredisの接続確認
Welcomeコントローラーのコメントアウトを以下のように外す
public function index()
{
// mariaDB接続確認
// var_dump($this->load->database());
// redis接続・確認
$this->load->driver("cache", array('adapter' => 'redis', 'key_prefix' => 'app_'));
$this->cache->redis->save('key', 100);
var_dump($this->cache->redis->get('key'));
// var_dump($this->cache->is_supported('redis'));
// var_dump($this->cache->cache_info());
// memcached接続・確認
$this->load->driver("cache", array('adapter' => 'memcached', 'key_prefix' => 'app_'));
$this->cache->memcached->save('key', 200);
var_dump($this->cache->memcached->get('key'));
// var_dump($this->cache->memcached->is_supported("memcached"));
$this->load->view('welcome_message');
}
5分以内に開発環境を構築できます!!
解説
docker-compose.yml
# dataコンテナ
datastore:
build: ./datastore
# nginx 1.11.5
nginx:
build: ./nginx
ports:
- "8080:80"
links:
- php
volumes_from:
- datastore
# php:7.1-fpm
php:
build: ./php
# 別コンテナのエイリアスを設定 (リンク)
links:
- mariadb
- redis
- memcached
# [ホスト]:[コンテナ] ホストのディレクトリ以下をコンテナのパスにマウント
volumes:
- ./php/:/var/www/html/
# mariadb
mariadb:
image: mariadb:10.1
# 環境変数
environment:
MYSQL_ROOT_PASSWORD: password
expose:
- '3306'
volumes_from:
- datastore
# redis
redis:
image: redis:3.0.7
expose:
- '6379'
volumes_from:
- datastore
# memcached
memcached:
image: memcached:1.4.32
expose:
- '11211'
# phpmyadmin
phpmyadmin:
image: phpmyadmin/phpmyadmin:4.6.4-1
ports:
- "8888:80"
links:
- mariadb
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mariadb
- PMA_USER=root
- PMA_PASSWORD=password
image: memcached:1.4.32
上記のように公式のイメージからバージョンを指定してビルドしているパターンと
build: ./nginx
自前のDcokerfileからイメージをビルドしているパターンがあります
phpフォルダ以下のDockerfile
FROM php:7.1-fpm
MAINTAINER YamadaTaro <yamada@mail.com>
# mysql
RUN docker-php-ext-install mysqli
# redis
RUN docker-php-source extract \
&& curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/3.0.0.tar.gz \
&& tar xfz /tmp/redis.tar.gz \
&& rm -r /tmp/redis.tar.gz \
&& mv phpredis-3.0.0 /usr/src/php/ext/redis \
&& docker-php-ext-install redis
# memcached
RUN apt-get update && apt-get install -y libmemcached-dev zlib1g-dev
RUN curl -L -o /tmp/memcached.tar.gz https://github.com/php-memcached-dev/php-memcached/archive/php7.tar.gz \
&& tar xfz /tmp/memcached.tar.gz \
&& rm -r /tmp/memcached.tar.gz \
&& mv php-memcached-php7 /usr/src/php/ext/memcached \
&& docker-php-ext-install memcached
CodeIgniterでのredisとmemcachedのdriver用に解凍してインストールしています
nginx
# nginx ver1.11.5
FROM nginx:1.11.5
# 作成者
MAINTAINER YamadaTaro <yamada@mail.com>
# 起動するnginxコンテナの指定パスにserver.confをコピー
COPY server.conf /etc/nginx/conf.d/server.conf
server {
listen 80 default;
server_name _;
root /var/www/html;
index index.php index.html index.htm;
charset utf-8;
access_log off;
error_log off;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass php:9000; # 「php」 はdocker-composeのコンテナのエイリアス名
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
fastcgi_passはDockerの場合、 コンテナのエイリアス名:ポート番号になります。
CodeIgniterの設定
$db['default'] = array(
'dsn' => '',
'hostname' => 'mariadb', // # 「mariadb」 はdocker-composeのコンテナのエイリアス名
'username' => 'root',
'password' => 'password',
'database' => 'db1', // 都度変更
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
DB設定のhostnameをmariadbに変更すると、アクセス可能になります。
さいごに
要点だけさっとまとめました
この状態から開発用に改良するなら
/etc/hostsに以下のように追記すれば
http://dev.hogefuga:8080 でアクセス可能です
##↲
# Host Database↲
#↲
# localhost is used to configure the loopback interface↲
# when the system is booting. Do not change this entry.↲
##↲
127.0.0.1 localhost dev.hogefuga
以上です。
お疲れ様でした!
リンク
Docker入門 #1 【Dockerとは】
Docker入門 #2 【Dockerチュートリアル】
Docker入門 #3 【WordPress環境構築】
Docker入門 #4 【CodeIgniter環境構築】
Docker入門 #5 【Ruby on Rails5環境構築】
Docker コマンドチートシート