@@ -57,11 +57,12 @@ type Changes struct {
5757}
5858
5959type 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
6566}
6667
6768var (
@@ -176,7 +177,7 @@ func Commit(ctx context.Context, client *containerd.Client, container containerd
176177 // Sync filesystem to make sure that all the data writes in container could be persisted to disk.
177178 Sync ()
178179
179- diffLayerDesc , diffID , err := createDiff (ctx , id , sn , client .ContentStore (), differ )
180+ diffLayerDesc , diffID , err := createDiff (ctx , id , sn , client .ContentStore (), differ , opts . Compression )
180181 if err != nil {
181182 return emptyDigest , fmt .Errorf ("failed to export layer: %w" , err )
182183 }
@@ -356,8 +357,14 @@ func writeContentsForImage(ctx context.Context, snName string, baseImg container
356357}
357358
358359// 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 ... )
361368 if err != nil {
362369 return ocispec.Descriptor {}, digest .Digest ("" ), err
363370 }
@@ -378,7 +385,7 @@ func createDiff(ctx context.Context, name string, sn snapshots.Snapshotter, cs c
378385 }
379386
380387 return ocispec.Descriptor {
381- MediaType : images . MediaTypeDockerSchema2LayerGzip ,
388+ MediaType : mediaType ,
382389 Digest : newDesc .Digest ,
383390 Size : info .Size ,
384391 }, diffID , nil
0 commit comments