如何使用Docker容器

时间:2017-05-16 14:12:59

标签: angular docker angular2-routing html5mode

如何使用docker容器部署angular2 app,

目前我正在使用Node js with express来提供我的应用内容,

index.js

 // set server port. SERVER_PORT varibale will come from Dockerfile
var port = process.env.SERVER_PORT;
if (!port) {
    port = 3000;
}
// set internal communication url
global.internalURL = "http://localhost:" + port;

var path = require('path');
var express = require('express');
var app = express();
var bodyParser = require("body-parser");

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

app.use(function(req, res, next) {

    // Website you wish to allow to connect
    res.setHeader('Access-Control-Allow-Origin', '*');

    // Request methods you wish to allow
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, OPTIONS, PATCH, DELETE');

    // Request headers you wish to allow
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type,access_token');

    // Set to true if you need the website to include cookies in the requests sent
    // to the API (e.g. in case you use sessions)
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});

var router = express.Router(express);
app.use("/testapp", router);

router.use(express.static(path.join(__dirname, 'dist')));

// Catch all other routes and return the index file
router.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, 'dist/index.html'));
});

var server = app.listen(port, function() {
    console.log("server on " + port);
});

我的基本网址

<base href="/testapp/">

我的Docker文件

FROM node
COPY ./package-deploy.json /package.json
COPY ./index.js /index.js
RUN npm install pm2 -g
COPY ./dist /dist
RUN npm install --only=production
ENV SERVER_PORT 80
EXPOSE 80
CMD pm2-docker index.js

建筑

  

ng build

     

docker build -t testapp:v1。

这种方法非常有效。但我想知道,有没有更好的方法来运行带有HTML5模式的Angular 2应用程序?

1 个答案:

答案 0 :(得分:1)

一旦您知道如何:

,在docker图像中构建一个角度应用程序非常简单
  1. 构建应用程序.htaccess
  2. 添加dist文件
  3. httpd复制到Dockerfile图片。
  4. 利润
  5. 使用此方法将从代码中删除快速逻辑,这意味着您必须管理更少的代码并专注于应用程序本身。

    示例FROM httpd:2.4 COPY ./dist /usr/local/apache2/htdocs COPY ./.htaccess /usr/local/apache2/htdocs

    .htaccess
    您需要在应用程序的根目录下的

    <IfModule mod_rewrite.c> Options Indexes FollowSymLinks RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </IfModule> 文件:

    /var/www/downloads/

    如果需要,请随时查找有关该项目的更多详细信息。

    修改

    我链接到您的Dockerfile是在CI流程中构建的,其中应用程序构建已经完成。当然,您必须在构建映像之前构建应用程序。

    我这样做是因为这样,原始的打字稿代码和css不会在网上提供,所以它们无法从网站本身访问。