Commit d34e3346 authored by nilanjandaw's avatar nilanjandaw

docker container usability added

parent 96eb519a
const isolateBackend = require('./isolate') const isolateBackend = require('./isolate')
const fs = require('fs') const fs = require('fs')
const { spawn } = require('child_process'); const { spawn } = require('child_process');
const registry_url = "10.129.6.5:5000/"
function runIsolate(filename) { function runIsolate(filename) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
...@@ -56,23 +57,92 @@ function runContainer(imageName) { ...@@ -56,23 +57,92 @@ function runContainer(imageName) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let timeStart = Date.now() let timeStart = Date.now()
const process = spawn('docker', ["run", "--name", imageName, imageName]);
let result = "";
process.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
let timeDifference = Math.ceil((Date.now() - timeStart))
console.log("container run time taken: ", timeDifference);
result += data;
});
process.stderr.on('data', (data) => { const process_checkImage = spawn('docker', ["inspect", registry_url + imageName])
console.error(`stderr: ${data}`);
reject(data); process_checkImage.on('close', (code) => {
}); if (code != 0) {
const process_pullImage = spawn('docker', ["pull", registry_url + imageName]);
process.on('close', (code) => {
resolve(result); process_pullImage.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
reject(data);
});
process_pullImage.on('close', (code) => {
if (code != 0)
reject("error")
else {
const process = spawn('docker', ["run", "--name", imageName, registry_url + imageName]);
let result = "";
timeStart = Date.now()
process.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
let timeDifference = Math.ceil((Date.now() - timeStart))
console.log("container run time taken: ", timeDifference);
result += data;
});
process.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
reject(data);
});
process.on('close', (code) => {
resolve(result);
})
}
})
} else {
const process_checkContainer = spawn('docker', ['container', 'inspect', imageName]);
process_checkContainer.on('close', (code) => {
if (code != 0) {
const process = spawn('docker', ["run", "--name", imageName, registry_url + imageName]);
let result = "";
timeStart = Date.now()
process.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
let timeDifference = Math.ceil((Date.now() - timeStart))
console.log("container run time taken: ", timeDifference);
result += data;
});
process.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
reject(data);
});
process.on('close', (code) => {
resolve(result);
})
} else {
const process = spawn('docker', ["start", "-a", imageName]);
let result = "";
timeStart = Date.now()
process.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
let timeDifference = Math.ceil((Date.now() - timeStart))
console.log("container run time taken: ", timeDifference);
result += data;
});
process.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
reject(data);
});
process.on('close', (code) => {
resolve(result);
})
}
})
}
}) })
}) })
} }
......
...@@ -16,7 +16,7 @@ let db = new Map() ...@@ -16,7 +16,7 @@ let db = new Map()
app.use(morgan('combined')) app.use(morgan('combined'))
app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json()) app.use(bodyParser.json())
const file_path = __dirname + "/repository" const file_path = __dirname + "/repository/"
app.use('/repository', express.static(file_path)); app.use('/repository', express.static(file_path));
app.use(fileUpload()) app.use(fileUpload())
...@@ -26,7 +26,7 @@ let requestQueue = [] ...@@ -26,7 +26,7 @@ let requestQueue = []
const node_id = "20sez54hq8" const node_id = "20sez54hq8"
const WINDOW_SIZE = 10 const WINDOW_SIZE = 10
const port = 8080 const port = 8080
const registry_url = "10.129.6.5:5000/"
app.post('/serverless/deploy', (req, res) => { app.post('/serverless/deploy', (req, res) => {
...@@ -42,7 +42,7 @@ app.post('/serverless/deploy', (req, res) => { ...@@ -42,7 +42,7 @@ app.post('/serverless/deploy', (req, res) => {
} }
else { else {
if (runtime === "container") { if (runtime === "container") {
deployContainer('./repository/', functionHash) deployContainer(file_path, functionHash)
.then(() => { .then(() => {
res.json({ res.json({
status: "success", status: "success",
...@@ -85,7 +85,7 @@ function deployContainer(path, imageName) { ...@@ -85,7 +85,7 @@ function deployContainer(path, imageName) {
} }
else { else {
console.log('Dockerfile created'); console.log('Dockerfile created');
const process = spawn('docker', ["build", "-t", imageName, path, "-q"]); const process = spawn('docker', ["build", "-t", registry_url + imageName, path]);
process.stdout.on('data', (data) => { process.stdout.on('data', (data) => {
console.log(`stdout: ${data}`); console.log(`stdout: ${data}`);
...@@ -100,7 +100,22 @@ function deployContainer(path, imageName) { ...@@ -100,7 +100,22 @@ function deployContainer(path, imageName) {
console.log(`child process exited with code ${code}`); console.log(`child process exited with code ${code}`);
let timeDifference = Math.ceil((Date.now() - buildStart)) let timeDifference = Math.ceil((Date.now() - buildStart))
console.log("image build time taken: ", timeDifference); console.log("image build time taken: ", timeDifference);
resolve(); const process_push = spawn('docker', ["push", registry_url + imageName]);
process_push.stdout.on('data', (data) => {
console.log(`stdout: ${data}`);
});
process_push.stderr.on('data', (data) => {
console.error(`stderr: ${data}`);
});
process_push.on('close', (code) => {
console.log("image pushed to repository");
resolve();
})
}); });
} }
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment