Docker入門 #4 【CodeIgniter環境構築】

enter image description here

構成

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

ソーシャルゲーム開発においてよくある構成です

インストールから起動まで

私のリポジトリにソースコードを載せてるので、フォークするなりして、クローンしてください

# 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/
enter image description here


welcomeページにアクセス http://0.0.0.0:8080/welcome/index
enter image description here


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');
}

enter image description here


5分以内に開発環境を構築できます!!

解説

フォルダ構成
enter image description here

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 takashima_ryo <takashima@cloverlab.jp>

# 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でのdriver用に解凍してインストールしています

nginx

enter image description here

# nginx ver1.11.5
FROM nginx:1.11.5

# 作成者
MAINTAINER takashima_ryo <takashima@cloverlab.jp>

# 起動する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に以下をdev.hogefuga追記すれば
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

以上です。お疲れ様でした

0 件のコメント :

コメントを投稿