Skip to content

ptitjes/yoki

 
 

Repository files navigation

Yoki Yoki logo

Build Integration Tests Maven Central

Yoki allows you to interact with the Docker Engine Remote API in a simplified and fast way.

Installation

repositories {
    mavenCentral()
}

dependencies {
    implementation("me.devnatan:yoki:0.5.0")
}

For JVM users, use the Yoki JVM artifact

implementation 'me.devnatan:yoki-jvm:0.5.0'

Basic Usage

Use Yoki.create() to create a new Yoki client instance with the default settings, default settings are based on the current platform or environment variables, e.g.: socket path will be set to DOCKER_HOST if present otherwise unix://var/run/docker.sock if the current platform is Unix-like.

val client = Yoki.create()

To change the default configuration properties use YokiConfig and Yoki overload.

val client = Yoki {
    // this: YokiConfigBuilder
}

In Java code you can use YokiConfigBuilder with YokiConfig.builder().

YokiConfig config = YokiConfig.builder().socketPath(...).build();
Yoki client = Yoki.create(config);

To Docker resources, functions will return CompletableFuture<T> or YokiFlow<T> (for streaming) due to Java Interoperatibility but there are extensions for Kotlin that are suspend and for streaming returns Flow<T>.

Get System Information
val version: SystemVersion = client.system.version()
Create and start a Container with explicit port bindings
val containerId = client.containers.create("busybox:latest") {
    // Only if your container doesn't already expose this port
    exposedPort(80u)

    hostConfig {
        portBindings(80u) {
            add(PortBinding("0.0.0.0", 8080u))
        }
    }
}

client.containers.start(containerId)
Create and start a Container with auto-assigned port bindings
val containerId = client.containers.create("busybox:latest") {
    // Only if your container doesn't already expose this port
    exposedPort(80u)
    
    hostConfig {
        portBindings(80u)
    }
}

client.containers.start(containerId)

// Inspect the container to retrieve the auto-assigned ports
val container = testClient.containers.inspect(id)
val ports = container.networkSettings.ports
List All Containers
val containers: List<Container> = client.containers.list()
Create a new Network
val networkId: String = client.networks.create {
    name = "octopus-net"
    driver = "overlay"
}
Stream Container Logs
val logs: Flow<Frame> = client.containers.logs("floral-fury") {
    stderr = true
    stdout = true
}

logs.onStart { /* streaming started */ }
    .onCompletion { /* streaming finished */ }
    .catch { /* something went wrong */ }
    .collect { log -> /* do something with each log */ }
final YokiFlow<Frame> callback = new YokiFlow<Frame>() {
    @Override
    public void onEach(Frame log) { /* do something with each log */ }

    @Override
    public void onStart() { /* streaming started */ }

    @Override
    public void onComplete(Throwable error) { /* streaming finished */ }
    
    @Override
    public void onError(Throwable cause) { /* something went wrong */ }
};

client.containers.logsAsync("floral-fury", callback);

// Short version
client.containers.logsAsync("floral-fury", (log) -> /* do something with each log */);

License

Yoki is licensed under the MIT license.

About

Docker Engine Remote API client

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 100.0%