mirror of
https://github.com/thegeeklab/wp-docker-buildx.git
synced 2024-11-14 19:10:41 +00:00
331 lines
8.0 KiB
Markdown
331 lines
8.0 KiB
Markdown
---
|
|
date: 2016-01-01T00:00:00+00:00
|
|
title: Docker
|
|
author: drone-plugins
|
|
tags: [ publish, docker ]
|
|
repo: drone-plugins/drone-docker
|
|
image: plugins/drone
|
|
---
|
|
|
|
The Docker plugin can be used to build and publish images to the Docker registry. The following pipeline configuration uses the Docker plugin to build and publish Docker images:
|
|
|
|
```yaml
|
|
pipeline:
|
|
docker:
|
|
image: plugins/docker
|
|
username: kevinbacon
|
|
password: pa55word
|
|
email: kevin.bacon@mail.com
|
|
repo: foo/bar
|
|
tags: latest
|
|
```
|
|
|
|
Example configuration using multiple tags:
|
|
|
|
```diff
|
|
pipeline:
|
|
docker:
|
|
image: plugins/docker
|
|
repo: foo/bar
|
|
- tags: latest
|
|
+ tags:
|
|
+ - latest
|
|
+ - 1.0.1
|
|
+ - 1.0
|
|
```
|
|
|
|
Example configuration using build arguments:
|
|
|
|
```diff
|
|
publish:
|
|
docker:
|
|
image: plugins/docker
|
|
repo: foo/bar
|
|
+ build_args:
|
|
+ - HTTP_PROXY=http://yourproxy.com
|
|
```
|
|
|
|
Example configuration using alternate Dockerfile:
|
|
|
|
```diff
|
|
publish:
|
|
docker:
|
|
image: plugins/docker
|
|
repo: foo/bar
|
|
- dockerfile: Dockerfile
|
|
+ dockerfile: path/to/Dockerfile
|
|
```
|
|
|
|
Example configuration using a custom registry:
|
|
|
|
```diff
|
|
pipeline:
|
|
docker:
|
|
image: plugins/docker
|
|
- repo: foo/bar
|
|
+ repo: index.company.com/foo/bar
|
|
+ registry: index.company.com
|
|
```
|
|
|
|
Example configuration using inline credentials:
|
|
|
|
```diff
|
|
pipeline:
|
|
docker:
|
|
image: plugins/docker
|
|
+ username: kevinbacon
|
|
+ password: pa55word
|
|
repo: foo/bar
|
|
```
|
|
|
|
# Secrets
|
|
|
|
The Docker plugin supports reading credentials from the Drone secret store. This is strongly recommended instead of storing credentials in the pipeline configuration in plain text.
|
|
|
|
```diff
|
|
pipeline:
|
|
docker:
|
|
image: plugins/docker
|
|
- username: kevinbacon
|
|
- password: pa55word
|
|
repo: foo/bar
|
|
```
|
|
|
|
Use the command line utility to add secrets to the store:
|
|
|
|
```nohighlight
|
|
drone secret add --image=plugins/docker \
|
|
octocat/hello-world DOCKER_USERNAME kevinbacon
|
|
|
|
drone secret add --image=plugins/docker \
|
|
octocat/hello-world DOCKER_PASSWORD pa55word
|
|
```
|
|
|
|
Don't forget to sign the Yaml after making changes:
|
|
|
|
```nohighlight
|
|
drone sign octocat/hello-world
|
|
```
|
|
|
|
# Secret Reference
|
|
|
|
DOCKER_USERNAME
|
|
: docker registry username
|
|
|
|
DOCKER_PASSWORD
|
|
: docker registry password
|
|
|
|
DOCKER_EMAIL
|
|
: docker registry email
|
|
|
|
# Parameter Reference
|
|
|
|
registry
|
|
: authenticates to this registry
|
|
|
|
username
|
|
: authenticates with this username
|
|
|
|
password
|
|
: authenticates with this password
|
|
|
|
email
|
|
: authenticates with this email
|
|
|
|
repo
|
|
: repository name for the image
|
|
|
|
tags
|
|
: repository tag for the image
|
|
|
|
dockerfile
|
|
: dockerfile to be used, defaults to Dockerfile
|
|
|
|
auth
|
|
: auth token for the registry
|
|
|
|
context
|
|
: the context path to use, defaults to root of the git repo
|
|
|
|
force_tag=false
|
|
: replace existing matched image tags
|
|
|
|
insecure=false
|
|
: enable insecure communication to this registry
|
|
|
|
mirror
|
|
: use a mirror registry instead of pulling images directly from the central Hub
|
|
|
|
bip=false
|
|
: use for pass bridge ip
|
|
|
|
dns
|
|
: set custom dns servers for the container
|
|
|
|
storage_driver
|
|
: supports `aufs`, `overlay` or `vfs` drivers
|
|
|
|
build_args
|
|
: custom arguments passed to docker build
|
|
|
|
Publish an image with multiple tags:
|
|
|
|
```yaml
|
|
pipeline:
|
|
docker:
|
|
image: plugins/docker
|
|
username: kevinbacon
|
|
password: pa55word
|
|
email: kevin.bacon@mail.com
|
|
repo: foo/bar
|
|
tags:
|
|
- latest
|
|
- 1.0.1
|
|
- "1.0"
|
|
```
|
|
|
|
Build an image with additional arguments:
|
|
|
|
```yaml
|
|
pipeline:
|
|
docker:
|
|
image: plugins/docker
|
|
username: kevinbacon
|
|
password: pa55word
|
|
email: kevin.bacon@mail.com
|
|
repo: foo/bar
|
|
build_args:
|
|
- HTTP_PROXY=http://yourproxy.com
|
|
```
|
|
|
|
## Using a custom registry
|
|
|
|
Please note that when using a custom registry (other than DockerHub) you will need to provide the registry URL and you will need to use a fully qualified repository name. For example:
|
|
|
|
```yaml
|
|
pipeline:
|
|
docker:
|
|
image: plugins/docker
|
|
registry: http://registry.company.com
|
|
repo: registry.company.com/my/image
|
|
```
|
|
|
|
## Caching
|
|
|
|
The Drone build environment is, by default, ephemeral meaning that you layers
|
|
are not saved between builds. There are two methods for caching your layers.
|
|
|
|
### Graph directory caching
|
|
|
|
This is the preferred method when using the `overlay` or `aufs` storage
|
|
drivers. Just use Drone's caching feature to backup and restore the directory
|
|
`/drone/docker`, as shown in the following example:
|
|
|
|
```yaml
|
|
pipeline:
|
|
sftp_cache:
|
|
image: plugins/sftp-cache
|
|
restore: true
|
|
mount: /drone/docker
|
|
|
|
docker:
|
|
image: plugins/docker
|
|
storage_path: /drone/docker
|
|
username: kevinbacon
|
|
password: pa55word
|
|
email: kevin.bacon@mail.com
|
|
repo: foo/bar
|
|
tags:
|
|
- latest
|
|
- "1.0.1"
|
|
|
|
sftp_cache:
|
|
image: plugins/sftp-cache
|
|
rebuild: true
|
|
mount: /drone/docker
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
For detailed output you can set the `DOCKER_LAUNCH_DEBUG` environment variable
|
|
in your plugin configuration. This starts Docker with verbose logging enabled.
|
|
|
|
```yaml
|
|
pipeline:
|
|
docker:
|
|
environment:
|
|
- DOCKER_LAUNCH_DEBUG=true
|
|
```
|
|
|
|
## Known Issues
|
|
|
|
There are known issues when attempting to run this plugin on CentOS, RedHat,
|
|
and Linux installations that do not have a supported storage driver installed.
|
|
You can check by running `docker info | grep 'Storage Driver:'` on your host
|
|
machine. If the storage driver is not `aufs` or `overlay` you will need to
|
|
re-configure your host machine.
|
|
|
|
This error occurs when trying to use the default `aufs` storage Driver but aufs
|
|
is not installed:
|
|
|
|
```
|
|
level=fatal msg="Error starting daemon: error initializing graphdriver: driver not supported
|
|
```
|
|
|
|
This error occurs when trying to use the `overlay` storage Driver but overlay
|
|
is not installed:
|
|
|
|
```
|
|
level=error msg="'overlay' not found as a supported filesystem on this host.
|
|
Please ensure kernel is new enough and has overlay support loaded."
|
|
level=fatal msg="Error starting daemon: error initializing graphdriver: driver not supported"
|
|
```
|
|
|
|
This error occurs when using CentOS or RedHat which default to the
|
|
`devicemapper` storage driver:
|
|
|
|
```
|
|
level=error msg="There are no more loopback devices available."
|
|
level=fatal msg="Error starting daemon: error initializing graphdriver: loopback mounting failed"
|
|
Cannot connect to the Docker daemon. Is 'docker -d' running on this host?
|
|
```
|
|
|
|
The above issue can be resolved by setting `storage_driver: vfs` in the
|
|
`.drone.yml` file. This may work, but will have very poor performance as
|
|
discussed [here](https://github.com/rancher/docker-from-scratch/issues/20).
|
|
|
|
This error occurs when using Debian wheezy or jessie and cgroups memory
|
|
features are not configured at the kernel level:
|
|
|
|
```
|
|
time="2015-12-17T08:06:57Z" level=debug msg="Mounting none /sys/fs/cgroup/blkio cgroup blkio"
|
|
time="2015-12-17T08:06:57Z" level=debug msg="Mounting none /sys/fs/cgroup/perf_event cgroup perf_event"
|
|
time="2015-12-17T08:06:57Z" level=debug msg="Mounting none /sys/fs/cgroup/cpuset cgroup cpuset"
|
|
time="2015-12-17T08:06:57Z" level=debug msg="Mounting none /sys/fs/cgroup/cpu,cpuacct cgroup cpu,cpuacct"
|
|
time="2015-12-17T08:06:57Z" level=debug msg="Creating /sys/fs/cgroup/memory"
|
|
time="2015-12-17T08:06:57Z" level=debug msg="Mounting none /sys/fs/cgroup/memory cgroup memory"
|
|
time="2015-12-17T08:06:57Z" level=fatal msg="no such file or directory"
|
|
```
|
|
|
|
The above issue can be resolved by editing your `grub.cfg` and adding
|
|
`cgroup_enable=memory swapaccount=1` to you kernel image. This change should
|
|
look like that afterwards:
|
|
|
|
```
|
|
menuentry 'Debian GNU/Linux, avec Linux 3.16.0-0.bpo.4-amd64' --class debian --class gnu-linux --class gnu --class os {
|
|
load_video
|
|
insmod gzio
|
|
insmod raid
|
|
insmod mdraid09
|
|
insmod part_msdos
|
|
insmod part_msdos
|
|
insmod part_msdos
|
|
insmod ext2
|
|
set root='(mduuid/dab6cffad124a3d7a4d2adc226fd5302)'
|
|
search --no-floppy --fs-uuid --set=root a4085974-c507-4993-a9ed-bdc17e375cad
|
|
echo 'Chargement de Linux 3.16.0-0.bpo.4-amd64 ...'
|
|
linux /boot/vmlinuz-3.16.0-0.bpo.4-amd64 root=/dev/md1 ro cgroup_enable=memory swapaccount=1 quiet
|
|
echo 'Chargement du disque mémoire initial ...'
|
|
initrd /boot/initrd.img-3.16.0-0.bpo.4-amd64
|
|
```
|