تحويل تطبيق ويب إلى حاويات
تعرّفوا خطوة بخطوة على عملية تحويل تطبيق ويب نموذجي إلى حاويات Docker، بما في ذلك مكوّنات الواجهة الأمامية والخلفية وقاعدة البيانات.
تحويل تطبيق ويب إلى حاويات درس مجاني في Docker & Kubernetes for Developers على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Docker & Kubernetes for Developers، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Docker & Kubernetes for Developers 4 دروس في المجموع.
بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.
Containerizing Web Apps
Welcome to containerizing a web application! In this lesson, we'll walk through how to package a complete web application, including its frontend, backend, and database, into Docker containers.
This is a crucial step for modern development, enabling consistency across environments and simplifying deployment.
Web App Architecture
A typical web application usually consists of several components working together. For our example, we'll focus on a common three-tier architecture:
- Frontend: The user interface (e.g., React, Vue, Angular) that runs in the browser.
- Backend: The server-side logic (e.g., Node.js, Python Flask, Java Spring) that handles business logic and API requests.
- Database: Stores and manages application data (e.g., PostgreSQL, MySQL, MongoDB).
Backend: Node.js API
First, let's create a Dockerfile for a simple Node.js backend API. This file tells Docker how to build an image for our backend service.
We'll start with a base Node.js image, copy our application code, install dependencies, and define the command to run the server.
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Frontend: React & Nginx
For our frontend, we'll use a multi-stage Dockerfile. This is a best practice for frontend applications, allowing us to build the app in one stage and then serve the static assets using a lightweight web server like Nginx in a separate, smaller stage.
This results in a much smaller final image.
FROM node:18-alpine as builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM nginx:stable-alpine
COPY --from=builder /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Database: PostgreSQL Service
For the database, we don't need to write a Dockerfile. Instead, we can use an official image from Docker Hub, like PostgreSQL.
It's crucial to use a Docker volume to ensure our database data persists even if the container is removed or recreated. We'll define this when we use Docker Compose.
Orchestration with Compose
Now that we have Dockerfiles for our frontend and backend, and know we'll use an official image for our database, we need a way to define and run all these services together.
This is where Docker Compose comes in. It uses a YAML file (docker-compose.yml) to configure all our services, networks, and volumes.
version: '3.8'
services:
# Define your application services here
volumes:
# Define named volumes for data persistence
networks:
# Define custom networks for inter-service communication
Compose: Backend Service
Let's add our backend service to the docker-compose.yml file. We'll specify its build context (where its Dockerfile is), map ports, define environment variables for database connection, and set up a dependency on the database.
version: '3.8'
services:
backend:
build: ./backend # Path to backend Dockerfile
ports:
- "3000:3000"
environment:
DATABASE_URL: postgres://user:password@db:5432/mydb
depends_on:
- db # Ensure db starts before backend
networks:
- app-network
networks:
app-network:
driver: bridge # Custom network for app services
Compose: Frontend Service
Next, we add the frontend service definition. This service will also be built from its Dockerfile, expose port 80, and depend on the backend service to ensure it's available for API calls.
version: '3.8'
services:
# ... backend service definition ...
frontend:
build: ./frontend # Path to frontend Dockerfile
ports:
- "80:80"
depends_on:
- backend # Frontend needs backend to be ready
networks:
- app-network
networks:
app-network:
driver: bridge
Compose: Database Service
Finally, we define the database service. We'll use the official postgres image, set crucial environment variables for database setup, and most importantly, attach a named volume for data persistence.
version: '3.8'
services:
# ... backend and frontend definitions ...
db:
image: postgres:13-alpine # Use an official PostgreSQL image
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- db_data:/var/lib/postgresql/data # Mount named volume
networks:
- app-network
volumes:
db_data: # Define the named volume
networks:
app-network:
driver: bridge
Launching the App Stack
With our docker-compose.yml file complete, launching the entire application stack is incredibly simple. Navigate to the directory containing your docker-compose.yml file and run a single command:
docker compose up -d: Builds images (if needed), creates containers, networks, and volumes, and starts all services in detached mode (-d).docker compose down: Stops and removes all services, networks, and volumes defined in the file.
docker compose up -d
Compose Configuration Check
Consider the following docker-compose.yml snippet for a simple web application:
version: '3.8'
services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres:latest
environment:
POSTGRES_DB: appdb
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:Which of the following statements about this configuration are TRUE?
Lesson Summary
In this lesson, we learned how to containerize a full web application stack using Docker. We covered creating Dockerfiles for frontend and backend services, using official images for databases, and orchestrating everything with Docker Compose. This approach simplifies development, deployment, and scaling of complex applications.
- Defined Dockerfiles for a multi-stage frontend and a backend service.
- Integrated a database using an official Docker image and a named volume.
- Orchestrated all services using a
docker-compose.ymlfile. - Learned to launch the entire application stack with a single command.
الأسئلة الشائعة
هل درس «تحويل تطبيق ويب إلى حاويات» مجاني؟
نعم — نص درس «تحويل تطبيق ويب إلى حاويات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Docker & Kubernetes for Developers، انتقل إلى CoddyKit PRO. تتضمن دورة Docker & Kubernetes for Developers 4 دروس في المجموع.
ماذا ستتعلم في «تحويل تطبيق ويب إلى حاويات»؟
تعرّفوا خطوة بخطوة على عملية تحويل تطبيق ويب نموذجي إلى حاويات Docker، بما في ذلك مكوّنات الواجهة الأمامية والخلفية وقاعدة البيانات. تتمرن على Docker & Kubernetes for Developers مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Docker & Kubernetes for Developers؟
لا تُشترط خبرة سابقة. Docker & Kubernetes for Developers على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «تحويل تطبيق ويب إلى حاويات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Docker & Kubernetes for Developers هذا؟
نعم. كل درس في Docker & Kubernetes for Developers يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تحويل تطبيق ويب إلى حاويات
- تحسين صور Docker
- أفضل ممارسات الأمان والإنتاج
- البناء متعدد المراحل لصور إنتاجية خفيفة