dockerapi
is a Deno client library for interacting with Docker. It provides a
convenient way to manage Docker containers, images, networks, volumes, and
system operations programmatically.
To use dockerapi
in your Deno project, you can import it directly from the
repository:
import { Docker } from "https://deno.land/x/dockerapi/mod.ts";
const docker = new Docker("/var/run/docker.sock");
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["true"],
StopTimeout: 10,
});
console.log(container.id);
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["sleep", "500"],
StopTimeout: 10,
});
await container.start();
const info = await container.inspect();
console.log(info.State.Status); // "running"
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["sleep", "500"],
StopTimeout: 10,
});
await container.start();
await container.stop();
const info = await container.inspect();
console.log(info.State.Status); // "exited"
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["sleep", "500"],
StopTimeout: 10,
});
await container.rm();
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["sleep", "500"],
StopTimeout: 10,
});
await container.rename("MyNewContainer");
const info = await container.inspect();
console.log(info.Name); // "/MyNewContainer"
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["sleep", "500"],
StopTimeout: 10,
});
await container.start();
await container.kill();
const info = await container.inspect();
console.log(info.State.Status); // "exited"
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["sleep", "500"],
StopTimeout: 10,
});
await container.start();
await container.pause();
const info = await container.inspect();
console.log(info.State.Status); // "paused"
await container.unpause();
await container.stop();
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["sleep", "500"],
StopTimeout: 10,
});
const info = await container.inspect();
console.log(info);
const containers = await docker.containers.list();
containers.forEach((c) => console.log(c.id));
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["sleep", "500"],
StopTimeout: 10,
});
await container.start();
const info = await container.processes();
console.log(info.Processes);
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["/bin/sh", "-c", "touch file1 file2 file3 file4 file5"],
StopTimeout: 10,
});
await container.start();
const fsChanges = await container.fsChanges();
console.log(fsChanges);
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["sleep", "500"],
StopTimeout: 10,
});
await container.update({
CpusetCpus: "0,1",
});
const infoAfter = await container.inspect();
console.log(infoAfter.HostConfig.CpusetCpus); // "0,1"
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["sleep", "500"],
StopTimeout: 10,
});
await container.start();
const result = await container.wait();
console.log(result.StatusCode); // 0
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["sleep", "500"],
StopTimeout: 10,
});
const stats = await container.stats();
console.log(stats.cpu_stats.cpu_usage.percpu_usage);
const container = await docker.containers.create(cname("export"), {
Image: "alpine",
Cmd: ["true"],
StopTimeout: 10,
});
const tarStream = await container.export();
await Deno.writeFile("temp/alpine.tar", tarStream);
const container = await docker.containers.create(cname("export"), {
Image: "alpine",
Cmd: ["true"],
StopTimeout: 10,
});
await container.exportAsFile("temp/alpine.tar");
const images = await docker.images.list();
console.log(images.length);
const images = await docker.images.list();
const image = images[0];
const info = await image.inspect();
console.log(info);
const image = await docker.images.create("busybox", "uclibc");
const info = await image.inspect();
console.log(info.RepoTags);
const image = await docker.images.create("busybox", "uclibc");
const history = await image.history();
console.log(history);
const image = await docker.images.create("busybox", "uclibc");
await image.rm();
const result = await docker.images.search("busybox", 5);
console.log(result);
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["/bin/sh", "-c", "touch file1 file2 file3 file4 file5"],
StopTimeout: 10,
});
await container.start();
const image = await docker.images.commit(container, {
repo: "MyContainerImage",
tag: "0.0.1",
}, {});
console.log(image.id);
const image = await docker.images.create("busybox", "uclibc");
const tarStream = await image.export();
await Deno.writeFile("temp/busybox-uclibc.tar", tarStream);
const tarStream = await docker.images.exportByName("busybox");
await Deno.writeFile("temp/busybox.tar", tarStream);
const network = await docker.networks.create({
Name: "MyNetwork",
});
console.log(network.id);
const network = await docker.networks.create({
Name: "MyNetwork",
});
await network.rm();
const network = await docker.networks.create({
Name: "MyNetwork",
});
const info = await network.inspect();
console.log(info);
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["true"],
StopTimeout: 10,
});
const network = await docker.networks.create({
Name: "MyNetwork",
});
await network.connect(container);
const info = await container.inspect();
console.log(info.NetworkSettings.Networks["network-name"]);
const container = await docker.containers.create("MyContainer", {
Image: "ubuntu",
Cmd: ["true"],
StopTimeout: 10,
});
const network = await docker.networks.create({
Name: "MyNetwork",
});
await network.connect(container);
await network.disconnect(container);
const info = await container.inspect();
console.log(info.NetworkSettings.Networks["network-name"]);
const networks = await docker.networks.list();
console.log(networks.length);
await docker.networks.create({ Name: "unused-network" });
await docker.networks.prune();
const docker = new Docker("/var/run/docker.sock");
const volume = await docker.volumes.create({
Name: "myvolume",
});
console.log(volume.name);
const volume = await docker.volumes.create({
Name: "myvolume",
});
await volume.rm();
const volume = await docker.volumes.create({
Name: "myvolume",
});
const info = await volume.inspect();
console.log(info);
const result = await docker.volumes.list();
console.log(result.Volumes);
await volume.rm();
await docker.volumes.create({
Name: "unused-volume",
});
const result = await docker.volumes.prune();
console.log(result.VolumesDeleted.length);
const docker = new Docker("/var/run/docker.sock");
const sysInfo = await docker.system.info();
console.log(sysInfo);
const version = await docker.system.version();
console.log(version);
const pingResponse = await docker.system.ping();
console.log(pingResponse); // "OK"
const pingResponse = await docker.system.pingHead();
console.log(pingResponse); // "OK"
To run the tests for this library, use the following command:
deno task test
The tests will automatically create, start, stop, and remove containers, images, networks, and volumes to verify the functionality of the library.
Contributions are welcome! Please open an issue or submit a pull request to propose changes or additions.
This project is licensed under the MIT License. See the LICENSE file for details.