Bitbucket Pipelines で Docker コマンドを実行する

Bitbucket Pipelines のビルド パイプラインで Docker コマンドを実行することで、リポジトリの Dockerfile から Docker イメージをビルドし、それを Docker レジストリにプッシュできます。パイプライン環境はデフォルトで提供されているため、カスタマイズをすることなくすぐに利用を開始できます。

Docker へのアクセスの有効化

Docker デーモンへのアクセスを有効化するには、Docker を、ステップにサービスとして追加する (推奨) か、bitbucket-pipelines.yml のグローバル オプションに追加します。

1 2 3 4 5 6 7 pipelines: default: - step: script: - ... services: - docker

Docker を definitions セクションでサービスとして宣言する必要はありません。Docker は定義なしで利用できる、Pipelines のデフォルト サービスです。

リポジトリのすべてのビルド ステップに Docker を追加する

1 2 options: docker: true

ここで Docker を宣言した場合も、引き続き Pipelines のサービスとして扱われ、1 GB メモリの制限を持ち、ビルド ステップでは 2 つのサービスとの同時実行が許可されます。この設定は過去のサポートのために提供されたもので、パイプラインで実行できるサービス数の確認で混乱が生じる可能性があるため、ステップ レベルでの設定を行うことをおすすめします。

動作の仕組み

Docker をサービスとして構成すると、次のようになります。

  • Docker CLI 実行ファイルをビルド コンテナでマウント

  • Docker デーモンへのビルド アクセスの実行および提供

これは、docker version を実行することで確認できます。

1 2 3 4 5 6 7 pipelines: default: - step: script: - docker version services: - docker

オンライン バリデーターを使用して bitbucket-pipelines.yml ファイルをチェックすることができます。

Docker コマンドの実行

Pipelines スクリプトでは、ほとんどの Docker コマンドを実行できます。これらのコマンドの使用方法については「Docker コマンド ラインのリファレンス」を参照してください。

セキュリティ上の理由により、いくつかのコマンドやパラメーターの使用が制限されています。これには、Docker swarm 関連コマンド、docker run --privilegeddocker run --mount、および $BITBUCKET_CLONE_DIR 外部のソースとのボリュームのマッピングが含まれます。

制限されるコマンドの完全な一覧

アトラシアンでは、お客様のデータのセキュリティを非常に重視しています。クラウドにデータを保管している場合は特に注意します。ユーザー データを保護するため、以下が制限されています。

docker container run/docker run では、次のパラメーターは禁止されます。

  • privileged

  • device

  • mount

  • volume (/opt/atlassian/bitbucketci/agent/build/.* または /opt/atlassian/pipelines/agent/build/.* を除く)

  • pid

  • ipc

  • uts

  • userns

  • security-opt

  • cap-add

  • ネットワーク

docker container update/docker update では、次のパラメーターは禁止されます。

  • devices

docker container exec/docker exec では、次のパラメーターは禁止されます。

  • privileged

docker image build / docker build では、次のパラメーターは禁止されます。

  • security-opt

  • ネットワーク

Docker Compose の使用

コンテナで Docker Compose を使用したい場合は、自身のビルド コンテナと互換性のあるバイナリをインストールする必要があります。

外部の Docker デーモンを使用する

他の場所にホストされている独自の Docker デーモンに対してコマンドを実行するようにビルドを構成している場合、それを引き続き利用できます。この場合、Pipelines 内で Docker を有効化するのではなく、独自の CLI 実行ファイルをビルド イメージの一部として提供することをおすすめします。これにより、実行しているデーモン バージョンと CLI バージョンとの互換性を確保します。

Docker レイヤーのキャッシュについて

サービスとして Docker を追加した場合は、ステップに Docker キャッシュも追加できます。キャッシュを追加すると、以前にビルドしたレイヤーを再使用し、ステップでは必要に応じて新しい動的なレイヤーのみを作成するため、ビルドをより速く行うことができます。

1 2 3 4 5 6 7 8 9 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) を提供します。他のサービスや、追加メモリ用に大規模なビルドを構成しているかどうかに応じ、これをさらに増加できます (メモリ制限の詳細をご覧ください)。

1 2 3 4 5 6 7 8 9 10 11 pipelines: default: - step: script: - docker version services: - docker definitions: services: docker: memory: 2048

レジストリへのプッシュ時の認証

レジストリにイメージをプッシュするには、docker push を呼び出す前に docker login を使用して認証を行う必要があります。ユーザー名とパスワードは変数を使用して設定することをおすすめします。

たとえば、パイプラインのスクリプトに次のテキストを追加します。

1 docker login --username $DOCKER_USERNAME --password $DOCKER_PASSWORD

予約済みのポート

ポートの制限

予約済みの使用できないポートがあります。

  • 29418

最終更新日 2020年11月18日)
次でキャッシュ 7:12 PM on Oct 21, 2021 |

その他のヘルプ