LoginSignup
7
6

More than 5 years have passed since last update.

Dockerで起動したCentOS6.8 apache2.2 PHP5.3から S3をNFSっぽくマウントして利用する

Last updated at Posted at 2016-09-05

ふつーはここでコンテナとして立ち上げたNFSServerに(以下略

今回も理想は理想として、現実に立ち向かっていかねばなりませんので進めます。
願わくばこのニッチなノウハウが誰かの役に立ちます様に。

マウントにはs3fsより速いらしいgolang製のgoofysを使います。

本当は信頼と実績のs3fsを使いたかったんですが、CentOS6.8ではどうしてもビルドできなかったというのが裏事情。
s3fsが要求するfuseを用意するのがどうにも手間なんですよね。
ソリューションをお持ちの方は教えてプリーズ。
てか、使えるならcentos7つかうべきなんだろうな〜。

では毎度おなじみDockerfile

Dockerfile
FROM centos:6.8
MAINTAINER furuyamah <furuyamah@isao.co.jp>

# 必要なものをインストール
# CentOS6.8のPHPは5.3なのでそのまま使う
# CentOS6.8のMySQLは5.1なので5.5をremiから入れる
# この辺はgoofys単体にはおそらく不要
RUN yum update -y && \
    rpm -ivh http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm && \
    rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm && \
    yum install -y --enablerepo=remi mysql compat-mysql51 && \
    yum install -y gcc ImageMagick-devel curl-devel && \
    yum install -y \
        httpd \
        httpd-devel \
        httpd-tools \
        php \
        php-cli \
        php-common \
        php-dba \
        php-devel \
        php-gd \
        php-mbstring \
        php-mcrypt \
        php-mysql \
        php-pdo \
        php-pear \
        php-pecl-apc \
        php-pecl-memcache \
        php-xml \
        php-xmlrpc && \
    pecl clear-cache && \
    printf "\n" | pecl install imagick-3.1.2 && \
    printf "\n" | pecl install pecl_http-1.7.6

# goofysに必要なものをインストール
RUN yum install -y golang fuse git syslog && \
    export GOPATH=$HOME/go && \
    go get github.com/kahing/goofys && \
    go install github.com/kahing/goofys && \
    mkdir /root/.aws
#AWSアクセスのためのキー
COPY credentials /root/.aws/credentials

WORKDIR /var/www
COPY docker-entrypoint.sh /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]

EXPOSE 80

続いて実行されるdocker-entorypoint.sh

docker-entrypoint.sh
#!/bin/bash
set -e

# mount S3
# syslogd needs to running goofys in background.
/etc/init.d/rsyslog start
mkdir -p /mnt/s3/mount_point
/root/go/bin/goofys [S3のバケット名] /mnt/s3/mount_point -o allow_other,--file-mode=0666,--dir-mode=0777

# start httpd
/etc/init.d/httpd start

tail -f /dev/null

今回もバックグラウンドでsyslogdとgoofysを起動しています。
syslogdをあげているのは、goofysをバックグラウンドで起動するために必要なためです。
また、このままだと速攻でコンテナが終了するのでそれを防止するためにtailしています。
こんなんばっかだ...

docker-compose.yml
apache-php:
  build: ./apache-php
  ports:
    - "80:80"
  volumes:
    - "../pub:/var/www"
  links:
    - memcached
  privileged: true
  cap_add:
    - SYS_ADMIN
    - MKNOD
  devices:
    - "/dev/fuse"

memcached:
  image: memcached:1.4

fuseを使うサービスのために、privileged,cap_add,devicesを追加しています。おまじない。

ディレクトリ構成

AWS用のaccesskey格納ファイルが増えています。

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

起動

docker-compose up -d

停止

docker-compose stop
docker-compose rm -f

参考になれば。

7
6
4

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