Налаштування Docker для контейнеризації веб-застосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування Docker для контейнеризації веб-застосунку
Середня
від 1 робочого дня до 3 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування контейнеризації Docker для веб-додатку

Docker упаковує додаток з усіма залежностями в ізольований контейнер. Однакова поведінка на dev, staging та production. Спрощує розгортання та горизонтальне масштабування.

Multi-stage Dockerfile для PHP/Laravel

# Dockerfile
# Етап 1: встановлення PHP-залежностей
FROM composer:2.7 AS composer
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader --no-scripts --no-interaction

# Етап 2: збірка фронтенду
FROM node:20-alpine AS node
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY resources/js ./resources/js
COPY resources/css ./resources/css
COPY vite.config.ts tsconfig.json ./
RUN npm run build

# Етап 3: фінальний образ
FROM php:8.3-fpm-alpine

RUN apk add --no-cache \
    nginx \
    supervisor \
    postgresql-libs \
    && docker-php-ext-install pdo_pgsql opcache

WORKDIR /var/www/html

# Копіювати з попередніх етапів
COPY --from=composer /app/vendor ./vendor
COPY --from=node /app/public/build ./public/build
COPY . .

# Конфігурація OPcache
RUN echo "opcache.enable=1\nopcache.memory_consumption=256\nopcache.validate_timestamps=0" \
    >> /usr/local/etc/php/conf.d/opcache.ini

# Запустити через supervisor (nginx + php-fpm)
COPY docker/supervisord.conf /etc/supervisord.conf
COPY docker/nginx.conf /etc/nginx/nginx.conf

RUN chown -R www-data:www-data storage bootstrap/cache

EXPOSE 80
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]

Multi-stage Dockerfile для Node.js

FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine AS production
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/public ./public

USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]

.dockerignore

node_modules
.git
.env
*.log
/tests
/coverage
/.github
docker-compose*.yml
Dockerfile*

Оптимізація розміру образу

# Використовувати alpine-образи
FROM php:8.3-fpm-alpine    # ~80 MB vs 400 MB для debian-based

# Об'єднати RUN команди
RUN apk add --no-cache curl \
    && rm -rf /var/cache/apk/*

# Не встановлювати dev-залежності
RUN composer install --no-dev --optimize-autoloader

# BuildKit для паралельної збірки
# export DOCKER_BUILDKIT=1
# docker buildx build --cache-from type=registry,ref=myapp:cache .

Виконання у production

# Збудувати образ
docker build -t myapp:v1.2.3 .

# Запустити
docker run -d \
    --name myapp \
    --restart unless-stopped \
    -p 80:80 \
    -e APP_ENV=production \
    -e DB_HOST=db.internal \
    --env-file .env.production \
    -v /var/log/myapp:/var/www/html/storage/logs \
    myapp:v1.2.3

# Оновити на нову версію (без часу простою)
docker pull myapp:v1.3.0
docker stop myapp && docker rm myapp
docker run -d --name myapp ... myapp:v1.3.0

Health check

HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD curl -f http://localhost/health || exit 1

GitHub Actions → Docker Registry

- name: Build and push Docker image
  uses: docker/build-push-action@v5
  with:
    context: .
    push: true
    tags: |
      registry.example.com/myapp:latest
      registry.example.com/myapp:${{ github.sha }}
    cache-from: type=registry,ref=registry.example.com/myapp:cache
    cache-to: type=registry,ref=registry.example.com/myapp:cache,mode=max

Лінія часу

Створення Dockerfile + налаштування реєстру + CI-збірка: 2–3 дні.