LoginSignup
12
12

More than 5 years have passed since last update.

Docker初心者による、初心者のためのDocker入門 #3

Last updated at Posted at 2016-07-22

DockerでapacheとMemcachedを起動してPHP7から接続してみる

DBに接続する前の肩慣らしとしてmemcachedに接続してみます。
当然PHP(apache)とMemcachedは別のコンテナとして起動します。1コンテナ=1プロセスの原則です。

memcachedのイメージは公式があるのでDocker hubからもってきます。これはそのまま使えそうなのでDockerfileは作成しません。

公式イメージ
https://hub.docker.com/_/memcached/

Composeを使ってみる

複数のコンテナをそれぞれいちいち起動したり停止したりするのはダルすぎるので、その辺をうまいことやってくれるらしいComposeを使ってみます。

ちなみにdocker-compose.ymlの書式はこちら

Compose ファイル・リファレンス
http://docs.docker.jp/compose/compose-file.html

マニュアルが充実していていいですね〜

docker-compose

まずはCompseの設定

docker-compose.yml
apache-php:
    build: ./apache-php
    ports:
        - "80:80"
    links:
        - memcached

memcached:
    image: memcached:1.4

ディレクトリ構成

公式のベストプラクティスを見る限り、コンテナごとにディレクトリを作成してDockerfileやコンテナ固有の設定ファイルを格納するのがいいらしいです。

http://docs.docker.jp/engine/articles/dockerfile_best-practice.html#dockerignore
ほとんどの場合、空のディレクトリに個々の Dockerfile を置くのがベストです。そうしておけば、そのディレクトリには Dockerfile が構築に必要なファイルだけ追加します。

ふむふむ..というわけで。

project_dir
+- docker-compose.yml
+-apache-php
    +-Dockerfile
    +-index.php

前回に引き続きPHP7を使用しています。PHP7ではmemcacheを使用するのは一筋縄ではいかないようです。
一番参考にした記事。

Docker Compose で PHP 7.0 の開発環境を構築する
http://qiita.com/masakielastic/items/9fdc52b47cc7e3850b9f#memcached

でもそのままではダメで、少しDockerfileを修正しました。

apache-php/Dockerfile
FROM php:7.0.8-apache
ENV DEBIAN_FRONTEND noninteractive
ENV PHP_MEMCACHED_VERSION php7

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/$PHP_MEMCACHED_VERSION.tar.gz \
    && tar xfz /tmp/memcached.tar.gz \
    && rm -r /tmp/memcached.tar.gz \
    && mkdir -p /usr/src/php/ext \
    && mv php-memcached-$PHP_MEMCACHED_VERSION /usr/src/php/ext/memcached \
    && echo memcached >> /usr/src/php-available-exts \
    && docker-php-ext-install memcached

RUN { \
  echo 'session.save_handler = memcached'; \
  echo 'session.save_path = memcached:11211'; \
} >> /usr/local/etc/php/conf.d/docker-php-ext-memcached.ini

セッションハンドラーの件はまだ不要だけど将来を見越して記述

ちゃんとmemcachedと通信できているか確認するためのPHP。
めんどいのでPHP公式からコピー

http://php.net/manual/ja/memcached.set.php

index.php
<?php
$m = new Memcached();
$m->addServer('memcached', 11211);

$m->set('int', 99);
$m->set('string', 'a simple string');
$m->set('array', array(11, 12));
/* expire 'object' key in 5 minutes */
$m->set('object', new stdclass, time() + 300);


var_dump($m->get('int'));
echo "<br>";
var_dump($m->get('string'));
echo "<br>";
var_dump($m->get('array'));
echo "<br>";
var_dump($m->get('object'));
echo "<br>";
?>

実行

docker-compose up -d

ブラウザでアクセス

Screen Shot 2016-07-22 at 17.02.46.png

つながったーーーー!

後始末

docker-compose stop     # 全てのコンテナ停止
docker-compose rm       # 全てのコンテナ削除

docker-compose楽でいいですね〜〜

12
12
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
12
12