AWS ECRを使ってみる

毎回DockerfileをGithubから取ってきてbuildしてrunするのはやっぱりイケけてないのでAWSのコンテナレジストリことECRを使ってみます。 マネジメントコンソールからECRのページに行き、[リポジトリの作成]を押します。 リポジトリ名は***.amazonaws.com/<名前空間>/<リポジトリ名>みたいな感じでつけれます。名前空間はなくても大丈夫なようです。 リポジトリを作成できたら、イメージをpushするためにアカウント認証を行いましょう。awsコマンドはbrew install awscliなどでインストールします。認証をしていない場合はaws configureをしてください。 以下のコマンドでdocker loginできます $(aws ecr get-login –no-include-email –region ap-northeast-1) 外側をかこっている$()をつけないとただdocker loginのコマンドが表示されるだけなので必ずつけて実行しましょう。リージョンはECRのリポジトリを作ったとこにします。 適当なDockerfileを用意し、ECRのリポジトリにタグをつけてdocker buildを行います。 cd <path-to-dockerfile>/docker build -t ***.amazonaws.com/garicchi/test-1 ./ docker pushを行います。 docker push ***.amazonaws.com/garicchi/test-1 無事pushできました。 せっかくなのでpullしてみます。 docker pull ****.amazonaws.com/garicchi/test-1 無事pullできました。 docker build時やpush時に長いリポジトリ名を書かなきゃなのは辛いですが普通に簡単に使うことができました。 docker-composeではどうやってpullするのか気になったので調べてみると、aws ecr docker-loginをちゃんとしておくとあとはdocker-composeのimage:タグにレジストリのURLつきでイメージ名を書くと、pullしてくれるようです。 AWS ECR と docker-compose – Qiita https://qiita.com/iwai/items/ec4103890b983039163b

[go][python] 依存パッケージのファイルは先にCOPYしてdocker buildを高速化する

docker buildすると依存パッケージのインストールが走ります。 理想的には依存パッケージに変更がなければ依存パッケージのインストールはキャッシュしたいところです。 しかしながらうまくDockerfileを作らないと毎回docker build時に依存パッケージのインストールが走ってしまいます。 依存パッケージのインストールをキャッシュするためには依存パッケージを記述したファイルのみ、先にCOPYしてパッケージのインストールを行います。 ソースコードはDockerfileの最後の方でCOPYします。 こうすることでソースコードに変更が合った場合、依存パッケージのインストールはキャッシュされ、ソースコードのコピーのみ処理が走ります。 goの場合、depパッケージマネージャを使うならGoPkg.tomlとGoPkg.lockのみ先にコピーします。 パッケージインストール時はdep ensure -vendor-only=trueにすることでソースコードの解析が走らずにパッケージのインストールが走ります。dep ensureのみで実行してしまうと、この部分がソースコードに依存してしまうのでソースコードに変更があるとパッケージの再インストールが走ってしまいます。 サンプル https://github.com/garicchi/docker-sample