Docker
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.0
は1
、1.0
、1.0.0
を生成しますv1.0.0-rc.1
は1.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