Docker - Hướng dẫn lệnh

Xin chào các bạn future Docker wizards! Tôi rất vui mừng được làm hướng dẫn viên của các bạn trong hành trình thú vị qua thế giới các lệnh Docker. Như một ai đó đã dạy khoa học máy tính trong nhiều năm, tôi có thể nói rằng Docker giống như một枝 bút phép cho các nhà phát triển. Nó làm cuộc sống của chúng ta trở nên dễ dàng hơn! Hãy c rolled up our sleeves và nhảy vào thế giới kỳ diệu của các lệnh hướng dẫn Docker.

Docker - Commands

Lệnh CMD

Lệnh CMD giống như nhân vật chính trong một bộ phim - nó là ngôi sao của chương trình khi nói đến các container Docker. Nó告诉 Docker cần chạy lệnh nào khi container của bạn khởi động.

Cú pháp cơ bản

CMD ["executable", "param1", "param2"]

Hãy phân tích này với một ví dụ đơn giản:

FROM ubuntu
CMD ["echo", "Hello, Docker World!"]

Trong trường hợp này, khi bạn chạy container của bạn, nó sẽ in "Hello, Docker World!" ra console. Đó giống như container của bạn đang chào hello ngay khi nó thức dậy!

Nhiều lệnh CMD

Đây là một câu hỏi nhỏ: Điều gì xảy ra nếu bạn có nhiều lệnh CMD trong Dockerfile của bạn?

FROM ubuntu
CMD ["echo", "First command"]
CMD ["echo", "Second command"]

Nếu bạn đoán rằng cả hai lệnh sẽ chạy, tôi e rằng bạn đã rơi vào một陷阱 phổ biến! Thực tế, chỉ có lệnh CMD cuối cùng sẽ được thực thi. Đó giống như trong một vở kịch - chỉ có màn cuối cùng mới quan trọng!

Hình thức Shell vs Hình thức Exec

CMD có thể được viết dưới hai hình thức:

  1. Hình thức Shell: CMD command param1 param2
  2. Hình thức Exec: CMD ["executable", "param1", "param2"]

Hình thức exec được ưa thích vì nó rõ ràng hơn và tránh được các vấn đề với việc phân tích cú pháp của shell.

ENTRYPOINT

Nếu CMD là nhân vật chính, thì ENTRYPOINT là đạo diễn của bộ phim Docker của chúng ta. Nó đặt lệnh chính cho container, không thể bị覆盖 khi container khởi động.

Cú pháp cơ bản

ENTRYPOINT ["executable", "param1", "param2"]

Hãy xem một ví dụ:

FROM ubuntu
ENTRYPOINT ["echo", "Hello from"]
CMD ["Docker"]

Khi bạn chạy container này, nó sẽ xuất ra "Hello from Docker". Nhưng đây là phần thú vị! Nếu bạn chạy container với các tham số bổ sung, chúng sẽ thay thế CMD nhưng không thay thế ENTRYPOINT.

docker run myimage World

Điều này sẽ xuất ra "Hello from World". Đó giống như ENTRYPOINT đang đặt sân khấu, và CMD (hoặc các tham số chạy thời gian thực) là các diễn viên biểu diễn trên nó!

ENV

ENV giống như bộ phận thời trang của chúng ta trong sản xuất Docker. Nó đặt các biến môi trường có thể được sử dụng suốt container.

Cú pháp cơ bản

ENV key=value

Dưới đây là một ví dụ thực tế:

FROM ubuntu
ENV MY_NAME="Docker Enthusiast"
CMD ["sh", "-c", "echo Hello, $MY_NAME!"]

Điều này sẽ xuất ra "Hello, Docker Enthusiast!" khi container chạy. Đó giống như cấp cho container một thẻ tên!

Nhiều lệnh ENV

Khác với CMD, bạn có thể có nhiều lệnh ENV, và tất cả chúng đều có hiệu lực:

FROM ubuntu
ENV MY_NAME="Docker Enthusiast"
ENV MY_DOG=Rex MY_CAT=Fluffy
CMD ["sh", "-c", "echo Hello, $MY_NAME! Your pets are $MY_DOG and $MY_CAT."]

Container này sẽ chào bạn và giới thiệu các thú cưng của bạn!

WORKDIR

WORKDIR giống như nhà thiết kế sân khấu cho sản xuất Docker của chúng ta. Nó đặt thư mục làm việc cho bất kỳ lệnh nào theo sau nó trong Dockerfile.

Cú pháp cơ bản

WORKDIR /path/to/directory

Hãy xem nó trong hành động:

FROM ubuntu
WORKDIR /app
COPY . .
CMD ["ls", "-l"]

Dockerfile này đặt thư mục làm việc là /app, sao chép nội dung thư mục hiện tại vào đó, và sau đó liệt kê các nội dung khi container chạy. Đó giống như nói với container, "Hey, làm cho mình một không gian làm việc trong thư mục này!"

Nhiều lệnh WORKDIR

Bạn có thể sử dụng WORKDIR nhiều lần để thay đổi thư mục:

FROM ubuntu
WORKDIR /app
WORKDIR src
WORKDIR scripts
RUN pwd

Điều này sẽ xuất ra /app/src/scripts. Đó giống như đưa container của bạn đi tham quan ngôi nhà mới của nó!

Kết hợp tất cả lại

Bây giờ chúng ta đã gặp tất cả các lệnh hướng dẫn Docker của mình, hãy xem chúng hoạt động cùng nhau trong một tình huống thực tế. Hãy tưởng tượng chúng ta đang tạo một ứng dụng web Python đơn giản:

FROM python:3.9-slim

# Đặt biến môi trường
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# Đặt thư mục làm việc
WORKDIR /app

# Cài đặt các phụ thuộc
COPY requirements.txt .
RUN pip install -r requirements.txt

# Sao chép dự án
COPY . .

# Lệnh để chạy ứng dụng
ENTRYPOINT ["python"]
CMD ["app.py"]

Dockerfile này thiết lập một môi trường Python, cài đặt các phụ thuộc, sao chép mã ứng dụng của chúng ta, và chỉ định cách chạy ứng dụng. Đó giống như một công thức để tạo ra môi trường hoàn hảo cho ứng dụng Python của chúng ta!

Tóm tắt lệnh

Dưới đây là bảng tham khảo nhanh của các lệnh chúng ta đã覆盖:

Lệnh Mô tả Ví dụ
CMD Chỉ định lệnh cần chạy khi container khởi động CMD ["python", "app.py"]
ENTRYPOINT Đặt lệnh chính của container ENTRYPOINT ["python"]
ENV Đặt biến môi trường ENV MY_VAR=value
WORKDIR Đặt thư mục làm việc WORKDIR /app

Nhớ rằng, các lệnh này là những khối xây dựng của container Docker của bạn. Kết hợp chúng để tạo ra môi trường hoàn hảo cho ứng dụng của bạn!

Và đây bạn có nó, các bạn thân mến! Chúng ta đã cùng nhau hành trình qua vùng đất của các lệnh hướng dẫn Docker, từ ngôi sao CMD đến đạo diễn ENTRYPOINT, bộ phận thời trang ENV, và nhà thiết kế sân khấu WORKDIR. Tôi hy vọng hướng dẫn này đã chiếu sáng con đường cho các bạn trong các cuộc phiêu lưu Docker. Nhớ rằng, thực hành là cách tốt nhất để trở nên hoàn hảo, vì vậy đừng ngại thử nghiệm với các lệnh này. Chúc các bạn thành công trong việc Dockering!

Credits: Image by storyset