Web前端也能ALL IN Docker

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

评论