Memo

メモ > サーバ > サービス: AWS > ECR+ECS+Codeシリーズで自動デプロイ: ベースイメージを登録

■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

Advertisement