简介
simple-dockerode 是一款便捷的 Node.js 模块,用于与 Docker 容器进行交互。它基于 Docker Remote API,使得开发者们可以通过简单的 JavaScript 代码实现 Docker 容器的创建、运行、停止、删除、查看等操作。此模块几乎支持所有 Docker Remote API 提供的功能,使用简单、易于扩展。
安装
使用 npm 进行简单的安装:
npm install simple-dockerode
使用
在代码中引用模块:
const Docker = require('simple-dockerode');
实例化 Docker 对象:
const docker = new Docker({ socketPath: '/var/run/docker.sock' });
其中 socketPath 表示 Docker 的 socket 路径。
创建容器
使用 Docker.createContainer(option: object) 方法创建 Docker 容器。其中 option 包含了创建容器的参数。
示例代码:
-- -------------------- ---- ------- ----- ------ - - ------ -------- ------------- - --------- -- -- ----------- - ------------- - --------- -- --------- ------ -- - - -- ------------------------------ --------------- -- --------------- --------------- ------- ---------- -- -------------------- ----------
其中 Image 表示容器的镜像,ExposedPorts 表示容器的开放端口,HostConfig 表示容器的主机配置。
运行容器
使用 Docker.startContainer(container: object) 方法运行 Docker 容器。其中 container 表示 Docker.createContainer() 方法返回的容器对象。
示例代码:
docker.startContainer(container) .then(() => console.log(`容器 ${container.id} 运行成功`)) .catch(err => console.log(`容器运行失败: ${err}`));
停止容器
使用 Docker.stopContainer(container: object) 方法停止 Docker 容器。其中 container 表示 Docker.createContainer() 方法返回的容器对象。
示例代码:
docker.stopContainer(container) .then(() => console.log(`容器 ${container.id} 停止成功`)) .catch(err => console.log(`容器停止失败: ${err}`));
查看容器
使用 Docker.listContainers() 方法查看所有运行中的 Docker 容器。
示例代码:
docker.listContainers() .then(containers => { containers.forEach(container => console.log(`容器 ${container.Id} 在运行`)); }) .catch(err => console.log(`查看容器出错: ${JSON.stringify(err)}`));
删除容器
使用 Docker.removeContainer(container: object) 方法删除 Docker 容器。其中 container 表示 Docker.createContainer() 方法返回的容器对象。
示例代码:
docker.removeContainer(container) .then(() => console.log(`容器 ${container.id} 删除成功`)) .catch(err => console.log(`容器删除失败: ${err}`));
总结
使用 simple-dockerode,我们可以通过简单的 JavaScript 代码实现 Docker 容器的创建、运行、停止、删除、查看等操作。此模块几乎支持所有 Docker Remote API 提供的功能,使用简单、易于扩展,具有很高的可用性和可读性。
参考资料
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60058a9681e8991b448ed398