@@ -57,11 +57,12 @@ type Changes struct {
57
57
}
58
58
59
59
type Opts struct {
60
- Author string
61
- Message string
62
- Ref string
63
- Pause bool
64
- Changes Changes
60
+ Author string
61
+ Message string
62
+ Ref string
63
+ Pause bool
64
+ Changes Changes
65
+ Compression string
65
66
}
66
67
67
68
var (
@@ -176,7 +177,7 @@ func Commit(ctx context.Context, client *containerd.Client, container containerd
176
177
// Sync filesystem to make sure that all the data writes in container could be persisted to disk.
177
178
Sync ()
178
179
179
- diffLayerDesc , diffID , err := createDiff (ctx , id , sn , client .ContentStore (), differ )
180
+ diffLayerDesc , diffID , err := createDiff (ctx , id , sn , client .ContentStore (), differ , opts . Compression )
180
181
if err != nil {
181
182
return emptyDigest , fmt .Errorf ("failed to export layer: %w" , err )
182
183
}
@@ -356,8 +357,14 @@ func writeContentsForImage(ctx context.Context, snName string, baseImg container
356
357
}
357
358
358
359
// createDiff creates a layer diff into containerd's content store.
359
- func createDiff (ctx context.Context , name string , sn snapshots.Snapshotter , cs content.Store , comparer diff.Comparer ) (ocispec.Descriptor , digest.Digest , error ) {
360
- newDesc , err := rootfs .CreateDiff (ctx , name , sn , comparer )
360
+ func createDiff (ctx context.Context , name string , sn snapshots.Snapshotter , cs content.Store , comparer diff.Comparer , compression string ) (ocispec.Descriptor , digest.Digest , error ) {
361
+ opts := make ([]diff.Opt , 0 )
362
+ mediaType := images .MediaTypeDockerSchema2LayerGzip
363
+ if compression == "zstd" {
364
+ opts = append (opts , diff .WithMediaType (ocispec .MediaTypeImageLayerZstd ))
365
+ mediaType = images .MediaTypeDockerSchema2LayerZstd
366
+ }
367
+ newDesc , err := rootfs .CreateDiff (ctx , name , sn , comparer , opts ... )
361
368
if err != nil {
362
369
return ocispec.Descriptor {}, digest .Digest ("" ), err
363
370
}
@@ -378,7 +385,7 @@ func createDiff(ctx context.Context, name string, sn snapshots.Snapshotter, cs c
378
385
}
379
386
380
387
return ocispec.Descriptor {
381
- MediaType : images . MediaTypeDockerSchema2LayerGzip ,
388
+ MediaType : mediaType ,
382
389
Digest : newDesc .Digest ,
383
390
Size : info .Size ,
384
391
}, diffID , nil
0 commit comments