ふつーはここでコンテナとして立ち上げた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
参考になれば。