サラリーマンエンジニアブログ

大企業で働くなんちゃってITエンジニアのブログです。

Amazon ECRを使ってDockerイメージをリポジトリに登録してみた

docker
やぁどうもフナミズです。

Docker初心者ですが、Dockerを使ってみたい!!
と思い、ECRを使ってリポジトリにイメージを登録してDocker runまでやってみました。

Dockerとは

一言でいえば、OSやミドルウェアやファイルシステムを「イメージ」という単位で扱い、
その「イメージ」を他の環境に渡せば、イメージを取得した環境のまま、プログラムを実行することができるって感じですかね。
まぁよく、開発環境から本番環境に移ったときに環境設定の「ずれ」が生じて実行できないっていうことがあるのですが、
開発環境でその「イメージ」をとって本番環境に渡せば、開発環境の環境のままプログラムを実行できるってことですね。

この資料がうまくまとめられている気がしますね。
knowledge.sakura.ad.jp

Appインストール済みの実行環境を、一瞬でどこにでも持っていけて、どこででも実行できる便利さは革命ですね。

ECRとは

Amazon EC2 Container Registry。Docker レジストリサービス。
まぁリポジトリ作って、そこでイメージを管理できるマネージドサービスですね。

docs.aws.amazon.com

環境

  • イメージを取得したいLinux環境

事前準備

Dockerのインストール
sudo yum update -y
sudo yum install -y docker

リポジトリの作成

AWSコンソールトップ画面から「ECS」と検索し、「ECR」 > 「リポジトリ」> 「リポジトリの作成」を押す

f:id:yarite_parker:20180830174408p:plain

リポジトリの設定

リポジトリの名前を決めて次のステップへ
f:id:yarite_parker:20180830174700p:plain

「完了ボタン」を押す

f:id:yarite_parker:20180830175033p:plain

DockerFile作成

DockerFileとは

Dockerfileとは、プログラムのビルドでよく利用されているMakefileと同様に、Dockerコンテナの構成内容をまとめて記述するテキスト形式のファイル。
Dockerイメージを作成する時に必要なファイルですね。Dどのような環境を作るかを記述するファイルになります。

参考資料を載せていきます。
qiita.com
knowledge.sakura.ad.jp
www.atmarkit.co.jp

Dockerfile作成

Dockerイメージを取得したい環境にログインして、

vi Dockerfile

で、Dockerfileを作成していくでもいいですし、
どっかで書いたDockerfileをコピーしててDckerイメージを取りたい環境に置くでもいです。
ちなみに私が作ったDockerfileは必要なモジュールをインストールして、startup.shを叩くっていうDockerfileです。

Dockerfile

# bot detection service Docker image
FROM amazonlinux:1

RUN yum -y install yum-plugin-fastestmirror \
 && yum -y update       \
 && yum -y install      \
        python36        \
        python36-pip    \
 && yum clean all

# python libs
RUN pip-3.6 install --upgrade awscli boto3 more_itertools

ENV LANG=en_US.UTF-8

# apps setup

ARG basedir="/opt/etl_prepare_parse"
COPY scripts/startup.sh ${basedir}/
WORKDIR ${basedir}
COPY src/*.py ${basedir}/
RUN chmod +x ${basedir}/startup.sh
CMD ./startup.sh

ちなみにstartup.shはPythonのコード(scr/test.py)を実行するっていうだけです。
startup.sh

#!/bin/bash -x
env
python3 test.py

ディレクトリ構造は下記のようになってます。

/home/test/Dockerfile
/home/test/scripts/startup.sh
/home/test/src/test.py

Docker イメージの作成

イメージを取りたい環境で下記コマンドを実施していく

レジストリに対してDockerクライアントを認証するために使用するログインコマンドを取得する
sudo $(aws ecr get-login --no-include-email --region us-west-2)
Docker ビルド
sudo docker build -t aaa .
イメージにタグ付け

構築が完了したら、このリポジトリにイメージをプッシュできるようにイメージにタグをつける

sudo docker tag aaa:latest 168002149898.dkr.ecr.us-west-2.amazonaws.com/aaa:latest
リポジトリにイメージをプッシュする

下記コマンドを実行して、新しく作成したAWSリポジトリにこのイメージをプッシュする

sudo docker push 168002149898.dkr.ecr.us-west-2.amazonaws.com/aaa:latest

イメージの確認

「ECR」 > 「リポジトリ」 > [先ほどイメージを取ったリポジトリ名]
できてますね。「latest」とちゃんとタグ付けされています。
f:id:yarite_parker:20180830183322p:plain

Docker Run

下記コマンドを実行することで先ほど取ったDockerイメージをデプロイすることができます

CONTAINER_IMAGE=aaa
docker run -it --rm aaa

まとめ

Dockerは非常に革命的な技術だしECRだと管理も簡単!
覚えておいて絶対に損はない技術ですね。