27
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-10-11

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

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

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

私のリポジトリ
docker用にdatabase.phpを少し変更しただけのプロジェクトがあるのでクローンしてください。
※下で解説します

terminal
# 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コントローラーのコメントアウトを以下のように外す

php/application/controllers/Welcome.php
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

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

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

enter image description here

nginx/Dockerfile
# 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
nginx/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の設定

php/application/config/database.php
$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 でアクセス可能です

/etc/hosts
##↲
# 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 コマンドチートシート

27
34
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
34

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?