Docker イメージをビルド環境として使用する
Bitbucket Pipelines では、Docker コンテナでビルドを実行します。これらのコンテナでは、ビルド環境を定義する Docker イメージを実行します。Bitbucket が提供する 既定のイメージを使用するか、またはカスタムイメージを取得できます。
Docker Hub、AWS、GCP、Azure、およびインターネットで到達可能なセルフホスト型レジストリにホストされる、パブリックまたはプライベートの Docker イメージがサポートされます (現在 Bitbucket Pipelines ではインターネット経由でアクセスできない Docker イメージにアクセスすることはできません)。
既定のビルド環境
ビルド環境として使用する Docker イメージを指定しない場合、Bitbucket Pipelines は Atlassian が一般的なツールで構築した既定のものを使用します。
The default image is atlassian/default-image:latest. You can also specify the version:
name | プラットフォーム | すぐに使用可能なアプリケーション |
---|---|---|
atlassian/default-image:1 atlassian/default-image:latest | ubuntu 14.04 |
|
atlassian/default-image:2 推奨 | ubuntu 16.04 |
|
ベスト プラクティスのためのヒント: Pipelines の実行を確認したら、デフォルト イメージ以外に使用できるイメージを見つけることをおすすめします。デフォルト イメージは、利用するユーザーのための互換性を最大限に確保することを意図しており、更新頻度は高くありません。また、多数のツールが含まれているため、環境によっては不要な場合が考えられます。つまり、自身で見つけたサイズの小さいビルド イメージのほうが、バグの修正を迅速に反映し、ビルドもすばやく行える可能性があります。
カスタムのビルド環境
既定の環境がニーズに合わない場合、Docker Hub で利用可能なイメージに役立つものがないかどうかを確認することをおすすめします。Docker Hub で利用可能な公式イメージで、Atlassian が推奨し、セットアップ中に Pipelines で構成しているものに、次のような例があります。
- PHP: https://hub.docker.com/_/php/
- JavaScript: https://hub.docker.com/_/node/
- Java (Maven): https://hub.docker.com/_/maven/
- Python: https://hub.docker.com/_/python/
- Go: https://hub.docker.com/_/golang/
- .NET Core: https://hub.docker.com/r/microsoft/dotnet/
ビルド イメージとしてこれらのイメージや Docker Hub 上の別のパブリック イメージを使用する場合、後述のパブリック ビルド イメージの使用のガイドをご参照ください。
独自のレジストリにある既存の Docker イメージを使用する場合、後述のプライベート ビルド イメージの使用のガイドをご参照ください。
独自の Docker イメージを作成する場合、後述のカスタム ビルド環境の作成のガイドをご参照ください。
パブリック ビルド イメージの使用
Docker Hub、別のレジストリ、またはセルフホスト型のレジストリにホストされる既存のパブリック イメージを使用できます。インターネット経由でアクセスできるイメージのみを使用できます。
例では、次のようになっています。
- アカウント名は、イメージを所有するアカウントの名前です。
- ユーザー名、パスワード、およびメール アドレスは、レジストリに対する個人の認証情報です。
Docker Hub でホストされるパブリック イメージ
関連する dockerhub ページに一覧表示されている pull
コマンド (1) からイメージ名を見つけることができます。
タグを指定しない場合、Docker では latest
バージョン タグを使用します。
image: openjdk
Docker Hub のイメージ バージョンとアカウントの両方を指定した場合の例は次のようになります。
image: account-name/openjdk:8
Docker Hub の外部でホストされるパブリック イメージ
Docker 以外が提供している、プライベート レジストリでホストされているイメージの場合、URL にイメージ名を含めます。
image: docker.someprovider.com/account-name/openjdk:8
プライベート ビルド イメージの使用
セルフホスト型のレジストリや、Docker Hub、Amazon ECR、Google GCR のプライベート イメージなどの、プライベートな Docker レジストリを認証する場合、YAML ファイル内でイメージ構成の一部としてユーザー名とパスワードを提供する必要があります。プロバイダによってはメール アドレスが要求される場合があるため。これを任意で含めることもできます。
Docker Hub でホストされるプライベート イメージ
セキュアな変数を使用してユーザー名やパスワードの変数を構成し、それらを次のように image の YAML 構成に含めることができます。
image:
name: account-name/openjdk:8
username: $DOCKER_HUB_USERNAME
password: $DOCKER_HUB_PASSWORD
email: $DOCKER_HUB_EMAIL
AWS ECR (EC2 コンテナ レジストリ) でホストされるプライベート イメージ
image が ECR でホストされている場合、YAML image 構成に "aws" セクションを追加して、セキュアな変数を使用してアクセス キーと秘密キーを提供できます。
image:
name: <aws_account_id>.dkr.ecr.<region>.amazonaws.com/openjdk:8
aws:
access-key: $AWS_ACCESS_KEY
secret-key: $AWS_SECRET_KEY
Google Container Registry (GCR) でホストされるプライベート イメージ
GCR のイメージをプルするには、GCP の管理コンソールで、Pipelines 用に "Viewer" アクセスを持つサービス アカウントを構成する必要があります。
生成された JSON 形式のプライベート キーをダウンロードし、Pipelines のセキュアな変数にコピー アンド ペーストします。構成した変数は次の例のように、YAML image 構成の password フィールドで直接使用できます。
image:
name: <region>.gcr.io/<project>/image:latest
username: _json_key
password: '$GCR_JSON_KEY'
その他のレジストリでホストされるイメージ
ほかのプライベート レジストリを使用する場合、イメージ名にレジストリの URL を含め、次の例のようにユーザー名/パスワードの認証情報を提供する必要があります。
image:
name: docker.your-company-name.com/account-name/openjdk:8
username: $USERNAME
password: $PASSWORD
email: $EMAIL
イメージのダイジェストの保存
確実に同じイメージを取得するには、イメージのハッシュ値またはダイジェスト値を参照します。ダイジェストは暗号化されたハッシュ値であり、イメージの内容が変更されるとダイジェストも変更されます。イメージのダイジェストを保存することで、変更が行われていない同じイメージを確実に参照できます。
イメージのダイジェストの使用
image:
name: ubuntu@sha256:a0ee7647e24c8494f1cf6b94f1a3cd127f423268293c25d924fbe18fd82db5a4
イメージのダイジェストの検索
> docker inspect --format='{{.RepoDigests}}' ubuntu
[ubuntu@sha256:a0ee7647e24c8494f1cf6b94f1a3cd127f423268293c25d924fbe18fd82db5a4]
既定ユーザーのオーバーライド
run-as-user としてユーザー UID を指定することで、イメージの既定ユーザーをオーバーライドできます。指定するユーザー UID は、有効なホーム ディレクトリを持つ、イメージ内に存在するものである必要があります。
image:
name: atlassian/default-image:2
run-as-user: 1000
カスタム ビルド環境の作成
独自の Docker ファイルを構築して、ビルド環境として使用することができます。この方法では、ビルドで必要なツールのみを含めることで、ビルド環境を非常に軽量に保つことができます。
リソース
- Docker をローカルにインストール: https://docs.docker.com/engine/installation/
- 独自の Docker イメージの構築: https://docs.docker.com/engine/userguide/dockerimages/
- 独自の Docker イメージを Docker Hub に公開する: https://docs.docker.com/engine/userguide/dockerimages/#push-an-image-to-docker-hub
- 独自の Docker イメージを独自のセルフホスト型レジストリに公開する: https://docs.docker.com/engine/userguide/containers/dockerimages/#push-an-image-to-docker-hub