Признайтесь, я очень новичок в Docker и только что узнал, начиная с предыдущей недели (24 ноября) в Katacoda, Pluralsight и Lynda. По прошествии недели я обнаружил, что Docker действительно полезен для развертывания наших проектов в рабочей среде как для разработчиков, так и для системных операторов.

Как я узнал из этих веб-сайтов, создание док-образа NodeJS API довольно просто и легко. Это можно сделать только с 1 этапом для создания образа Docker следующим образом:

FROM node:latest
ENV NODE_ENV=production
ENV PORT=3000
COPY . /var/www
WORKDIR /var/www/
VOLUME ["/var/www", "/logs"]
RUN npm install
EXPOSE $PORT
ENTRYPOINT ["npm", "start"]

Но проблема в том, что когда я пытаюсь создать проект AngularJS для образа Docker, это будет довольно сложно для новичка. Потому что, как и внутри AngularJS для производственного развертывания, мне нужно сначала установить все node_modules, затем установить компоненты Bower и минимизировать их. В этом случае мне нужно создать команду Docker для этапа за этапом.

  1. Сначала соберите AngularJS, установив модули узлов, компоненты Bower и минимизировав все файлы html, css и javascript.
  2. скопируйте эту папку рабочей стадии в папку веб-сервера Nginx.

И структура папок моего проекта выглядит следующим образом:

+-- app
|   +-- bower.json
|   +-- index.html
|   +-- index.js
|   +-- index.css
+-- gulpfile.js
+-- package.json

Прежде чем использовать Docker для производственного кода, мне нужно выполнить следующий шаг, чтобы создать производственную папку со сценарием bash.

npm install && npm install bower -g && npm install gulp -g
cd app && bower install --allow-root
cd ../ && gulp default

Чтобы преобразовать эти скрипты в Dockerfile, мне нужно написать

### STAGE 1: Build ###
FROM node:7.0.0 as angularapp
ENV NODE_ENV=production
ENV PORT=3000
LABEL auther="PPShein"
COPY package.json package.json
COPY . /var/www
WORKDIR /var/www
RUN npm install && npm install bower -g && npm install gulp -g
RUN cd /var/www/app && bower install --allow-root
RUN cd /var/www/ && gulp default
### STAGE 2: IMAGE ###
FROM nginx:alphine
VOLUME [ "/var/cache/nginx" ]
COPY nginx/default.conf /etc/nginx/conf.d/
COPY --from=angularapp /var/www/dist /usr/share/nginx/html