1. sho_oboegaki

    Posted

    sho_oboegaki
Changes in title
+AWSのECRに置いたコンテナイメージをお引越ししてみた
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +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インスタンスにログインする
+ ぶっちゃけ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ファイルでやり取りした方が若干早かったりします。)
+ それでは。
+ 
+
+
+
+