1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWSのECRに置いたコンテナイメージをお引越ししてみた

Last updated at Posted at 2020-03-25

 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ファイル化したりしなくても良いかもしれない。

###①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ファイルでやり取りした方が若干早かったりします。)
 それでは。
 

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?