Google Container Engine (GKE) で Kubernetes を使って nginx + php-fpm を動かしたときの手順メモ
Docker イメージの作成
今回は 1 個の pod 内で nginx と php-fpm の 2 つのコンテナを起動させます。そのための Docker イメージを作成します。
nginx の Dockerfile
FROM nginx:latest MAINTAINER takaya030 ADD server.conf /etc/nginx/conf.d/server.conf
server.conf
同じ pod のコンテナは同一ホストで起動するので php-fpm を localhost:9000 で参照する設定にしています。
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 ~ ^/index.php$ { fastcgi_pass localhost:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
nginx イメージのビルド
$ docker build -t gcr.io/my_project_id/k8sphp_nginx .
php-fpm の Dockerfile
FROM php:7-fpm MAINTAINER takaya030 RUN apt-get update \ && apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng12-dev libmcrypt-dev \ && docker-php-ext-install pdo_mysql mysqli mbstring gd iconv mcrypt COPY index.php /var/www/html/
index.php
<?php phpinfo();
php-fpm イメージのビルド
$ docker build -t gcr.io/my_project_id/k8sphp_php7 .
イメージを Container Registry へ push
$ gcloud docker push gcr.io/my_project_id/k8sphp_nginx $ gcloud docker push gcr.io/my_project_id/k8sphp_php7
pod の作成
pod-k8sphp.yaml
apiVersion: v1 kind: Pod metadata: name: k8sphp labels: app: webphp spec: containers: - name: nginx image: gcr.io/my-project-id/k8sphp_nginx ports: - containerPort: 80 - name: php-fpm image: gcr.io/my-project-id/k8sphp_php7 ports: - containerPort: 9000
pod の作成
$ kubectl create -f pod-k8sphp.yaml pod "k8sphp" created
pod の作成確認
$ kubectl get pods NAME READY STATUS RESTARTS AGE k8sphp 2/2 Running 0 34s
service の作成
service-k8sphp.yaml
apiVersion: v1 kind: Service metadata: name: phptest spec: ports: - port: 80 targetPort: 80 selector: app: webphp type: LoadBalancer
service の作成
$ kubectl create -f service-k8sphp.yaml service "phptest" created
service の作成確認
$ kubectl get services NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 10.3.240.1 <none> 443/TCP 45m phptest 10.3.242.13 80/TCP 25s
動作確認
service を作成してから 1 分程経過するとグローバルIP (EXTERNAL-IP) が割り当てられるので、 http://EXTERNAL-IP にブラウザでアクセスして以下のように表示されれば成功です。
後始末
service、pod の削除
$ kubectl delete -f service-k8sphp.yaml service "phptest" deleted $ kubectl delete -f pod-k8sphp.yaml pod "k8sphp" deleted