6.7 KiB
Use the Docker plugin to build and push Docker images to a registry. The following parameters are used to configure this plugin:
registry
- authenticates to this registryusername
- authenticates with this usernamepassword
- authenticates with this passwordemail
- authenticates with this emailrepo
- repository name for the imagetag
- repository tag for the imagefile
- dockerfile to be used, defaults to Dockerfileauth
- auth token for the registrycontext
- the context path to use, defaults to root of the git repoforce_tag
- replace existing matched image tagsinsecure
- enable insecure communication to this registrymirror
- use a mirror registry instead of pulling images directly from the central Hubbip
- use for pass bridge ipdns
- set custom dns servers for the containerstorage_driver
- useaufs
,devicemapper
,btrfs
oroverlay
driversave
- save image layers to the specified tar file (see docker save)destination
- absolute / relative destination pathtag
- cherry-pick tags to save (optional)
load
- restore image layers from the specified tar filebuild_args
- build arguments to pass todocker build
The following is a sample Docker configuration in your .drone.yml file:
publish:
docker:
username: kevinbacon
password: pa55word
email: kevin.bacon@mail.com
repo: foo/bar
tag: latest
file: Dockerfile
insecure: false
You may want to dynamically tag your image. Use the $$BRANCH
, $$COMMIT
and $$BUILD_NUMBER
variables to tag your image with the branch, commit sha or build number:
publish:
docker:
username: kevinbacon
password: pa55word
email: kevin.bacon@mail.com
repo: foo/bar
tag: $$BRANCH
Or you may prefer to build an image with multiple tags:
publish:
docker:
username: kevinbacon
password: pa55word
email: kevin.bacon@mail.com
repo: foo/bar
tag:
- latest
- "1.0.1"
- "1.0"
Note that in the above example we quote the version numbers. If the yaml parser interprets the value as a number it will cause a parsing error.
It's also possible to pass build arguments to docker:
publish:
docker:
username: kevinbacon
password: pa55word
email: kevin.bacon@mail.com
repo: foo/bar
build_args:
- HTTP_PROXY=http://yourproxy.com
Layer Caching
The Drone build environment is, by default, ephemeral meaning that you layers are not saved between builds. The below example combines Drone's caching feature and Docker's save
and load
capabilities to cache and restore image layers between builds:
publish:
docker:
username: kevinbacon
password: pa55word
email: kevin.bacon@mail.com
repo: foo/bar
tag:
- latest
- "1.0.1"
load: docker/image.tar
save:
destination: docker/image.tar
tag: latest
cache:
mount:
- docker/image.tar
You might also want to create a .dockerignore
file in your repo to exclude image.tar
from Docker build context:
docker/*
In some cases caching will greatly improve build performance, however, the tradeoff is that caching Docker image layers may consume very large amounts of disk space.
Troubleshooting
For detailed output you can set the DOCKER_LAUNCH_DEBUG
environment variable in your plugin configuration. This starts Docker with verbose logging enabled.
publish:
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.
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