アプリ完成のため毎日手をつけることにした🐹
1/7 #1 とりあえずデプロイしよう作戦決行
- appコンテナ(Laravel)からdbコンテナ(MySQL)へ接続する設定:参考記事
- AWSの調査(ECRを使用してデプロイしていくと良いらしい)
- ECR(Amazon Elastic Container Registry)は、Dockerのコンテナイメージを保存しておくためのレジストリサービス
- CodeDeployで自動でデプロイやってけるようにしたい
- vscodeでAWS CLIのインストール
- Docker イメージを Amazon ECR リポジトリにプッシュで詰まる
- IAMでAWSのアクセス許可を設定する (AWS Identity and Access Management )
- ↑詰った
1/9 #3 とりあえずデプロイしよう作戦決行
「Docker イメージを Amazon ECR リポジトリにプッシュ」
- IAMでユーザー作成
- IAM Identity Centerでユーザー作成などしてて時間がかかった。何してたんだ発覚記事
- これはユーザーにグループや権利を割り当てるものであるため、アカウントIAMユーザーはここから作成できない
- あと、ユーザー登録&承認で時差があってユーザー反映されてなかったりしてとまどってた2体作ってしまった
- IAMユーザー作成参考記事
- ECR作成参考記事
1/10 #4 とりあえずデプロイしよう作戦決行
「Docker イメージを Amazon ECR リポジトリにプッシュ」
やっとvscodeでコマンド叩いてイメージをAWSにプッシュ!
- まず、作成したIAMユーザーでawsにログイン(アクセスキー(&シークレットキー)を作成)
リポジトリ名の「プシュコマンドの表示」通りに行う。
-
①awsのリポジトリを認証する
→ エラー出るのでaws configure
でアクセスキー、シークレットキーを再設定する
(やっとこのエラー溶けて嬉しかった〜😭😭) -
②リポジトリにイメージをプッシュできるように、イメージにタグを付ける
dockerイメージは用意してある。詰まった。
イメージに名前つけるらしい、service, app, dbそれぞれにイメージタグを付けた。
(docker-compose.yaml
内にimag:リポジトリ名_〇〇
を追記した)
コマンドのdocker tag
のあとにimageタグ名をつけて叩く×3つ分 -
③新しく作成した AWS リポジトリにイメージをプッシュ
表記してあるコマンド叩く -
その後、課金増えないようにライフサイクルポリシールールを追記
知ったこと
build だけでなく image も指定できます。 Compose は image で指定したタグを使い、構築したイメージをタグ付けします。
1/12 #6 記事読んだ
1/15 #7 AWSにpushしたイメージをpullする
-
$ docker images
でイメージ一覧を出す -
$ docker image rm -f イメージ名
で作成したイメージを削除しておく - これ通りに進めようとして詰まった
エラー
repository does not exist or may require 'docker login': denied: Your authorization token has expired. Reauthenticate and try again.
- dockerのログインしても同じエラーなのでdockerログインが原因ではない
イメージのプル元になる Amazon ECR レジストリに対して Docker クライアントを認証します。認証トークンは、使用するレジストリごとに取得する必要があり、トークンは 12 時間有効です
- 認証設定が必要らしい
- プライベートリポジトリの許可ポリシーを設定する
- プルスルーキャッシュルールを設定する
→ docker pull 〜〜〜
してまだエラー内容変わらない詰まり
1/20 #8 AWSにpushしたイメージをpullする
-
これ通りにしたらできた。。
- 単純に、
docker pull <awsリポジトリのURI>
- 単純に、
- 前できなかったのに寝かせたらできたみたい
デプロイする
AWS使った理由:更新したときに自動でデプロイできるようにしたいから
一番使いたいのは、「CodeDeploy 」なのでそれを基準に考える(CodeDeploy ↓)
ソースコードが変更されたり、新しいベースイメージが Amazon ECR にアップロードしたときは、継続的デリバリーパイプラインが自動的にコンテナイメージを構築してデプロイします。
ECSとは
- AWS上でコンテナを管理するもの(アプリのデプロイ、スケーリング(調整))
- コンテナを動かすための実行環境で、EC2、Fragate、オンプレミスの3つの種類がある
- デプロイ方法
- ①イメージ作成後、ECSのタスク定義を作成する
- タスク定義(=アプリのブループリント(設計)JSON形式のテキストファイル)
- ②タスク定義を(タスクorサービスとして)クラスターにデプロイする
- ↑タスク定義のインスタンス化
- ①イメージ作成後、ECSのタスク定義を作成する
ECSの実行環境(起動タイプ)、EC2かFragateか
- EC2・・・自分で管理するサーバー
- Fargate・・AWSが運用保守管理をしてくれるサーバー
今回はCodeDeploy を使う→EC2を使用する
これで進める:step2から