Docker初学者,为初学者准备的Docker入门 #3

请尝试使用Docker在PHP7中启动Apache和Memcached来进行连接。

作为与数据库连接之前的准备工作,我们尝试连接到memcached。
当然,PHP(apache)和Memcached将作为不同的容器启动。这是一个容器=一个进程的原则。

由于Memcached有官方镜像,我们可以从Docker hub上获取。因为这个镜像可以直接使用,所以不需要创建Dockerfile。

公式图像
https://hub.docker.com/_/memcached/

尝试使用Compose

由于逐个启动和停止多个容器太麻烦了,所以我将尝试使用似乎可以处理这些问题的Compose来运行它们。

顺便说一下,docker-compose.yml的格式在这里。

撰写文件参考
http://docs.docker.jp/compose/compose-file.html

这个手册非常充实,真棒!

Docker-compose => Docker 集群

首先是设置Compse。

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

memcached:
    image: memcached:1.4

目录结构

根据公式最佳实践,似乎最好为每个容器创建一个目录,其中存放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。

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/zh/memcached.set.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>";
?>

执行 (shí

docker-compose up -d

使用浏览器访问

Screen Shot 2016-07-22 at 17.02.46.png

联接了!

结果

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

用Docker-Compose真棒啊〜〜

广告
将在 10 秒后关闭
bannerAds