AI Engineering Tools

Lập trình

Docker

Hướng dẫn tra cứu Docker image, container, Dockerfile, Compose, port, volume, log và các lỗi thường gặp.

33 mục

Khái niệm cốt lõi

Docker

Docker

docker --version

Ý nghĩa

Một công cụ đóng gói và chạy các ứng dụng trong các container cách ly.

Khi dùng

Sử dụng khi bạn muốn ứng dụng chạy với cùng một gói OS, thời gian chạy và các phụ thuộc trên các máy khác nhau.

Ví dụ

docker --version

Ví dụ yêu cầu

Giải thích xem dự án này có thể chạy được với Docker hay không.

Khái niệm cốt lõi

Docker daemon

Docker daemon

Không thể kết nối với daemon Docker

Ý nghĩa

Dịch vụ nền xây dựng hình ảnh và chạy các container.

Khi dùng

Nếu các lệnh Docker không thể kết nối, Docker Desktop hoặc dịch vụ Docker có thể chưa chạy.

Ví dụ

Không thể kết nối với daemon Docker

Ví dụ yêu cầu

Kiểm tra lý do tại sao các lệnh Docker không thể kết nối đến daemon.

Khái niệm cốt lõi

Hình ảnh

Image

node:20-alpine

Ý nghĩa

Một mẫu có thể tái sử dụng được sử dụng để tạo các container.

Khi dùng

Hình ảnh xác định hệ điều hành OS, môi trường chạy, thư viện và các tệp ứng dụng mà một container khởi động.

Ví dụ

node:20-alpine

Ví dụ yêu cầu

Hãy cho tôi biết hình ảnh gốc (base image) mà Dockerfile này sử dụng.

Khái niệm cốt lõi

Container

Container

docker ps

Ý nghĩa

Một phiên bản đang chạy hoặc đã dừng được tạo từ một hình ảnh.

Khi dùng

Sử dụng container để chạy ứng dụng, cơ sở dữ liệu, bộ nhớ đệm hoặc quy trình làm việc trong các môi trường cách ly.

Ví dụ

docker ps

Ví dụ yêu cầu

Liệt kê các container đang chạy và giải thích những gì mỗi container làm.

Khái niệm cốt lõi

Bảng đăng ký.

Registry

docker pull postgres:16

Ý nghĩa

Một máy chủ nơi các hình ảnh Docker được lưu trữ và tải xuống.

Khi dùng

Docker Hub and private registries are used to share base images or deployable app images.

Ví dụ

docker pull postgres:16

Ví dụ yêu cầu

Giải thích từ đâu hình ảnh này sẽ được tải xuống.

Dockerfile

Dockerfile

Dockerfile

Dockerfile

Ý nghĩa

Một tệp định nghĩa cách xây dựng một hình ảnh Docker.

Khi dùng

Sử dụng để cài đặt các phụ thuộc, sao chép các tệp ứng dụng và định nghĩa lệnh để khởi động ứng dụng.

Ví dụ

Dockerfile

Ví dụ yêu cầu

Đọc tệp Dockerfile này và tóm tắt các bước xây dựng.

Dockerfile

FROM

FROM

FROM node:20-alpine

Ý nghĩa

Lệnh Dockerfile chọn hình ảnh gốc.

Khi dùng

Nó quyết định lớp hệ điều hành (OS) ban đầu và thường là phiên bản runtime.

Lưu ý

Thay đổi hình ảnh gốc có thể ảnh hưởng đến các lệnh có sẵn, bản cập nhật bảo mật và kích thước hình ảnh.

Ví dụ

FROM node:20-alpine

Ví dụ yêu cầu

Giải thích những gì hình ảnh FROM này bao gồm.

Dockerfile

WORKDIR

WORKDIR

WORKDIR /app

Ý nghĩa

Đặt thư mục bên trong hình ảnh nơi các lệnh tiếp theo được thực thi.

Khi dùng

Sử dụng để các lệnh COPY, RUN và CMD hoạt động từ một thư mục ứng dụng có thể dự đoán được.

Ví dụ

WORKDIR /app

Ví dụ yêu cầu

Giải thích thư mục nào mà Dockerfile này sử dụng làm thư mục ứng dụng.

Dockerfile

COPY

COPY

COPY package.json package-lock.json ./

Ý nghĩa

Sao chép các tệp từ môi trường xây dựng vào hình ảnh.

Khi dùng

Sử dụng để thêm các tệp phụ thuộc, mã nguồn và tài sản tĩnh vào hình ảnh.

Ví dụ

COPY package.json package-lock.json ./

Ví dụ yêu cầu

Hãy cho tôi biết những tệp nào được thêm vào image bởi bước COPY này.

Dockerfile

RUN

RUN

RUN npm ci

Ý nghĩa

Thực hiện một lệnh trong khi xây dựng hình ảnh.

Khi dùng

Sử dụng nó để cài đặt các gói OS, cài đặt các phụ thuộc hoặc xây dựng các tệp ứng dụng.

Lưu ý

RUN xảy ra trong quá trình xây dựng ảnh, không phải khi container khởi động.

Ví dụ

RUN npm ci

Ví dụ yêu cầu

Tách biệt các lệnh biên dịch Dockerfile khỏi các lệnh khởi động container.

Dockerfile

CMD

CMD

CMD ["npm", "run", "start"]

Ý nghĩa

Xác định lệnh mặc định được thực thi khi container khởi động.

Khi dùng

Sử dụng nó để khởi động máy chủ web, máy chủ API, quy trình làm việc hoặc tập lệnh.

Ví dụ

CMD ["npm", "run", "start"]

Ví dụ yêu cầu

Cho tôi biết lệnh nào được sử dụng để khởi động container này.

Dockerfile

EXPOSE

EXPOSE

EXPOSE 3000

Ý nghĩa

Mô tả cổng mà ứng dụng containerized dự kiến sẽ lắng nghe.

Khi dùng

Sử dụng nó như một gợi ý, sau đó xuất bản cổng với `docker run -p` hoặc các cổng của compose.

Lưu ý

EXPOSE một mình không làm cho ứng dụng có thể truy cập từ trình duyệt của bạn.

Ví dụ

EXPOSE 3000

Ví dụ yêu cầu

Giải thích xem cổng được hiển thị này có thực sự được công khai (published) hay không.

Dockerfile

.dockerignore

.dockerignore

node_modules

Ý nghĩa

Một tệp loại trừ các đường dẫn khỏi ngữ cảnh xây dựng Docker.

Khi dùng

Sử dụng để giữ các phụ thuộc cục bộ, đầu ra của quá trình xây dựng, bí mật và các tệp tạm thời ra khỏi quá trình xây dựng hình ảnh.

Ví dụ

node_modules

Ví dụ yêu cầu

Kiểm tra xem tệp .dockerignore này có loại trừ các tệp không an toàn hoặc không cần thiết hay không.

Dockerfile

Xây dựng ngữ cảnh

Build context

docker build -t my-app .

Ý nghĩa

Thư mục được gửi đến Docker trong quá trình build hình ảnh.

Khi dùng

Dấu chấm cuối cùng trong quá trình build Docker thường có nghĩa là thư mục hiện tại là ngữ cảnh build.

Lưu ý

Một ngữ cảnh lớn có thể làm chậm quá trình biên dịch và có thể vô tình bao gồm các tệp riêng tư.

Ví dụ

docker build -t my-app .

Ví dụ yêu cầu

Giải thích những tệp nào có sẵn cho quá trình xây dựng Docker này.

Docker Compose

Docker Compose

Docker Compose

docker compose up

Ý nghĩa

Một công cụ chạy nhiều dịch vụ Docker từ một tệp YAML.

Khi dùng

Sử dụng nó cho các ngăn xếp ứng dụng cộng với cơ sở dữ liệu, bộ nhớ cache, worker hoặc phát triển cục bộ.

Ví dụ

docker compose up

Ví dụ yêu cầu

Giải thích những dịch vụ nào mà tệp compose này khởi động.

Docker Compose

Dịch vụ.

services

services: web: db:

Ý nghĩa

Các thành phần ứng dụng được đặt tên được định nghĩa trong một tệp compose.

Khi dùng

Một dịch vụ web có thể chạy ứng dụng trong khi một dịch vụ cơ sở dữ liệu chạy PostgreSQL.

Ví dụ

services: web: db:

Ví dụ yêu cầu

Liệt kê các dịch vụ trong tệp compose này và mô tả những gì mỗi dịch vụ làm.

Docker Compose

docker compose up

docker compose up

docker compose up -d

Ý nghĩa

Khởi động các dịch vụ được định nghĩa trong tệp compose.

Khi dùng

Sử dụng -d khi bạn muốn các dịch vụ chạy ở chế độ nền.

Ví dụ

docker compose up -d

Ví dụ yêu cầu

Khởi động các dịch vụ compose và hiển thị những dịch vụ nào đang chạy.

Docker Compose

docker compose down

docker compose down

docker compose down

Ý nghĩa

Dừng và xóa các container được tạo bởi compose.

Khi dùng

Sử dụng khi bạn đã hoàn thành một ngăn xếp phát triển cục bộ.

Lưu ý

Các ổ đĩa được đặt tên thường vẫn còn trừ khi bạn xóa chúng một cách rõ ràng.

Ví dụ

docker compose down

Ví dụ yêu cầu

Dừng ngăn xếp compose này mà không xóa dữ liệu vĩnh viễn.

Lệnh

docker build

docker build

docker build -t my-app .

Ý nghĩa

Xây dựng hình ảnh Docker từ một Dockerfile và ngữ cảnh.

Khi dùng

Sử dụng nó sau khi viết một Dockerfile hoặc thay đổi các phụ thuộc của ứng dụng.

Ví dụ

docker build -t my-app .

Ví dụ yêu cầu

Xây dựng hình ảnh Docker này và tóm tắt bất kỳ lỗi nào trong quá trình xây dựng.

Lệnh

docker run

docker run

docker run --name my-app -p 3000:3000 my-app

Ý nghĩa

Tạo và khởi động một container từ một hình ảnh.

Khi dùng

Sử dụng khi bạn muốn bắt đầu một container trực tiếp mà không cần compose.

Ví dụ

docker run --name my-app -p 3000:3000 my-app

Ví dụ yêu cầu

Chạy hình ảnh này và giải thích URL của trình duyệt.

Lệnh

docker ps

docker ps

docker ps

Ý nghĩa

Liệt kê các container đang chạy.

Khi dùng

Sử dụng `docker ps -a` khi bạn cũng muốn hiển thị các container đã dừng.

Ví dụ

docker ps

Ví dụ yêu cầu

Hiển thị các container đang chạy và các cổng đã được công khai của chúng.

Lệnh

docker stop

docker stop

docker stop my-app

Ý nghĩa

Dừng một container đang chạy.

Khi dùng

Sử dụng nó trước khi xóa một container hoặc giải phóng một cổng.

Ví dụ

docker stop my-app

Ví dụ yêu cầu

Dừng container bằng cổng 3000.

Lệnh

docker logs

docker logs

docker logs my-app

Ý nghĩa

In các bản ghi nhật ký từ một container.

Khi dùng

Sử dụng nó khi một container thoát, gặp sự cố hoặc ứng dụng không phản hồi.

Ví dụ

docker logs my-app

Ví dụ yêu cầu

Đọc nhật ký của container này và tìm lỗi đầu tiên.

Lệnh

docker exec

docker exec

docker exec -it my-app sh

Ý nghĩa

Thực hiện một lệnh bên trong một container đang chạy.

Khi dùng

Sử dụng để kiểm tra các tệp, biến môi trường hoặc các công cụ đã cài đặt bên trong một container.

Lưu ý

Các thay đổi được thực hiện thủ công trong một container có thể biến mất khi container đó được tạo lại.

Ví dụ

docker exec -it my-app sh

Ví dụ yêu cầu

Mở một shell trong container này và kiểm tra các biến môi trường của nó.

Port và mạng

cổng

ports

3000:3000

Ý nghĩa

Ánh xạ một cổng trên máy của bạn thành một cổng bên trong container.

Khi dùng

Sử dụng để trình duyệt có thể truy cập ứng dụng web đang chạy bên trong một container.

Lưu ý

Bên trái là cổng máy chủ, và bên phải là cổng container.

Ví dụ

3000:3000

Ví dụ yêu cầu

Giải thích URL nào tôi nên mở để cấu hình các cổng này.

Port và mạng

localhost trong Docker

localhost in Docker

host.docker.internal

Ý nghĩa

localhost có thể có nghĩa là chính container, không phải máy chủ của bạn, khi mã chạy bên trong Docker.

Khi dùng

Sử dụng tên dịch vụ trong mạng compose, hoặc host.docker.internal khi một container phải truy cập máy chủ.

Ví dụ

host.docker.internal

Ví dụ yêu cầu

Giải thích tại sao localhost không thể kết nối đến cơ sở dữ liệu từ container này.

Tệp và dữ liệu

Âm lượng

Volume

db-data:/var/lib/postgresql/data

Ý nghĩa

Docker-managed storage that can persist data outside a container's lifecycle.

Khi dùng

Sử dụng khối dữ liệu (volumes) cho dữ liệu cơ sở dữ liệu hoặc các tệp khác cần tồn tại sau khi container được tạo lại.

Lưu ý

Loại bỏ các ổ đĩa có thể xóa dữ liệu vĩnh viễn.

Ví dụ

db-data:/var/lib/postgresql/data

Ví dụ yêu cầu

Hãy cho tôi biết các volume nào trong compose được sử dụng để lưu trữ dữ liệu vĩnh viễn.

Tệp và dữ liệu

Liên kết ổ đĩa

Bind mount

./src:/app/src

Ý nghĩa

Kết nối một thư mục trên máy chủ với một đường dẫn trong container.

Khi dùng

Sử dụng nó trong quá trình phát triển để các chỉnh sửa mã trên máy chủ xuất hiện bên trong container.

Lưu ý

Một gắn kết có thể ẩn các tệp đã được sao chép vào hình ảnh tại cùng một đường dẫn.

Ví dụ

./src:/app/src

Ví dụ yêu cầu

Giải thích xem ổ đĩa (volume) này là ổ đĩa được đặt tên (named volume) hay là một điểm gắn kết (bind mount).

Tệp và dữ liệu

môi trường

environment

DATABASE_URL=postgres://db:5432/app

Ý nghĩa

Các giá trị cấu hình được truyền vào một container.

Khi dùng

Sử dụng biến môi trường cho các URL cơ sở dữ liệu, cổng, chế độ, cờ tính năng và cài đặt thời gian chạy.

Lưu ý

Không nhúng bí mật vào các hình ảnh công khai hoặc commit các giá trị bí mật thực tế.

Ví dụ

DATABASE_URL=postgres://db:5432/app

Ví dụ yêu cầu

Kiểm tra các biến môi trường mà container này cần.

Gỡ lỗi

cổng đã được sử dụng.

port is already allocated

Không thể liên kết đến 0.0.0.0:3000: cổng đã được sử dụng.

Ý nghĩa

Docker cannot publish a host port because another process or container is already using it.

Khi dùng

Tìm quy trình hoặc container đang sử dụng cổng này, sau đó dừng nó hoặc chọn một cổng khác trên máy chủ.

Ví dụ

Không thể liên kết đến 0.0.0.0:3000: cổng đã được sử dụng.

Ví dụ yêu cầu

Tìm ứng dụng nào đang sử dụng cổng Docker này và đề xuất một giải pháp an toàn.

Gỡ lỗi

tên container đã được sử dụng.

container name is already in use

Xung đột. Tên container "/my-app" đã được sử dụng.

Ý nghĩa

Một container có cùng tên đã tồn tại.

Khi dùng

Liệt kê các container hiện có, sau đó tái sử dụng, xóa hoặc đổi tên container cũ.

Ví dụ

Xung đột. Tên container "/my-app" đã được sử dụng.

Ví dụ yêu cầu

Giải quyết xung đột tên container này mà không làm mất dữ liệu một cách không mong muốn.

Gỡ lỗi

Xây dựng bộ nhớ đệm

Build cache

docker build --no-cache -t my-app .

Ý nghĩa

Docker can reuse previous build layers to make builds faster.

Khi dùng

Nếu một thay đổi có vẻ bị bỏ qua, hãy kiểm tra thứ tự trong Dockerfile hoặc xây dựng lại mà không sử dụng bộ nhớ đệm như một bước chẩn đoán.

Lưu ý

Tùy chọn `--no-cache` có thể làm chậm quá trình biên dịch, vì vậy hãy sử dụng nó một cách có chủ ý.

Ví dụ

docker build --no-cache -t my-app .

Ví dụ yêu cầu

Giải thích xem bộ nhớ đệm (cache) của Docker có thể đang che giấu thay đổi của bạn hay không.

An toàn

docker system prune

docker system prune

docker system prune

Ý nghĩa

Loại bỏ dữ liệu Docker không sử dụng, chẳng hạn như các container đã dừng, mạng không sử dụng và hình ảnh không còn sử dụng.

Khi dùng

Sử dụng nó khi Docker sử dụng quá nhiều dung lượng đĩa và bạn hiểu những gì sẽ bị xóa.

Lưu ý

Với các cờ bổ sung, prune có thể xóa các hình ảnh hoặc khối lượng mà bạn vẫn quan tâm.

Ví dụ

docker system prune

Ví dụ yêu cầu

Trước khi loại bỏ Docker, hãy cho biết những gì sẽ bị xóa và dữ liệu nào an toàn.