Skip to content

Commit 31130f9

Browse files
authored
Merge pull request #2 from silenium-dev/feature/podman
add podman support
2 parents 2ca5152 + 5fa7ffe commit 31130f9

82 files changed

Lines changed: 7915 additions & 250 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

examples/podman/main.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package main
2+
3+
import (
4+
"context"
5+
6+
"github.com/docker/docker/api/types/network"
7+
"github.com/silenium-dev/docker-wrapper/pkg/client"
8+
client2 "github.com/silenium-dev/docker-wrapper/pkg/client/podman/client"
9+
)
10+
11+
func main() {
12+
cli, err := client.NewWithOpts(client.FromEnv, client.WithVersionNegotiation)
13+
if err != nil {
14+
panic(err)
15+
}
16+
isPodman, err := cli.SystemIsPodman(context.Background())
17+
if err != nil {
18+
panic(err)
19+
}
20+
println("Is Podman:", isPodman)
21+
if isPodman {
22+
podmanCli, err := client2.FromDocker(context.Background(), cli, nil, nil)
23+
if err != nil {
24+
panic(err)
25+
}
26+
27+
info, err := podmanCli.SystemInfo(context.Background())
28+
if err != nil {
29+
panic(err)
30+
}
31+
println("Rootless:", info.Host.Security.Rootless)
32+
33+
socket, err := podmanCli.RemoteSocket(context.Background())
34+
if err != nil {
35+
panic(err)
36+
}
37+
println("Remote socket:", socket)
38+
}
39+
40+
netResp, err := cli.NetworkCreate(context.Background(), "test_network", network.CreateOptions{})
41+
if err != nil {
42+
panic(err)
43+
}
44+
defer cli.NetworkRemove(context.Background(), netResp.ID)
45+
46+
hostIP, err := cli.SystemHostIPFromContainers(context.Background(), &netResp.ID)
47+
if err != nil {
48+
panic(err)
49+
}
50+
println("Host IP from containers:", hostIP.String())
51+
}

examples/pull/main.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,24 @@ package main
22

33
import (
44
"context"
5+
"time"
6+
57
"github.com/distribution/reference"
68
"github.com/docker/docker/api/types/image"
79
"github.com/docker/docker/api/types/registry"
810
client2 "github.com/docker/docker/client"
911
"github.com/silenium-dev/docker-wrapper/pkg/client"
1012
"github.com/silenium-dev/docker-wrapper/pkg/client/auth"
1113
"go.uber.org/zap"
12-
"time"
1314
)
1415

1516
func main() {
1617
logger := zap.Must(zap.NewDevelopment()).Sugar()
17-
authProvider, err := auth.NewDefaultProvider()
18+
authProvider, err := auth.NewDefaultAuthProvider()
1819
if err != nil {
1920
panic(err)
2021
}
21-
override := auth.NewOverridingProvider(
22+
override := auth.NewOverridingAuthProvider(
2223
authProvider, map[string]registry.AuthConfig{},
2324
auth.WithSugaredLogger(logger.With(zap.String("component", "auth-provider"))),
2425
).WithOverride("quay.io", registry.AuthConfig{})
@@ -37,18 +38,20 @@ func main() {
3738
if err != nil {
3839
panic(err)
3940
}
40-
stateChan, err := cli.ImagePullWithState(context.Background(), ref, image.PullOptions{})
41+
id, manifest, stateChan, err := cli.ImagePullWithState(context.Background(), ref, image.PullOptions{})
4142
if err != nil {
4243
panic(err)
4344
}
45+
logger.Infof("Image ID: %s\n", id.String())
46+
logger.Infof("Manifest digest: %s\n", manifest.Config.Digest.String())
4447
for state := range stateChan {
4548
print("\033[2J")
4649
logger.Infof("%s", state.Status())
4750
for idx, l := range state.Layers() {
4851
logger.Infof("%02d [%s]: %s", idx, l.Id(), l.Status())
4952
}
5053
}
51-
digest, err := cli.ImagePull(context.Background(), ref, image.PullOptions{})
54+
digest, err := cli.ImagePullSimple(context.Background(), ref, image.PullOptions{})
5255
if err != nil {
5356
panic(err)
5457
}

examples/state_test/main.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/distribution/reference"
8+
"github.com/docker/docker/api/types/image"
9+
"github.com/silenium-dev/docker-wrapper/pkg/client"
10+
"github.com/silenium-dev/docker-wrapper/pkg/client/pull/events"
11+
)
12+
13+
func main() {
14+
ctx, cancel := context.WithCancel(context.Background())
15+
defer cancel()
16+
17+
cli, _ := client.NewWithOpts(client.FromEnv, client.WithVersionNegotiation)
18+
ref, _ := reference.ParseNormalizedNamed("localstack/localstack:3")
19+
id, manifest, eventChan, err := cli.ImagePullWithEvents(ctx, ref, image.PullOptions{})
20+
if err != nil {
21+
panic(err)
22+
}
23+
fmt.Println("Pulling:", id.String(), manifest.MediaType)
24+
layerTracker := map[string][]events.PullEvent{}
25+
var tracker []events.PullEvent
26+
for event := range eventChan {
27+
if le, ok := event.(events.LayerEvent); ok {
28+
layerTracker[le.LayerId()] = append(layerTracker[le.LayerId()], event)
29+
} else {
30+
tracker = append(tracker, event)
31+
}
32+
}
33+
fmt.Println("\nPull Events:")
34+
for _, pullEvent := range tracker {
35+
fmt.Printf(" %s\n", pullEvent.String())
36+
}
37+
fmt.Println("\nLayer Events:")
38+
for _, layer := range manifest.Layers {
39+
fmt.Printf("Layer %s:\n", layer.Digest.String())
40+
layerEvents := layerTracker[layer.Digest.Hex[:12]]
41+
for _, event := range layerEvents {
42+
fmt.Printf(" %s\n", event.String())
43+
}
44+
}
45+
}

go.mod

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,78 @@
11
module github.com/silenium-dev/docker-wrapper
22

3-
go 1.24
3+
go 1.24.0
4+
5+
toolchain go1.24.5
46

57
require (
8+
github.com/BurntSushi/toml v1.5.0
9+
github.com/Microsoft/go-winio v0.6.2
10+
github.com/blang/semver/v4 v4.0.0
611
github.com/containerd/errdefs v1.0.0
7-
github.com/containerd/platforms v0.2.1
12+
github.com/containerd/platforms v1.0.0-rc.1
13+
github.com/containers/common v0.64.1
14+
github.com/containers/podman/v5 v5.5.2
15+
github.com/containers/storage v1.59.1
816
github.com/cpuguy83/dockercfg v0.3.2
917
github.com/distribution/reference v0.6.0
10-
github.com/docker/docker v28.3.2+incompatible
18+
github.com/docker/docker v28.3.3+incompatible
1119
github.com/docker/go-units v0.5.0
1220
github.com/google/go-containerregistry v0.20.6
21+
github.com/hashicorp/go-multierror v1.1.1
22+
github.com/kevinburke/ssh_config v1.2.0
23+
github.com/moby/sys/capability v0.4.0
1324
github.com/opencontainers/go-digest v1.0.0
1425
github.com/opencontainers/image-spec v1.1.1
26+
github.com/opencontainers/runtime-spec v1.2.1
27+
github.com/opencontainers/selinux v1.12.0
28+
github.com/pkg/sftp v1.13.9
29+
github.com/sirupsen/logrus v1.9.3
30+
github.com/skeema/knownhosts v1.3.1
31+
github.com/stretchr/testify v1.10.0
1532
go.uber.org/zap v1.27.0
33+
golang.org/x/crypto v0.40.0
34+
golang.org/x/net v0.42.0
35+
golang.org/x/sys v0.34.0
36+
golang.org/x/term v0.33.0
37+
k8s.io/apimachinery v0.33.3
38+
tags.cncf.io/container-device-interface v1.0.1
1639
)
1740

1841
require (
19-
github.com/Microsoft/go-winio v0.6.2 // indirect
20-
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
2142
github.com/containerd/errdefs/pkg v0.3.0 // indirect
2243
github.com/containerd/log v0.1.0 // indirect
2344
github.com/containerd/stargz-snapshotter/estargz v0.17.0 // indirect
24-
github.com/docker/cli v28.3.2+incompatible // indirect
45+
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
46+
github.com/docker/cli v28.3.3+incompatible // indirect
2547
github.com/docker/distribution v2.8.3+incompatible // indirect
2648
github.com/docker/docker-credential-helpers v0.9.3 // indirect
2749
github.com/docker/go-connections v0.5.0 // indirect
2850
github.com/felixge/httpsnoop v1.0.4 // indirect
2951
github.com/go-logr/logr v1.4.3 // indirect
3052
github.com/go-logr/stdr v1.2.2 // indirect
3153
github.com/gogo/protobuf v1.3.2 // indirect
54+
github.com/hashicorp/errwrap v1.1.0 // indirect
3255
github.com/klauspost/compress v1.18.0 // indirect
56+
github.com/kr/fs v0.1.0 // indirect
3357
github.com/mitchellh/go-homedir v1.1.0 // indirect
3458
github.com/moby/docker-image-spec v1.3.1 // indirect
35-
github.com/moby/sys/sequential v0.6.0 // indirect
36-
github.com/moby/term v0.5.2 // indirect
59+
github.com/moby/sys/mountinfo v0.7.2 // indirect
60+
github.com/moby/sys/user v0.4.0 // indirect
3761
github.com/pkg/errors v0.9.1 // indirect
38-
github.com/sirupsen/logrus v1.9.3 // indirect
62+
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
3963
github.com/vbatts/tar-split v0.12.1 // indirect
4064
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
41-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
65+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.62.0 // indirect
4266
go.opentelemetry.io/otel v1.37.0 // indirect
4367
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.37.0 // indirect
68+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 // indirect
4469
go.opentelemetry.io/otel/metric v1.37.0 // indirect
45-
go.opentelemetry.io/otel/sdk v1.37.0 // indirect
4670
go.opentelemetry.io/otel/trace v1.37.0 // indirect
47-
go.opentelemetry.io/proto/otlp v1.7.0 // indirect
71+
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
4872
go.uber.org/multierr v1.11.0 // indirect
4973
golang.org/x/sync v0.16.0 // indirect
50-
golang.org/x/sys v0.34.0 // indirect
5174
golang.org/x/time v0.12.0 // indirect
52-
google.golang.org/protobuf v1.36.6 // indirect
53-
gotest.tools/v3 v3.5.2 // indirect
75+
google.golang.org/genproto/googleapis/api v0.0.0-20250804133106-a7a43d27e69b // indirect
76+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250804133106-a7a43d27e69b // indirect
77+
gopkg.in/yaml.v3 v3.0.1 // indirect
5478
)

0 commit comments

Comments
 (0)