
Docker là một nền tảng mã nguồn mở được sử dụng để phát triển, vận chuyển và chạy các ứng dụng. Nó cho phép bạn tách biệt ứng dụng của mình khỏi cơ sở hạ tầng để có thể nhanh chóng phân phối phần mềm. Dưới đây là những điểm chính để hiểu về Docker:
-
Containerization (Ảo hóa container):
- Docker sử dụng công nghệ container để đóng gói một ứng dụng và tất cả các phụ thuộc của nó vào một “container” ảo.
- Mỗi container là một đơn vị phần mềm tiêu chuẩn hóa, chứa mọi thứ cần thiết để chạy ứng dụng: mã, runtime, công cụ hệ thống, thư viện và cài đặt.
-
Nhẹ và hiệu quả:
- Khác với máy ảo truyền thống, các container Docker chia sẻ kernel của hệ điều hành máy chủ, làm cho chúng nhẹ hơn và sử dụng tài nguyên hiệu quả hơn.
-
Tính nhất quán:
- Docker đảm bảo rằng ứng dụng sẽ chạy giống nhau trong mọi môi trường, từ máy phát triển đến máy chủ sản xuất.
-
Các thành phần chính:
- Docker Engine: Nền tảng chạy và quản lý các container.
- Docker Image: Bản mẫu chỉ đọc chứa hướng dẫn để tạo container.
- Docker Container: Phiên bản chạy của một image.
- Dockerfile: File văn bản chứa các lệnh để xây dựng một Docker image.
- Docker Hub: Kho lưu trữ công cộng cho Docker images.
-
Lợi ích:
- Triển khai nhanh chóng và dễ dàng
- Tính di động cao
- Quản lý phiên bản và thành phần hiệu quả
- Tái sử dụng và chia sẻ
- Cô lập và bảo mật
-
Ứng dụng:
- Phát triển và kiểm thử phần mềm
- Triển khai ứng dụng microservices
- Tự động hóa quy trình CI/CD
- Mở rộng quy mô ứng dụng
Docker đã trở thành một công cụ quan trọng trong ngành công nghiệp phần mềm, giúp đơn giản hóa quá trình phát triển, triển khai và quản lý ứng dụng trong các môi trường khác nhau.
Hãy xem xét một ví dụ cụ thể về việc sử dụng Docker để containerize một ứng dụng web đơn giản bằng Python Flask. Chúng ta sẽ đi qua các bước từ việc tạo ứng dụng đến việc chạy nó trong một container Docker.
- Tạo ứng dụng Flask đơn giản:
Đầu tiên, tạo một thư mục cho dự án và tạo file app.py
:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Xin chào từ Docker container!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
- Tạo file requirements.txt:
Flask==2.0.1
- Tạo Dockerfile:
# Sử dụng image Python chính thức làm base image
FROM python:3.9-slim
# Đặt thư mục làm việc trong container
WORKDIR /app
# Sao chép file requirements.txt vào container
COPY requirements.txt .
# Cài đặt các dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Sao chép mã nguồn ứng dụng vào container
COPY . .
# Mở cổng 5000 để Flask app có thể truy cập được
EXPOSE 5000
# Chạy ứng dụng khi container được khởi động
CMD ["python", "app.py"]
- Build Docker image:
Mở terminal, di chuyển đến thư mục dự án và chạy lệnh:
docker build -t flask-hello-world .
- Chạy Docker container:
Sau khi build xong, chạy container với lệnh:
docker run -d -p 5000:5000 flask-hello-world
Bây giờ, bạn có thể truy cập ứng dụng tại http://localhost:5000
trên trình duyệt.
- Kiểm tra container đang chạy:
docker ps
- Dừng container:
docker stop <container_id>
Giải thích chi tiết:
-
Dockerfile định nghĩa cách xây dựng image:
FROM python:3.9-slim
: Sử dụng image Python 3.9 nhẹ làm cơ sở.WORKDIR /app
: Đặt thư mục làm việc trong container.COPY requirements.txt .
: Sao chép file requirements vào container.RUN pip install ...
: Cài đặt các dependencies.COPY . .
: Sao chép toàn bộ mã nguồn vào container.EXPOSE 5000
: Khai báo cổng 5000 sẽ được sử dụng.CMD ["python", "app.py"]
: Xác định lệnh để chạy ứng dụng.
-
Lệnh
docker build
tạo một image từ Dockerfile. -
Lệnh
docker run
tạo và chạy một container từ image:-d
: Chạy container ở chế độ detached (nền).-p 5000:5000
: Map cổng 5000 của máy host với cổng 5000 của container.
Ví dụ này minh họa cách Docker có thể được sử dụng để đóng gói một ứng dụng web đơn giản cùng với tất cả dependencies của nó, đảm bảo rằng nó có thể chạy một cách nhất quán trên bất kỳ môi trường nào có Docker.
Danh mục
Bài viết liên quan

Dockerfile
Author: | ADMIN |
---|
Bài viết khác

Blade Basics
Author: | ADMIN |
---|

9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel
Author: | ADMIN |
---|

Hiển thị giá trị trong Blade
Author: | ADMIN |
---|