Docker позволяет создать изолированную и воспроизводимую среду для разработки и развертывания Angular-приложений. Рассмотрим ключевые аспекты интеграции.
Создайте Dockerfile
в корне проекта:
# Этап сборки
FROM node:18-alpine AS build
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build --prod
# Этап запуска
FROM nginx:alpine
COPY --from=build /app/dist/your-app-name /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
Добавьте файл .dockerignore
:
node_modules/
.git/
dist/
*.md
.env
Пример nginx.conf
:
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
docker-compose.yml
для удобной разработки:
version: '3.8'
services:
frontend:
build: .
volumes:
- .:/app
- /app/node_modules
ports:
- "4200:4200"
command: npm start
environment:
- NODE_ENV=development
Можно создать несколько Dockerfile:
Dockerfile.dev
- для разработкиDockerfile.prod
- для productionПример команды сборки для production:
docker build -t angular-app:prod -f Dockerfile.prod .
Пример этапа для GitHub Actions:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Build Docker image
run: docker build -t angular-app .
- name: Login to Docker Hub
run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
- name: Push to Docker Hub
run: |
docker tag angular-app username/repo:latest
docker push username/repo:latest
COPY package.json package-lock.json ./
RUN npm ci
# Остальные файлы копируются после установки зависимостей
Полезные команды:
# Запуск с интерактивной оболочкой
docker run -it angular-app sh
# Просмотр логов
docker logs <container-id>
# Проверка работающего контейнера
docker exec -it <container-id> sh
USER node
docker scan angular-app
Docker обеспечивает стабильную среду для Angular-приложений на всех этапах - от разработки до production. Используйте многоэтапные сборки, оптимизируйте образы и интегрируйте с CI/CD для максимальной эффективности.