Docker for Windows で作成したコンテナは、プライベートなので Amazon Lightsail コンテナにデプロイできないから、対応した記録


Lightsail はプライベートのリポジトリからデプロイできない

みんな無料が大好き、docker hub リポジトリには1つしか無料枠がない、だからプライベートにする、Lightsail にデプロイできない。
の流れから、しかたなくローカルマシンから直接 Lightsail にデプロイした記録

作業記録

コンテナの作成

3か月無料になるMicro を選択して名前つけるだけ

AWS CLI をインストール

手順
https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-install-software

ダウンロード
https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-windows.html#cliv2-windows-install

lightsailctl プラグインをインストール

https://s3.us-west-2.amazonaws.com/lightsailctl/latest/windows-amd64/lightsailctl.exe
上記ダウンロードを C:\Temp\lightsailctl\ に保存

コマンドプロンプトを管理者で実行

環境変数設定

C:\> setx PATH="%PATH%;C:\Temp\lightsailctl" /M

成功: 指定した値は保存されました。 

これで準備完了と、手順には書いてある。

Amazon Lightsail コンテナイメージの作成

手順
https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-creating-container-images

👆には、Dockerfile からイメージ作成とありますが、ローカルでコンテナ起動して設定等々することはできるので特にDockerfile にこだわる必要はなさそう。

Amazon Lightsail にコンテナイメージをプッシュ

手順
https://lightsail.aws.amazon.com/ls/docs/ja_jp/articles/amazon-lightsail-pushing-container-images

AWSにイメージをプッシュ

PS C:\> aws lightsail push-container-image --region <Region> --service-name <ContainerServiceName> --label <ContainerImageLabel> --image <LocalContainerImageName>:<ImageTag>

[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXXXXXXXXX: Preparing
[XXDigest: sha256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Image "XXXXXXX/XXXXXXX:XXXXXX" registered.
Refer to this image as ":XXXXXXX.XXXXXXX.1" in deployments.

※WARNINGが出たら

WARNING: You are using version 1.0.0 of lightsailctl, but version is available.
WARNING: You are using version 1.0.0 of lightsailctl, but version  is available. To download, visit https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-install-software
NoCredentialProviders: no valid providers in chain. Deprecated.
        For verbose messaging see aws.Config.CredentialsChainVerboseErrors

Command '['lightsailctl', '--plugin', '--input-stdin']' returned non-zero exit status 1.

これは、IAM で作成されたユーザのアクセスキーが AWS CLI に設定されていないため。

  • IAM でユーザ作成(プログラムによるアクセス-AdministratorAccessで作成しましたが適宜選んでね)
  • アクセスキーとシークレットアクセスキーを取得

ローカルにて

aws configure
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Default region name [None]: XXXXXXX
Default output format [None]:

👆で正常になった

lightsail コンソールでイメージの確認とデプロイ

コンテナにイメージが登録されているので、デプロイからこのイメージを選択してデプロイ実行

  • コンテナ名・・・・前段で作成したコンテナ名
  • イメージ・・・・・さきほど苦労してCLIからプッシュしたイメージ名(クリックで選択できます)
  • ポート・・・・・・dockerコンテナ側が待ち受けているポートを指定すると、外部からのデフォルトポート(80 とか 443)をこのポートにアタッチしてくれる

まとめ

ひとまず、docker for Windows で作成したコンテナをイメージにして、Amazon Lightsail にデプロイすることができました。
実際には、これだけではなく、Lightsail でDBを作成しコンテナから接続したり、ドメイン設定するなどが必要になるでしょう。

しかし、docker 便利ですね。引っ越しが楽です。