Docker

Updated 2 years ago by Admin

Dockerプラグインを使用して、Docker-in-Dockerを使用してイメージをビルドし、Dockerレジストリに公開できます。次のパイプライン構成では、Dockerプラグインを使用してDockerイメージをビルドおよび公開します。

  • 設定例では、gitリポジトリのルートにあるDockerfileを使用してイメージをビルドして公開します。 Dockerコンテキストもデフォルトでgitリポジトリのルートになります。
    1  kind: pipeline
    2 name: default
    3
    4 steps:
    5 - name: docker
    6 image: plugins/docker
    7 settings:
    8 username: kevinbacon
    9 password: pa55word
    10 repo: foo/bar
    11 tags:
    12 - latest
  • 複数のタグを使用した構成例:
    1  steps:
    2 - name: docker
    3 image: plugins/docker
    4 settings:
    5 username: kevinbacon
    6 password: pa55word
    7 repo: foo/bar
    8 tags:
    9 - latest
    10 - '1.0.1'
    11 - '1.0
  • 設定例では、タグのコンマ区切りリストである.tagsファイルを使用して、タグを動的に設定します。このファイルが存在する場合、プラグインは自動的にこのファイルをロードします。
    1  steps:
    2 - name: build
    3 image: golang
    4 commands:
    5 - go build
    6 - go test
    7 - echo -n "5.2.6,5.2.4" > .tags
    8
    9 - name: docker
    10 image: plugins/docker
    11 settings:
    12 username: kevinbacon
    13 password: pa55word
    14 repo: foo/bar
  • ビルド引数を使用した構成例:
    1  steps:
    2 - name: docker
    3 image: plugins/docker
    4 settings:
    5 username: kevinbacon
    6 password: pa55word
    7 repo: foo/bar
    8 build_args:
    9 - HTTP_PROXY=http://yourproxy.com
  • ビルド引数としてシークレットを渡す構成の例:
    1  steps:
    2 - name: build-image
    3 image: plugins/docker
    4 environment:
    5 TOKEN:
    6 from_secret: one_of_the_tokens
    7 settings:
    8 username: kevinbacon
    9 password: pa55word
    10 repo: foo/bar
    11 build_args_from_env:
    12 - TOKEN
  • 代替Dockerfileを使用した構成例:
    1 steps:
    2 - name: docker
    3 image: plugins/docker
    4 settings:
    5 username: kevinbacon
    6 password: pa55word
    7 repo: foo/bar
    8 dockerfile: path/to/Dockerfile
  • カスタムレジストリを使用した構成例:
    1 steps:
    2 - name: docker
    3 image: plugins/docker
    4 settings:
    5 username: kevinbacon
    6 password: pa55word
    7 repo: index.company.com/foo/bar
    8 registry: index.company.com


シークレット

機密の構成パラメーターをシークレットから入手することは、ベストプラクティスと見なされます。次の例は、シークレットからユーザー名とパスワードを取得する方法を示しています。

1 kind: pipeline
2 name: default
3
4 steps:
5 - name: docker
6 image: plugins/docker
7 settings:
8 username:
9 from_secret: docker_username
10 password:
11 from_secret: docker_password
12 repo: foo/bar
13 tags:
14 - latest

自動タグ付け

Dockerプラグインは、イメージに自動的にタグを付けるように構成できます。この機能が有効で、イベントタイプがタグの場合、プラグインは標準のメジャー、マイナー、リリース規則を使用してイメージに自動的にタグを付けます。例えば:

  • v1.0.011.01.0.0を生成します
  • v1.0.0-rc.11.0.0-rc.1 を生成します

イベントタイプがプッシュで、ターゲットブランチがデフォルトブランチ(マスターなど)の場合、プラグインは自動的にイメージにlatestタグを付けます。他のすべてのイベントタイプとブランチは無視されます。

構成例:

1 steps:
2 - name: docker
3 image: plugins/docker
4 settings:
5 repo: foo/bar
6 auto_tag: true
7 username: kevinbacon
8 password: pa55word

タグサフィックスを使用した構成例:

1 steps:
2 - name: docker
3 image: plugins/docker
4 settings:
5 repo: foo/bar
6 auto_tag: true
7 auto_tag_suffix: linux-amd64
8 username: kevinbacon
9 password: pa55word

自動タグ付けは意図的に単純であり、独断的なものであることに注意してください。現時点では、ロジックをさらにカスタマイズするためのプルリクエストは受け付けていません。


パラメータ

  • registry
    このレジストリに対して認証
  • username
    このユーザー名で認証
  • password
    このパスワードで認証
  • repo
    イメージのリポジトリ名
  • tags
    画像のリポジトリタグ
  • dockerfile
    使用されるdockerfile、デフォルトはDockerfile
  • dry_run
    最後にDockerイメージをプッシュする必要がある場合はブール値
  • purge
    最後にDockerイメージのクリーンアップを行う必要がある場合はブール値
  • context
    使用するコンテキストパス、デフォルトはgitリポジトリのルート
  • target
    使用するビルドターゲットは、Dockerファイルで定義する必要あり
  • force_tag=false
    既存の一致した画像タグを置き換える
  • insecure=false
    このレジストリへの安全でない通信を有効にする
  • mirror
    中央のハブから直接イメージをプルする代わりに、ミラーレジストリを使用する
  • bip=false
    パスブリッジipに使用
  • custom_dns
    コンテナのカスタムDNSサーバを設定する
  • custom_dns_search
    dockerデーモンdns検索ドメイン
  • storage_driver
    aufs、オーバーレイ、またはvfsドライバをサポート
  • storage_path
    docker デーモンストレージパス
  • build_args
    カスタム引数をdocker buildに渡す
  • build_args_from_env
    envvarsをカスタム引数としてdocker buildに渡す
  • auto_tag=false
    gitブランチとgitタグに基づいてタグ名を自動的に生成
  • auto_tag_suffix
    この接尾辞でタグ名を生成
  • debug, launch_debug
    詳細デバッグモードでdockerデーモンを起動
  • mtu
    dockerデーモンカスタムmtu設定
  • ipv6
    dockerデーモンIPv6ネットワーキング
  • experimental
    dockerデーモン実験モード
  • daemon_off
    dockerデーモンを起動しない
  • cache_from
    キャッシュソースとして考慮する画像
  • squash
    ビルド時にレイヤーを潰す
  • pull_image
    ビルド時にベースイメージを強制的にプルする
  • compress
    gzipを使用してビルドコンテキストを圧縮する
  • custom_labels
    追加のk=vラベル
  • label_schema
    label-schemaラベル
  • email
    ドッカーメール
  • no_cache
    キャッシュされた中間コンテナを使用しない
  • add_host
    追加ホスト:IPマッピング


一般的な問題

ユーザー名、パスワードが不明

レジストリのユーザー名またはパスワードが見つからない場合は、パイプラインログに次のエントリが表示されます。この問題の最も一般的な根本原因は、構成のシークレットが間違っていることです。

Registry credentials or Docker config not provided. Guest mode enabled.

無効なユーザー名またはパスワード

レジストリのユーザー名とパスワードが無効な場合、パイプラインログに次のエントリが表示されます。この問題の最も一般的な原因は、改行や特殊文字がシークレット文字列とともに誤ってコピーされるなど、シークレットを作成する際のコピー/貼り付けの問題です。

level=fatal msg="Error authenticating: exit status 1"

安全でないレジストリ

レジストリが自己ホスト型で、レジストリがプレーンhttpまたは自己署名証明書を使用している場合、Dockerクライアントはレジストリへの安全な接続を確立できません。これにより、Dockerログインが次のエラーで失敗します。

level=fatal msg="Error authenticating: exit status 1"

これは、次のプラグイン構成で解決できます。

1 steps:
2 - name: docker
3 image: plugins/docker
4 settings:
5 repo: foo/bar
6 username: kevinbacon
7 password: pa55word
8 insecure: true


How did we do?