Bitbucket Pipelines で Docker コマンドを実行する
Bitbucket Pipelines のビルド パイプラインで Docker コマンドを実行することで、リポジトリの Dockerfile から Docker イメージをビルドし、それを Docker レジストリにプッシュできます。パイプライン環境はデフォルトで提供されているため、カスタマイズをすることなくすぐに利用を開始できます。
Docker へのアクセスの有効化
Docker デーモンへのアクセスを有効化するには、docker
をステップにサービスとして追加する (推奨) か、bitbucket-pipelines.yml
にグローバル オプションを追加します。
ビルド ステップで Docker をサービスとして追加する (推奨)
pipelines:
default:
- step:
script:
- ...
services:
- docker
Docker を definitions
セクションでサービスとして宣言する必要はありません。Docker は定義なしで利用できる、Pipelines で提供されるデフォルト サービスです。
リポジトリのすべてのビルド ステップに Docker を追加する
options:
docker: true
ここで Docker を宣言した場合も、引き続き Pipelines のサービスとして扱わ、1 GB メモリの制限を持ち、ビルド ステップでは 2 つのサービスとの同時実行が許可されます。この設定は過去のサポートのために提供されたもので、パイプラインで実行できるサービス数の確認で混乱が生じる可能性があるため、ステップ レベルでの設定を行うことをおすすめします。
動作の仕組み
Docker をサービスとして構成すると、次のようになります。
- Docker CLI 実行ファイルをビルド コンテナでマウント
- Docker デーモンへのビルド アクセスの実行および提供
これは、docker version
を実行することで確認できます。
pipelines:
default:
- step:
script:
- docker version
services:
- docker
オンライン バリデーターを使用して bitbucket-pipelines.yml ファイルをチェックすることができます。
Docker コマンドの実行
Pipelines スクリプトでは、ほとんどの Docker コマンドを実行できます。これらのコマンドの使用方法については「Docker コマンド ラインのリファレンス」を参照してください。
セキュリティ上の理由により、いくつかのコマンドやパラメーターの使用が制限されています。これには、Docker swarm 関連コマンド、docker run --privileged
、docker run --mount
、および $BITBUCKET_CLONE_DIR
外部のソースとのボリュームのマッピングが含まれます。
Docker Compose の使用
コンテナで Docker Compose を使用したい場合は、自身のビルド コンテナと互換性のあるバイナリをインストールする必要があります。
外部の Docker デーモンを使用する
他の場所にホストされている独自の Docker デーモンに対してコマンドを実行するようにビルドを構成している場合、それを引き続き利用できます。この場合、Pipelines 内で Docker を有効化するのではなく、独自の CLI 実行ファイルをビルド イメージの一部として提供することをおすすめします。これにより、実行しているデーモン バージョンと CLI バージョンとの互換性を確保します。
Docker レイヤーのキャッシュについて
サービスとして Docker を追加した場合は、ステップに Docker キャッシュも追加できます。キャッシュを追加すると、以前にビルドしたレイヤーを再使用し、ステップでは必要に応じて新しい動的なレイヤーのみを作成するため、ビルドをより速く行うことができます。
pipelines:
default:
- step:
script:
- docker build ...
services:
- docker
caches:
- docker # adds docker layer caching
Docker キャッシュの一般的な使用事例として、イメージのビルドがあります。キャッシュを有効化することでパフォーマンスが低下する場合、dockerfile のレイヤーが無効化されていないことを確認します。
Docker レイヤー キャッシュは、「キャッシュの依存関係」で説明されている通常のキャッシュと同様の制限および挙動を持ちます。
Docker のメモリ制限
既定では、Pipelines の Docker デーモンの合計メモリの上限は 1024 MB です。この割り当てには、docker run
コマンド経由で実行するすべてのコンテナと、docker build
コマンドの実行に必要なメモリが含まれます。
Docker で利用可能なメモリを増やすには、組み込みの docker
サービスのメモリ制限を変更できます。memory
パラメーターは 128 MB よりも大きい整数値で、ステップで利用可能なメモリにおさまるようにする必要があります。
以下の例では、docker サービスに、デフォルトの割り当てである 1024 MB の 2 倍 (2048 MB) を提供します。他のサービスや、追加メモリ用に大規模なビルドを構成しているかどうかに応じ、これをさらに増加できます (メモリ制限の詳細をご覧ください)。
pipelines:
default:
- step:
script:
- docker version
services:
- docker
definitions:
services:
docker:
memory: 2048
レジストリへのプッシュ時の認証
レジストリにイメージをプッシュするには、docker login
を使用して認証を行ってから docker push
を呼び出す必要があります。ユーザー名とパスワードは変数を使用して設定することをおすすめします。
たとえば、パイプラインのスクリプトに次のテキストを追加します。
docker login --username $DOCKER_USERNAME --password $DOCKER_PASSWORD
予約済みのポート
ポートの制限
予約済みの使用できないポートがあります。
29418