1)创建Dockerfile
FROM nginx:1.15
MAINTAINER itmx
EXPOSE 80
RUN rm -rf /usr/share/nginx/html/*
ADD nginx.conf /etc/nginx/nginx.conf
ADD dist/ /usr/share/nginx/html/
2)创建nginx.conf
user nginx;
worker_processes auto;
error_log /dev/null;
pid /var/run/nginx.pid;
events {
worker_connections 2048;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log off;
server_tokens off;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name _;
location / {
client_max_body_size 1g;
proxy_pass http://app:8080;
}
location /web {
index index.html;
alias /usr/share/nginx/html;
}
}
}
3)安装npm插件
npm install node-docker-api tar-fs
4)创建打包脚本 build-docker.js
'use strict';
const { Docker } = require('node-docker-api');
const tar = require('tar-fs');
const fs = require('fs');
const promisifyStream = stream => new Promise((resolve, reject) => {
stream.on('data', data => console.log(data.toString()))
stream.on('end', resolve)
stream.on('error', reject)
});
const docker = new Docker({
host: 'http://192.168.1.253',
port: 2375
});
let tarStream = tar.pack('./', {
ignore: name => !(name.startsWith('dist') || name.startsWith('Dockerfile') || name.startsWith('nginx.conf'))
})
const packageJson = JSON.parse(fs.readFileSync('./package.json'))
docker.image.build(tarStream, {
t: `hub.itmx.xyz/itmx/${packageJson.name}:${packageJson.version}`
})
.then(stream => promisifyStream(stream))
.catch(error => console.log(error));
if (fs.existsSync('./.dockerconfig')) {
docker.image.get(`hub.itmx.xyz/itmx/${packageJson.name}:${packageJson.version}`)
.push(JSON.parse(fs.readFileSync('./.dockerconfig')))
.then(stream => promisifyStream(stream))
.catch(error => console.log(error));
} else {
console.log("需要在项目根目录创建文件才能推送到Docker私服,内容如下:", {
"username": "string",
"password": "string",
"email": "string"
})
}
5)在package.json中的scripts中增加一项
"buildDocker": "gulp && node build-docker.js"
参考:https://www.npmjs.com/package/node-docker-api