CodeGym /Các khóa học /Docker SELF /Tập hợp image

Tập hợp image

Docker SELF
Mức độ , Bài học
Có sẵn

4.1 Cơ bản về lệnh docker build

Lệnh docker build — là cách chính để tạo Docker-image từ Dockerfile. Nó thực hiện các hướng dẫn từ Dockerfile từng bước, tạo ra image từ các layer. Trong bài giảng này, tụi mình sẽ tìm hiểu cách mà lệnh docker build hoạt động, những tham số mà nó có và cách sử dụng nó trong thực tế.

Lệnh docker build tạo image từ Dockerfile và cái gọi là bối cảnh build (build context). Bối cảnh build — là các file mà Docker sử dụng để tạo image. Nó có thể là một thư mục cục bộ trên máy của bạn hoặc, ví dụ, một repository trên GitHub.

Cú pháp


docker build [OPTIONS] PATH | URL | -

Ở đây:

  • PATH: đường dẫn tới thư mục chứa Dockerfile và bối cảnh build.
  • URL: địa chỉ URL của repository từ xa.
  • -: đọc Dockerfile từ đầu vào tiêu chuẩn (stdin).

Ví dụ sử dụng cơ bản

Trong ví dụ này, Docker sẽ sử dụng Dockerfile từ thư mục hiện tại (.) và tạo ra một image với tên là myimage và tag là latest.

Terminal

docker build -t myimage:latest .

4.2 Tuỳ chỉnh lệnh build

Các tham số chính của lệnh docker build

Lệnh docker build hỗ trợ nhiều tuỳ chọn, cho phép điều chỉnh quy trình tạo.

1. Tham số -t, --tag

Tham số -t hoặc --tag được dùng để gán tên và tag cho image được tạo.

Terminal

docker build -t myimage:latest .

2. Tham số -f, --file

Tham số -f hoặc --file cho phép chỉ định Dockerfile thay thế nếu nó khác với Dockerfile chuẩn.

Terminal

docker build -f Dockerfile.dev -t myimage:dev .

3. Tham số --build-arg

Tham số --build-arg được dùng để truyền các tham số build, được định nghĩa bằng chỉ thị ARG trong Dockerfile.

Terminal

docker build --build-arg APP_VERSION=1.0 -t myimage:1.0 .

4. Tham số --no-cache

Tham số --no-cache cho phép thực hiện build mà không sử dụng cache. Điều này hữu ích nếu cần đảm bảo mọi lệnh đều được thực thi lại.

Terminal

docker build --no-cache -t myimage:latest .

5. Tham số --target

Tham số --target được dùng để chỉ định giai đoạn mục tiêu trong build nhiều giai đoạn.

Terminal

docker build --target builder -t myimage:builder .

6. Tham số --rm

Tham số --rm yêu cầu Docker xóa các container trung gian sau khi tạo image thành công (theo mặc định được bật).

Terminal

docker build --rm -t myimage:latest .

4.3 Ví dụ docker build

Ví dụ 1: Xây dựng cơ bản

Giả sử bạn có một ứng dụng đơn giản bằng Node.js, và bạn muốn tạo một Docker image để triển khai nó.

Dockerfile:

dockerfile

FROM node:14

WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
        
EXPOSE 3000
        
CMD ["node", "app.js"]

Câu lệnh build:

Terminal

docker build -t mynodeapp:latest .

Trong ví dụ này, Docker sẽ tạo một image mynodeapp với tag latest, sử dụng Dockerfile từ thư mục hiện tại.

Ví dụ 2: Xây dựng với các tham số

Các tham số build cho phép truyền các biến vào Dockerfile trong quá trình build.

Dockerfile

dockerfile

FROM node:14

ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION}
        
WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
        
EXPOSE 3000
        
CMD ["node", "app.js"]

Câu lệnh build:

Terminal

docker build --build-arg APP_VERSION=1.0 -t mynodeapp:1.0 .

Trong ví dụ này, tham số APP_VERSION được truyền vào Dockerfile, cho phép chỉ định phiên bản ứng dụng trong quá trình build.

Ví dụ 3: Xây dựng nhiều giai đoạn

Xây dựng nhiều giai đoạn được sử dụng để tạo các image chỉ bao gồm các thành phần cần thiết. Điều này giúp giảm kích thước của image cuối cùng.

Dockerfile

Dockerfile


# Giai đoạn xây dựng
FROM node:14 AS builder
        
WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
RUN npm run build
        
# Tạo image cuối cùng với tập hợp file tối thiểu
FROM nginx:alpine
        
COPY --from=builder /app/build /usr/share/nginx/html

Câu lệnh build:

Terminal


docker build -t mywebapp:latest .

Trong ví dụ này, đầu tiên tạo ra một image trung gian builder, trong đó ứng dụng được build. Sau khi build, ứng dụng được chuyển sang image cuối cùng, nơi Nginx được sử dụng để phục vụ nội dung đã chuẩn bị.

4.4 Các mẹo thực hành

1. Tối ưu hóa thứ tự các chỉ dẫn

Để sử dụng hiệu quả cache của Docker, việc sắp xếp đúng thứ tự các chỉ dẫn là rất quan trọng. Ví dụ, trước tiên hãy sao chép các file ít thay đổi, chẳng hạn như package.json, để giảm thiểu việc rebuild dependency. Sau đó mới thực hiện sao chép các file còn lại.

dockerfile

COPY package*.json ./
RUN npm install
COPY . .

2. Sử dụng .dockerignore

Thêm file .dockerignore để loại trừ các file và thư mục không cần thiết khỏi context build. Điều này sẽ giảm kích thước context và tăng tốc độ build image.

Ví dụ file .dockerignore:

Text

node_modules
dist
*.log

3. Build nhiều giai đoạn

Sử dụng kỹ thuật build nhiều giai đoạn để tạo các image nhẹ và tối giản. Phương pháp này cho phép bạn chỉ bao gồm những file và dependency cần thiết cho ứng dụng hoạt động, loại bỏ các dữ liệu thừa như file tạm thời hoặc mã nguồn khỏi image cuối cùng.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION