Dockerfile
Author: | ADMIN |
---|
Dockerfile là một tập lệnh chứa các hướng dẫn để xây dựng một Docker image. Dưới đây là các thành phần chính và cách sử dụng chúng:
- FROM
FROM <image>:<tag>
- Đây là lệnh bắt buộc và phải là lệnh đầu tiên trong Dockerfile (trừ ARG).
- Xác định image cơ sở để bắt đầu xây dựng.
- Ví dụ:
FROM ubuntu:20.04
hoặcFROM python:3.9-alpine
- LABEL
LABEL <key>=<value>
- Thêm metadata vào image.
- Ví dụ:
LABEL version="1.0" maintainer="example@email.com"
- ENV
ENV <key>=<value>
- Đặt biến môi trường.
- Ví dụ:
ENV PATH=/usr/local/bin:$PATH
- ARG
ARG <name>[=<default value>]
- Định nghĩa biến được sử dụng trong quá trình build.
- Ví dụ:
ARG VERSION=latest
- WORKDIR
WORKDIR /path/to/directory
- Đặt thư mục làm việc cho các lệnh RUN, CMD, ENTRYPOINT, COPY và ADD tiếp theo.
- Ví dụ:
WORKDIR /app
- COPY
COPY <src> <dest>
- Sao chép files hoặc thư mục từ máy host vào image.
- Ví dụ:
COPY . /app
- ADD
ADD <src> <dest>
- Tương tự COPY, nhưng có thêm chức năng như giải nén tệp tar hoặc tải file từ URL.
- Ví dụ:
ADD https://example.com/big.tar.xz /usr/src/things/
- RUN
RUN <command>
- Thực thi lệnh và tạo một layer mới.
- Ví dụ:
RUN apt-get update && apt-get install -y python3
- CMD
CMD ["executable","param1","param2"]
- Cung cấp lệnh mặc định để chạy container.
- Chỉ có thể có một CMD trong Dockerfile.
- Ví dụ:
CMD ["python", "app.py"]
- ENTRYPOINT
ENTRYPOINT ["executable", "param1", "param2"]
- Cấu hình container để chạy như một executable.
- Ví dụ:
ENTRYPOINT ["python", "app.py"]
- EXPOSE
EXPOSE <port> [<port>/<protocol>...]
- Khai báo cổng mà container sẽ lắng nghe khi chạy.
- Ví dụ:
EXPOSE 80
hoặcEXPOSE 80/tcp
- VOLUME
VOLUME ["/data"]
- Tạo một mount point và đánh dấu nó là chứa dữ liệu được mount từ bên ngoài.
- Ví dụ:
VOLUME ["/var/log"]
- USER
USER <user>[:<group>]
- Đặt user (hoặc UID) và tùy chọn USER group (hoặc GID) để chạy các lệnh tiếp theo.
- Ví dụ:
USER nginx
- HEALTHCHECK
HEALTHCHECK [OPTIONS] CMD command
- Kiểm tra sức khỏe của container.
- Ví dụ:
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ || exit 1
- SHELL
SHELL ["executable", "parameters"]
- Ghi đè shell mặc định được sử dụng cho lệnh shell form của RUN, CMD, ENTRYPOINT.
- Ví dụ:
SHELL ["/bin/bash", "-c"]
- STOPSIGNAL
STOPSIGNAL signal
- Đặt tín hiệu hệ thống để gửi đến container để thoát.
- Ví dụ:
STOPSIGNAL SIGTERM
Một Dockerfile điển hình có thể kết hợp nhiều lệnh này để xây dựng một image phức tạp. Ví dụ:
FROM python:3.9-slim
LABEL maintainer="example@email.com"
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Mỗi lệnh trong Dockerfile tạo ra một layer mới trong image. Việc hiểu và sử dụng đúng các lệnh này sẽ giúp bạn tạo ra các Docker images hiệu quả và tối ưu.
Docker là gì?
Author: | ADMIN |
---|
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.