AWS ECRとLaravelを組み合わせるにあたって、どのコンテナをpushすればよいのか?
まあ、大体「nginx」と「php-fpm」でしょう。
ということで今回は、LaravelにDockerを取り入れて、ECRにイメージをpushするまでをやってみます。
僕のプロフィールはこちら
前提
・Laravelアプリがあること
参考にしたサイト
URL:「https://qiita.com/imunew/items/1e4826030d725beb4710」
※執筆時期がちょっと古いからか、うまくいかないところが多々あります。
どちらかというと、そこを記録しておきたいって感じです。
ECRのリポジトリ作成
ECRのリポジトリをnginx&php-fpm用の二つ作成します。
今回は、
・「laravel-app/nginx」
・「laravel-app/php-fpm」
として作成しました。
こんな感じ。
Laravel×Dockerの事前準備
まずは、Dockerファイル諸々準備します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
version: '3.2' services: nginx: build: context: . dockerfile: ./docker/nginx/Dockerfile ports: - "80:80" depends_on: - php-fpm php-fpm: build: context: . dockerfile: ./docker/php-fpm/Dockerfile |
ルートに「docker-compose.yml」ファイルを作成します。
1 2 3 4 5 6 |
FROM nginx ADD ./docker/nginx/site.conf /etc/nginx/conf.d/default.conf RUN mkdir -p /app/public ADD ./public/ /app/public/ |
nginxのDockerファイルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
server { index index.php index.html; server_name localhost; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; root /app/public; location ~ ^.+/\.(png|jpg|jpeg|gif|ico|css|js|html?)$ { try_files $uri $uri/ =404; } location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php-fpm:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } } |
nginxの「site.conf」です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
FROM php:7-fpm ENV DEBIAN_FRONTEND noninteractive RUN apt-get update && apt-get install -y git zlib1g-dev zip unzip libzip-dev RUN docker-php-ext-install zip RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin --filename=composer RUN composer global require hirak/prestissimo RUN mkdir -p /app ADD . /app/ WORKDIR /app RUN composer install RUN cp .env.example .env RUN php artisan key:generate RUN chmod -R a+w storage/ bootstrap/cache |
php-fpmのDockerファイルです。
※「libzip-dev」のエラーでハマりました。。「libzip-dev」は必要なのでインストールします。
Dockerイメージのpushまで
ECRにログイン
1 |
aws ecr get-login --region ap-northeast-1 --profile ecr --no-include-email |
ECRにログインします。
リージョンはあなたのリージョンに合わせてください。
Dockerにログイン
1 2 3 |
> docker login -u AWS -p <hoge> https://<hoge>.dkr.ecr.ap-northeast-1.amazonaws.com WARNING! Using --password via the CLI is insecure. Use --password-stdin. Login Succeeded |
先ほどのコマンドが成功するとクソ長いDockerコマンドが表示されるので、そのコマンドをそのまま打ち込みます。
Dockerイメージをビルド
1 2 |
docker build -t <hoge>:latest -f docker/nginx/Dockerfile . docker build -t <hoge>:latest -f docker/php-fpm/Dockerfile . |
Dockerイメージをビルドします。
<hoge>はあなたが先ほど作成したECRのURIです。
※僕はphp-fpmで変なエラー出ましたが、PC再起動したら直りました。
Dockerイメージをpush
1 |
docker push <hoge>:latest |
先ほどビルドしたイメージをそれぞれpushします。
あとはECR側でイメージがpushされていることが確認できたらOK!
まとめ
なんか前回の記事とあんまり変わんねーな。
ただ、普段Laradock使ってるから、ローカルと開発環境だと厳密には環境違うんだよな~。
どうしたもんか。。
さいなら。