■ECR+ECS+Codeシリーズで自動デプロイ: ベースイメージを登録
Dockerhubの制限やサーバダウンに影響を受けないように、ベースイメージをAWSで管理する
※CodeBuildでのビルド時間を短くするために、PHPのインストールなどを終えた状態のものをベースイメージとして管理する方がいいかもしれない
ただしそれだと、PHPのextensionなどを追加インストールする場合に対応が面倒そうではある(プログラマによる対応が難しそう)
もしくは「ベースイメージ」「PHPのインストールなどを終えたイメージ」「プログラムも含めたイメージ」を作成し、
以降は原則「プログラムも含めたイメージ」のみを更新していくか
■ベースイメージの作成
Elastic Container Registry → リポジトリを作成
以下の内容でリポジトリを作成
可視性設定: プライベート
リポジトリ名: base_php81_apache
タグのイミュータビリティ: 有効
「リポジトリを作成」ボタンを押すとリポジトリが作成される
引き続き、リポジトリにプッシュするイメージを作成する
docker\base_php81_apache\html\index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>base_php81_apache</title>
</head>
<body>
<h1>base_php81_apache</h1>
<p>php:8.1-apache</p>
</body>
</html>
docker\base_php81_apache\Dockerfile
FROM php:8.1-apache
COPY html /var/www/html
$ docker image build -t php:base_php81_apache docker/base_php81_apache
$ docker image ls
以下で起動する
$ docker container run --name base_php81_apache -p 80:80 -d php:base_php81_apache
$ docker container exec -it base_php81_apache bash
# ls /var/www/html
# exit
http://localhost/ にアクセスし、index.php の内容が表示されることを確認する
$ docker container ls
$ docker container rm -f 2c62835f105b
タグ「1.0.0」を付けてプッシュする
$ cd docker/base_php81_apache
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com
$ docker image build -t base_php81_apache .
$ docker image tag base_php81_apache:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/base_php81_apache:1.0.0
$ docker image push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/base_php81_apache:1.0.0
ECRでリポジトリ名 base_php81_apache をクリックし、イメージタグとして「1.0.0」が現れていることを確認する
■ベースイメージの利用確認
Docker Composeでの起動を試す
docker\ecr_php81_apache\docker-compose.yml
version: '3'
networks:
compose_network:
driver: bridge
services:
php:
container_name: php
volumes:
- ./docker/php/php.ini:/usr/local/etc/php/conf.d/php.ini:ro
- ./:/var/www:rw
environment:
TZ: Asia/Tokyo
ports:
- 80:80
networks:
- compose_network
build: ./docker/php
docker\ecr_php81_apache\docker\php\Dockerfile
FROM 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/base_php81_apache:1.0.0
RUN apt-get update
RUN apt-get install -y \
libicu-dev \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libonig-dev \
libzip-dev
RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/
RUN docker-php-ext-install gd mbstring intl zip
RUN a2enmod rewrite
RUN apt-get clean \
&& rm -rf /var/lib/apt/lists/*
RUN usermod -u 1000 www-data && \
groupmod -g 1000 www-data
docker\ecr_php81_apache\docker\php\php.ini
date.timezone = Asia/Tokyo
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
mbstring.substitute_character = none
mbstring.func_overload = 0
mbstring.strict_detection = Off
docker\ecr_php81_apache\html\index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>base_php81_apache</title>
</head>
<body>
<h1>ecr_php81_apache</h1>
<p>123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/base_php81_apache:1.0.0</p>
</body>
</html>
ファイルを用意できたら以下で起動する
$ cd docker/ecr_php81_apache
$ docker-compose build
$ docker-compose up -d
http://localhost/ にアクセスし、index.php の内容が表示されることを確認する
$ docker-compose down