+6

3 Ý tưởng dự án Docker: Hướng dẫn chi tiết với Code và giải thích

Docker là một trong những công cụ container hóa được sử dụng rộng rãi nhất trong thế giới DevOps. Nó rất cần thiết cho việc phát triển, triển khai và chạy các ứng dụng một cách hiệu quả. Bài viết này phác thảo ba dự án Docker thực tế, cung cấp hướng dẫn đầy đủ và mã cho mỗi dự án. Những dự án này sẽ giúp củng cố sự hiểu biết của bạn về Docker và các ứng dụng dựa trên container.

1. Xây dựng và chạy ứng dụng Web Flask trong Docker

Tổng quan về dự án:

Trong dự án này, bạn sẽ container hóa một ứng dụng web Flask đơn giản và chạy nó bên trong một container Docker. Flask là một framework web Python gọn nhẹ, hoàn hảo để minh họa khả năng của Docker với các ứng dụng Python.

Các bước thực hiện:

Bước 1: Thiết lập Ứng dụng Flask

Đầu tiên, chúng ta hãy tạo một ứng dụng Flask cơ bản.

  • Tạo một thư mục dự án:
  mkdir flask-docker-app
  cd flask-docker-app
  • Bên trong thư mục dự án, hãy tạo một tệp Python có tên là app.py:
# app.py
  from flask import Flask

  app = Flask(__name__)

  @app.route('/')
  def home():
      return "Hello, Dockerized Flask App!"

  if __name__ == '__main__':
      app.run(debug=True, host='0.0.0.0', port=5000)
  • Thêm tệp requirements.txt để xác định các dependency của dự án:
  Flask==2.0.3

Bước 2: Tạo Dockerfile

Tạo một tệp có tên Dockerfile trong cùng thư mục để định nghĩa image cho ứng dụng Flask của chúng ta.

# Use an official Python runtime as a parent image
FROM python:3.9-slim

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install the dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Make port 5000 available to the outside world
EXPOSE 5000

# Define environment variable
ENV FLASK_APP=app.py

# Run the application
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]

Bước 3: Xây dựng và Chạy Container Docker

Xây dựng Docker image:

  docker build -t flask-app .

Chạy Docker container:

  docker run -d -p 5000:5000 flask-app

Bây giờ, nếu bạn điều hướng đến http://localhost:5000, bạn sẽ thấy ứng dụng Flask của mình đang chạy bên trong một container Docker.

Giải thích:

  • Chúng ta đã định nghĩa một ứng dụng Flask đơn giản lắng nghe trên cổng 5000.
  • Dockerfile kéo một image Python, thiết lập môi trường, cài đặt các dependency và chạy ứng dụng Flask.
  • Lệnh docker build tạo một image từ Dockerfile và lệnh docker run khởi động container với cổng 5000 được exposed tới host.

2. Ứng dụng Node.js và MongoDB đa Container sử dụng Docker Compose

Tổng quan dự án:

Dự án này minh họa cách sử dụng Docker Compose để chạy một ứng dụng web Node.js với cơ sở dữ liệu MongoDB trong các container riêng biệt. Docker Compose giúp dễ dàng quản lý các ứng dụng Docker đa container.

Các bước thực hiện:

Bước 1: Thiết lập Ứng dụng Node.js

  • Tạo một thư mục mới cho dự án của bạn:
  mkdir node-mongo-app
  cd node-mongo-app
  • Bên trong thư mục, khởi tạo một dự án Node.js và cài đặt Express và Mongoose:
  npm init -y
  npm install express mongoose
  • Tạo server.js:
const express = require('express');
  const mongoose = require('mongoose');

  const app = express();

  // MongoDB connection
  mongoose.connect('mongodb://mongo:27017/dockerApp', { useNewUrlParser: true, useUnifiedTopology: true })
    .then(() => console.log('MongoDB connected'))
    .catch(err => console.log(err));

  app.get('/', (req, res) => {
    res.send('Hello from Node.js and MongoDB app in Docker!');
  });

  const PORT = 3000;
  app.listen(PORT, () => {
    console.log(`Server running on port ${PORT}`);
  });

Bước 2: Tạo Dockerfile cho ứng dụng Node.js

# Use an official Node.js runtime as the base image
FROM node:14

# Set working directory inside the container
WORKDIR /app

# Copy package.json and install dependencies
COPY package*.json ./
RUN npm install

# Copy the rest of the application code
COPY . .

# Expose the app port
EXPOSE 3000

# Run the application
CMD ["node", "server.js"]

Bước 3: Tệp Docker Compose

Tạo tệp docker-compose.yml để định nghĩa các service (ứng dụng Node.js và MongoDB):

version: '3'
services:
  nodeapp:
    build: .
    ports:
      - '3000:3000'
    depends_on:
      - mongo
    volumes:
      - .:/app
  mongo:
    image: mongo
    ports:
      - '27017:27017'

Bước 4: Xây dựng và chạy ứng dụng đa Container

Xây dựng và chạy ứng dụng bằng Docker Compose:

  docker-compose up --build

Bây giờ bạn có thể truy cập http://localhost:3000 để xem ứng dụng đang chạy.

Giải thích:

  • Ứng dụng Node.js và MongoDB chạy trong các container riêng biệt.
  • Docker Compose giúp điều phối thiết lập đa container, đảm bảo MongoDB khởi động trước ứng dụng Node.js thông qua trường depends_on.
  • volumes mount thư mục mã nguồn, cho phép cập nhật trực tiếp mà không cần xây dựng lại image.

3. Triển khai ứng dụng WordPress và MySQL sử dụng Docker Compose

Tổng quan dự án:

Trong dự án này, chúng ta sẽ triển khai một trang web WordPress được hỗ trợ bởi cơ sở dữ liệu MySQL bằng Docker Compose. Điều này sẽ minh họa cách thiết lập một môi trường giống như production bằng cách sử dụng container.

Các bước thực hiện:

Bước 1: Tệp Docker Compose cho WordPress và MySQL

Tạo một thư mục dự án và bên trong nó, tạo một tệp docker-compose.yml:

version: '3'

services:
  wordpress:
    image: wordpress:latest
    container_name: wordpress_container
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress_user
      WORDPRESS_DB_PASSWORD: wordpress_password
      WORDPRESS_DB_NAME: wordpress_db
    volumes:
      - ./wp_data:/var/www/html

  db:
    image: mysql:5.7
    container_name: mysql_container
    restart: always
    environment:
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: wordpress_user
      MYSQL_PASSWORD: wordpress_password
      MYSQL_ROOT_PASSWORD: root_password
    volumes:
      - ./db_data:/var/lib/mysql

Bước 2: Tạo Volume cho lưu trữ liên tục

Trong thiết lập này, chúng ta đã thêm các volume wp_data và db_data để lưu trữ dữ liệu WordPress và MySQL liên tục trên máy chủ.

Bước 3: Chạy ứng dụng

Để chạy ứng dụng:

  • Thực hiện:
  docker-compose up -d

Điều này sẽ kéo các image WordPress và MySQL từ Docker Hub, thiết lập các biến môi trường và khởi chạy các container.

  • Khi các container đang chạy, hãy điều hướng đến http://localhost:8080 để hoàn tất cài đặt WordPress.

Giải thích:

  • WordPress và MySQL chạy trong các container riêng biệt, được kết nối thông qua mạng nội bộ của Docker.
  • Các biến môi trường MySQL xác định tên cơ sở dữ liệu, người dùng và mật khẩu.
  • Phần volumes đảm bảo rằng dữ liệu WordPress và cơ sở dữ liệu MySQL của bạn vẫn còn nguyên vẹn ngay cả khi các container bị dừng hoặc xóa.

Kết luận

Ba dự án này cung cấp kinh nghiệm thực hành, thực tế với Docker, bao gồm nhiều kịch bản trong thế giới thực. Ứng dụng Flask demo cách container hóa một ứng dụng Python đơn giản. Dự án Node.js và MongoDB minh họa cách Docker Compose có thể quản lý các ứng dụng đa container. Dự án WordPress-MySQL cho thấy cách thiết lập một môi trường giống production với bộ nhớ liên tục.

Mỗi dự án tuân theo các phương pháp hay nhất của ngành như cô lập các service, xác định dependency trong Dockerfile và docker-compose.yml, và sử dụng các công cụ điều phối container để sắp xếp hợp lý việc quản lý ứng dụng. Những bài tập này sẽ giúp bạn nắm vững các khái niệm cốt lõi của Docker và cung cấp kinh nghiệm quý báu cho các dự án thực tế. Cảm ơn các bạn đã theo dõi.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí