Merge pull request #36 from djmaze/docker-graph-caching
Docker graph caching
This commit is contained in:
commit
17b6c14342
30
DOCS.md
30
DOCS.md
@ -78,9 +78,35 @@ publish:
|
||||
- HTTP_PROXY=http://yourproxy.com
|
||||
```
|
||||
|
||||
## Layer Caching
|
||||
## 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:
|
||||
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
|
||||
publish:
|
||||
docker:
|
||||
username: kevinbacon
|
||||
password: pa55word
|
||||
email: kevin.bacon@mail.com
|
||||
repo: foo/bar
|
||||
tag:
|
||||
- latest
|
||||
- "1.0.1"
|
||||
|
||||
cache:
|
||||
mount:
|
||||
- /drone/docker
|
||||
```
|
||||
|
||||
NOTE: This probably won't work correctly with the `btrfs` driver, and it will be very inefficient with the `devicemapper` driver. Please make sure to use the `overlay` or `aufs` storage driver with this method.
|
||||
|
||||
### Layer Caching
|
||||
|
||||
The below example combines Drone's caching feature and Docker's `save` and `load` capabilities to cache and restore image layers between builds:
|
||||
|
||||
```yaml
|
||||
publish:
|
||||
|
26
main.go
26
main.go
@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
@ -93,7 +94,7 @@ func main() {
|
||||
}
|
||||
|
||||
go func() {
|
||||
args := []string{"daemon"}
|
||||
args := []string{"daemon", "-g", "/drone/docker"}
|
||||
|
||||
if len(vargs.Storage) != 0 {
|
||||
args = append(args, "-s", vargs.Storage)
|
||||
@ -228,6 +229,29 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
// Remove untagged images, if any
|
||||
var outbuf bytes.Buffer
|
||||
cmd = exec.Command("docker", "images", "-q", "-f", "dangling=true")
|
||||
cmd.Stdout = &outbuf
|
||||
cmd.Stderr = os.Stderr
|
||||
trace(cmd)
|
||||
err = cmd.Run()
|
||||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if outbuf.Len() > 0 {
|
||||
images := strings.Split(strings.TrimSpace(outbuf.String()), "\n")
|
||||
cmd = exec.Command("docker", append([]string{"rmi"}, images...)...)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
trace(cmd)
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
// Save to tarred image repository
|
||||
if len(vargs.Save.File) != 0 {
|
||||
// if the destination directory does not exist, create it
|
||||
|
Loading…
Reference in New Issue
Block a user