1. sho_oboegaki

    No comment

    sho_oboegaki
Changes in body
Source | HTML | Preview
@@ -1,81 +1,81 @@
 AWSのECRに置いてあるコンテナイメージをテスト環境から本番環境に移転させるという業務があり、ザッと調べてもパッとは出てこなかったので、やり方を残しておこうと思います。
 本来、コンテナはdockerfileを書いてそれを管理した方が良いのですが、そんなものは残ってなかったし、ぺーぺーの自分はそんなことすら知らなかった。
#ECR上のコンテナイメージを移転する
 今回は2パターンのやり方を紹介します。
1:コンテナイメージをtarファイル化し、ローカルを経由してお引越し
2:コンテナイメージを直接pullして、そのままpushしてお引越し
 本記事では、お引越し先のAWS環境を移転先、お引越し元のAWSアカウントを移転元と表記します。
※スクショないです、追加できたらやります。
#環境
ローカルOS:windows10
ターミナルソフト:Rlogin
EC2のインスタンスタイプ:t3.medium
#1:コンテナイメージをtarファイル化し、ローカルを経由してお引越し
 実際の業務ではこちらを採用しました。2つ目の方が早くて簡単ですが、無作法なので却下されました。
 大まかな流れとしては、こんな感じになります。
①Rloginで移転元のEC2インスタンスにログインする
②EC2インスタンスからAWSコマンドで移転元のECRにログインして、任意のコンテナイメージをpullする
③pullしてきたコンテナイメージをtarファイル化して、ローカルにダウンロードする
④移転元のEC2インスタンスから切断し、Rloginで移転先のEC2インスタンスにログインする
⑤tarファイル化したコンテナイメージをEC2インスタンスにアップロードして展開する
⑥展開して出来たコンテナイメージにtagをつけて、移転先のECRにpushする
 実践したわけじゃないけれど、多分ローカルにDocker Desktopをインストールして、AWSコマンドを叩けるようにしておけば、(クレデンシャル情報が載ってるconfigureファイルがローカルにガッツリ残ることはさておき)わざわざRlogin使ったりtarファイル化したりしなくても良いかもしれない。
-###①loginで移転元のEC2インスタンスにログインする
+###①Rloginで移転元のEC2インスタンスにログインする
 ぶっちゃけEC2インスタンスに接続できればなんでも良いので省略
###②EC2インスタンスからAWSコマンドで移転元のECRにログインして、任意のコンテナイメージをpullする
 EC2インスタンスに接続したら、次のawsコマンドでECRへ接続するためのトークンを発行します。
`aws ecr get-login --no-include-email`
 このコマンドの戻り値を余すことなくcopy&paste&EnterすることでECRをいじることができるようになります。
###③pullしてきたコンテナイメージをtarファイル化して、ローカルにダウンロードする
 一旦、AWSのコンソールでECRのリポジトリを見に行きます。そこでお引越し対象のコンテナイメージのURLを確認しておきます。
 EC2インスタンスで、次のAWSコマンドでECRからお引越し対象のコンテナイメージをpullしてきます。
`docker pull (コンテナイメージのURL)`
 pullできたら次のコマンドでtarファイル化します。
`docker save -o (任意のファイル名).tar (コンテナイメージ名)`
 終わったら、ローカルの任意の場所にダウンロードしておきます。
###④移転元のEC2インスタンスから切断し、Rloginで移転先のEC2インスタンスにログインする
 移転元での作業を終わりなので切断します。ここからは移転先での作業なので、移転先EC2インスタンスに接続します。
###⑤tarファイル化したコンテナイメージをEC2インスタンスにアップロードして展開する
 移転先のEC2インスタンスに接続できたら、さっきのコンテナイメージのtarファイルをアップロード、次のコマンドで展開します。
`docker load -i (ファイル名).tar`
###⑥展開して出来たコンテナイメージにtagをつけて、移転先のECRにpushする
 展開したコンテナイメージのコンテナイメージIDを"docker images"コマンドで確認したら、次のコマンドでタグ付けします。
`docker tag (コンテナイメージ名) (push先リポジトリのURL)`
 最後に次のコマンドでコンテナイメージをpushします。(手順②のECRへの接続を忘れずに)
`docker push (push先リポジトリのURL)`
 AWSのコンソールでECRのリポジトリを見に行き、コンテナイメージが確認出来たらお引越し成功です。
#2:コンテナイメージを直接pullして、そのままpushしてお引越し
 移転元のECRから移転先のEC2に直接コンテナイメージをpull、そのまま移転先のECRにpushする方法です。上の方で無作法と言われた理由としては、移転先EC2インスタンスで移転元のクレデンシャルを使って移転元のECRを直接触るからです。
 大まかな流れとしては、こんな感じになります。
①Rloginで移転先のEC2インスタンスにログインする
②EC2インスタンスからAWSコマンドで移転元のECRにログインして、任意のコンテナイメージをpullする
③EC2インスタンスからAWSコマンドで移転先のECRにログインして、任意のコンテナイメージをpushする
お手軽、簡単、でも無作法
pullしてきたコンテナイメージに、tag付けだけすればpushできます。
#まとめ
 今回は、AWSのECRに置いてあるコンテナイメージを別のAWS環境に移転させる方法についてまとめてみました。クレデンシャルの管理とかを徹底するなら、手間はかかりますが方法1で作業するのが良いかと思います。そこまで気にしない、作業した後にちゃんとクレデンシャルを削除します、というなら方法2もアリといえばアリかもしれないです。方法2の場合、ローカル環境にDocker DesktopとAWSCliをインストールしておけば、コマンドプロンプトでこと足りる気もしてます。
 コンテナの管理としては、dockerfileで書いて残しておくことで共有しやすくなる、というか本来のお作法だと思いますので、自分がゼロからコンテナを作る場合は、ちゃんとdockerfile残しておきたいと思いました。(ただ、コンテナをbiuldする際にインストールするものが多かったりする場合は、tarファイルでやり取りした方が若干早かったりします。)
 それでは。