Dockerfile
15964

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:

  1. 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ặc FROM python:3.9-alpine
  1. LABEL
LABEL <key>=<value>
  • Thêm metadata vào image.
  • Ví dụ: LABEL version="1.0" maintainer="example@email.com"
  1. ENV
ENV <key>=<value>
  • Đặt biến môi trường.
  • Ví dụ: ENV PATH=/usr/local/bin:$PATH
  1. ARG
ARG <name>[=<default value>]
  • Định nghĩa biến được sử dụng trong quá trình build.
  • Ví dụ: ARG VERSION=latest
  1. 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
  1. COPY
COPY <src> <dest>
  • Sao chép files hoặc thư mục từ máy host vào image.
  • Ví dụ: COPY . /app
  1. 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/
  1. 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
  1. 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"]
  1. ENTRYPOINT
ENTRYPOINT ["executable", "param1", "param2"]
  • Cấu hình container để chạy như một executable.
  • Ví dụ: ENTRYPOINT ["python", "app.py"]
  1. EXPOSE
EXPOSE <port> [<port>/<protocol>...]
  • Khai báo cổng mà container sẽ lắng nghe khi chạy.
  • Ví dụ: EXPOSE 80 hoặc EXPOSE 80/tcp
  1. 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"]
  1. 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
  1. 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
  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"]
  1. 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.

Danh mục


  1. Khác
  2. ThreeJS
  3. Ubuntu/Linux
  4. HTML/CSS
  5. Git
  6. Amazon Web Services
  7. Javascript
  8. Docker
  9. Laravel

Bài viết liên quan


Docker là gì?

Docker là gì?

30.09.2024
Author: ADMIN
Docker là một nền tảng mã nguồn mở giúp phát triển, vận chuyển và chạy các ứng dụng một cách dễ dàng. Bài viết này sẽ giúp bạn hiểu các khái niệm cơ bản về Docker, và hướng dẫn từng bước để tạo một ứng dụng Flask chạy trên Docker container.

Bài viết khác

Routing

Routing

01.08.2024
Author: ADMIN
Hướng dẫn chi tiết về Basic Routing trong Laravel, từ cách định nghĩa route, sử dụng middleware, route caching đến route naming giúp tối ưu hóa ứng dụng.
Blade Basics

Blade Basics

01.08.2024
Author: ADMIN
Khám phá Blade trong Laravel: từ if-else, loops, kế thừa layout đến include sub-views. Giúp code gọn gàng, dễ quản lý và bảo trì hơn!
9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel

9 Mẹo Hữu Ích Khi Sử Dụng Blade Trong Laravel

01.08.2024
Author: ADMIN
Khám phá 9 mẹo Blade giúp bạn viết code Laravel sạch, tối ưu và chuyên nghiệp hơn. Từ @forelse, @auth, @guest, đến format ngày, tối ưu SEO – tất cả trong một bài viết súc tích, dễ áp dụng!
Hiển thị giá trị trong Blade

Hiển thị giá trị trong Blade

01.08.2024
Author: ADMIN
Hướng dẫn hiển thị biến trong Laravel Blade: escape HTML tự động, hiển thị dữ liệu thô, giá trị mặc định và cách truy xuất mảng, đối tượng. Giúp bạn tối ưu hiển thị dữ liệu một cách an toàn!