最近有一個需求是希望使用 Docker 可以直接呼叫外面系統的 Docker 讓程式可以直接控制其他 Docker 的開關,所以這邊介紹一個 Docker 使用 Ubuntu docker 為範例使用 Node.js 呼叫 Docker 指令的方法
Dockerfile 安裝 Docker 與 Node.js
要讓 docker 內部可以呼叫 docker 指令需要先建立環境,有幾個必要的軟體需要先安裝
安裝必要軟體
apt-get update -qq && apt-get install -qqy \ apt-transport-https \ ca-certificates \ curl \ lxc \ iptables
安裝 Docker
curl -sSL https://get.docker.com/ | sh
安裝 Node.js
curl -fsSL https://deb.nodesource.com/setup_16.x | bash - && \ apt-get install -y nodejs
使用 Node.js 呼叫 Docker 指令
Node.js 可以直接使用呼叫指令的方法呼叫 Docker command,通常直接使用 exec
的方法呼叫就可以了
const util = require('util'); const exec = util.promisify(require('child_process').exec); async function dockerVersion() { const { stdout, stderr } = await exec('docker version'); console.log('stdout:', stdout); console.log('stderr:', stderr); } dockerVersion();
Docker build image
Docker build docker image 來使用範例先把它 build 成 image 名稱 node-docker
docker build -t node-docker .
呼叫 Docker 前掛載本機檔案
執行 Docker 前掛載本地 docker.sock 資料夾讓 Docker 裏面可以呼叫到外部系統的 Docker
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock node-docker
完整範例參考:https://github.com/clarencetw/node-docker
《AWS CDK 完全學習手冊:打造雲端基礎架構程式碼 IaC》
第 12 屆 iT 邦幫忙鐵人賽 DevOps 組冠的《用 CDK 定 義 AWS 架構》
第 11 屆 iT 邦幫忙鐵人賽《LINE bot 好好玩 30 天玩轉 LINE API》
一個熱愛分享的雲端工程師!