【Mac】DockerからECRへソースをプッシュする
この記事について
Dockerからプロジェクトのソースコードを、イメージとしてECRへプッシュを行う手順の記事になります。
初心者向けの内容になっています。備忘録です。
使用するサービス
- GitLab
- ソースコード管理ツール
- Docker
- コンテナ形の仮想環境構築ツール。これでAWSへソースをプッシュします。Dockerfile(構築する際の設計書ファイル)をグループ内で共有すれば、皆が簡単に同等の環境を作ることができる
- AWS ECR
- ソースコードが入ったプロジェクトを倉庫のように溜めておくことができるサービス。amazonが提供している
事前準備
AWS CLIインストール
コマンドでAWS操作を実行するために必要なものです
公式のインストール手順に従ってインストールします
マックOSのコマンドライン方式で手順通りにコマンドを実行します
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
以下のように「The install was successful」が出ることを確認します
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 37.5M 100 37.5M 0 0 14.8M 0 0:00:02 0:00:02 --:--:-- 14.8M
Password:
installer: Package name is AWS Command Line Interface
installer: Installing at base path /
installer: The install was successful.
which awsでインストールされたかを確認します
which aws
/usr/local/bin/aws
AWSアカウント作成
こちらを参考に作成します
参考:https://www.cloudbuilders.jp/articles/438/
AWSアクセスキー取得
DockerからECRへプッシュするための認証用でアクセストークンを発行します。
AWSにサインインし、右上自分のアカウント名 > セキュリティ認証情報をクリック
画面を下にスクロールして「アクセスキーを作成」をクリック
rootユーザという強い権限でアクセスキーを作ることを推奨しませんと出ますが、今回は勉強用なのでこのまま進みます。チェックボックスにチェックを入れます
作成されたので下のボタンから.csvファイルをダウンロードします
AWS CLIにアクセスキーを設定します
以下のコマンドを実行
aws configure
対話形式が始まるので、.csvの中のKeyをそれぞれ入力します。
regionについては東京の「ap-northeast-1」、output formatは未入力で設定します
AWS Access Key ID [None]: ~
AWS Secret Access Key [None]: ~
Default region name [None]: ap-northeast-1
Default output format [None]: 未入力
aws configure listとコマンドを実行して、設定した値が表示されれば設定完了です
Name Value Type Location
---- ----- ---- --------
profile <not set> None None
access_key ******************** shared-credentials-file
secret_key ******************** shared-credentials-file
region ap-northeast-1 config-file ~/.aws/config
Dockerインストール
わかりやすい記事があったので参考にしました
参考:
Gitアクセストークンを発行
Dockerからgit cloneする際にGitへアクセスする用のアクセストークンを発行します。
自分のアカウントは2FA(二要素認証)を有効にしているため、この作業が必要です。
左上の自分のアイコンから「プロファイルを編集」をクリック
左のメニューから「アクセストークン」をクリック
パーソナルアクセストークンの画面が開きます。
ここでは個人単位でのアクセス権限付与が可能です。
右側の「新しいトークンを追加」をクリック
次の画面でトークン名、有効期限、スコープを選択します
トークン名:任意
有効期限:任意
スコープを選択:read_repositoryにチェック
read_repositoryでcloneする権限を与えます
最後に下部の「個人のアクセストークンを作成」をクリック
発行したアクセストークンをコピーして、新規ローカルファイルに貼り付けます。
その際トークンの頭に「oauth2:」と入力して保存します。
AWSリポジトリ作成
ECRを開いて、左メニューのPrivate registory > Repositoriesをクリック
リポジトリがなければ作成します。
「リポジトリを作成」をクリック
可視性設定:プライベート
リポジトリ名:任意
タグのイミュータビリティ:有効
他の設定は特に変更せず、下部の「リポジトリを作成」をクリック
リポジトリが作成できたことを確認します
実際にプッシュしてみる
- Dockerfileを作成する
Gitプロジェクトからソースをクローンするよう指示を書きます - Dockerfileをビルドする
- ビルドしたイメージにタグをつける
- DockerからAWSへアクセスできるようにAWS認証を行う
アクセストークンで認証する - Dockerからタグを指定してECRへプッシュする
- ECRにイメージがプッシュされていることを確認する。完了
Dockerfileを作成する
Dockerfileを新規作成し、以下のコードを書きます
FROM bitnami/git:latest AS GIT
ARG BRANCH
ENV APP_DIR="/app"
RUN --mount=type=secret,id=token git clone -b {BRANCH} https://(cat /run/secrets/token)@gitlab.com/xxxx/xxx $APP_DIR
やってることは、
・bitnamiが提供するgitを利用します。bitnamiとはですが、ここではとりあえず色々提供してくれるパッケージと思っておけばOKです
・作業フォルダは/app配下です
・@gitlab.com/xxxx/xxxの部分でプロジェクトのリポジトリURLを指定します
・ブランチは現ブランチを動的に指定します
・ソースをクローンします
プッシュする
ここからはコマンドラインを実行します。
Dockerfileのある場所まで移動します
cd /XX/XX
Dockerfileの内容でビルドします(XXXに適当に設定してください)
docker build -t XXX .
XXXの名前でビルドされたことを確認するため一覧で確認します
docker images
AWSのリポジトリにプッシュする際のタグ付け(別名のようなもの)をします
このタグ名でECRへプッシュします。
自分のアカウントIDは適切に設定してください
docker tag XXX:latest 自分のアカウントID.dkr.ecr.ap-southeast-2.amazonaws.com/AAA:latest
AAAをリポジトリにプッシュします
docker push 自分のアカウントID.dkr.ecr.ap-southeast-2.amazonaws.com/AAA:latest
ECRのリポジトリを確認する
ECRでプライベートリポジトリを表示して、AAAがプッシュされていることを確認します
困ったこと
Gitからクローンしてくる際に認証エラー発生
原因は、gitパーソナルトークンをローカルにファイルで保存する際に「oauth2:」をつけていなかったことでした。
こちらの記事を参考にしてエラー解消しました。
最後に
以上がdockerからECRへソースをプッシュするフローでした。
Dockerfileを作成してしまえば、次からはソースクローンを「docker build -t XXX .」で自動でできちゃいます。
AWS認証〜ECRへプッシュも1ファイルに集約して、コマンド1つでできないかと考えてますが、タグ付けの部分でバージョン管理的な意味合い込めて毎回違うタグ名を設定したいので、できるかどうかわからないですね..
何かわかれば記事にしたいと思います!
以上
Discussion