Chuyển tới nội dung chính

Quản lý Docker

{/* Trang này được tạo tự động từ SKILL.md của kỹ năng bởi website/scripts/generate-skill-docs.py. Chỉnh sửa nguồn SKILL.md, không phải trang này. */}`#Quản lý Docker

Quản lý vùng chứa Docker, hình ảnh, khối lượng, mạng và ngăn xếp Compose — vận hành vòng đời, gỡ lỗi, dọn dẹp và tối ưu hóa Dockerfile.

Siêu dữ liệu kỹ năng

NguồnTùy chọn — cài đặt với
`Hermes skills install official/devops/Docker-management
`
Đường dẫn

optional-skills/devops/Docker-management ` | | Phiên bản |

1.0.0 ` | | Tác giả | mùa xuân24 | | Giấy phép | MIT | | Nền tảng | Linux, macOS, Windows | | Thẻ |

Docker

, `containers

, `devops

, `infrastructure

, `compose

, `images

, `volumes

, `networks

, debugging |

Tham khảo: đầy đủ SKILL.md

thông tin

Sau đây là định nghĩa kỹ năng đầy đủ mà Hermes tải khi kỹ năng này được kích hoạt. Đây là những gì tác nhân coi là hướng dẫn khi kỹ năng được kích hoạt.

#Quản lý Docker

Quản lý vùng chứa Docker, hình ảnh, khối lượng, mạng và ngăn xếp Compose bằng cách sử dụng các lệnh CLI Docker tiêu chuẩn. Không có sự phụ thuộc bổ sung nào ngoài chính Docker.

Khi nào nên sử dụng

  • Chạy, dừng, khởi động lại, loại bỏ hoặc kiểm tra container
  • Xây dựng, kéo, đẩy, gắn thẻ hoặc dọn dẹp hình ảnh Docker
  • Làm việc với Docker Compose (ngăn xếp đa dịch vụ)
  • Quản lý khối lượng hoặc mạng
  • Gỡ lỗi vùng chứa bị lỗi hoặc phân tích nhật ký
  • Kiểm tra việc sử dụng đĩa Docker hoặc giải phóng dung lượng
  • Xem lại hoặc tối ưu hóa Dockerfile

Điều kiện tiên quyết

  • Docker Engine được cài đặt và chạy
  • Người dùng đã thêm vào nhóm Docker (hoặc sử dụng `sudo

)

  • Docker Compose v2 (đi kèm với cài đặt Docker hiện đại)

Kiểm tra nhanh:

Docker --version && Docker compose version

`

## Tham khảo nhanh

| Nhiệm vụ | Lệnh |
|------|----------|
| Chạy container (nền) |

Docker run -d --name NAME IMAGE
` |
| Dừng + xóa |

Docker stop NAME && Docker rm NAME
` |
| Xem nhật ký (theo dõi) |

Docker logs --tail 50 -f NAME
` |
| Vỏ vào container |

Docker exec -it NAME /bin/sh
` |
| Liệt kê tất cả các container |

Docker ps -a
` |
| Xây dựng hình ảnh |

Docker build -t TAG .
` |
| Soạn thảo |

Docker compose up -d
` |
| Soạn thảo |

Docker compose down
` |
| Sử dụng đĩa |

Docker system df
` |
| Dọn dẹp lủng lẳng |

Docker image prune && Docker container prune
` |

## Thủ tục

### 1. Xác định tên miền

Chỉ ra khu vực nào yêu cầu rơi vào:
- **Vòng đời của vùng chứa** → chạy, dừng, khởi động, khởi động lại, rm, tạm dừng/bỏ tạm dừng

- **Tương tác vùng chứa** → thực thi, cp, nhật ký, kiểm tra, số liệu thống kê
- **Quản lý hình ảnh** → xây dựng, kéo, đẩy, gắn thẻ, rmi, lưu/tải
- **Docker Compose** → lên, xuống, ps, logs, exec, build, config
- **Khối lượng & mạng** → tạo, kiểm tra, rm, cắt tỉa, kết nối
- **Khắc phục sự cố** → phân tích nhật ký, mã thoát, sự cố tài nguyên

### 2. Khai thác container`**Chạy vùng chứa mới:**

``` bash

# Detached service with port mapping
Docker run -d --name web -p 8080:80 nginx

# With environment variables
Docker run -d -e POSTGRES_PASSWORD=secret -e POSTGRES_DB=mydb --name db postgres:16

# With persistent data (named volume)
Docker run -d -v pgdata:/var/lib/PostgreSQL/data --name db postgres:16

# For development (bind mount source code)
Docker run -d -v $(pwd)/src:/app/src -p 3000:3000 --name dev my-app

# Interactive debugging (auto-remove on exit)
Docker run -it --rm ubuntu:22.04 /bin/bash

# With resource limits and restart policy
Docker run -d --memory=512m --cpus=1.5 --restart=unless-stopped --name app my-app

`
``Các cờ chính: Đã tách

-d

,

-it
` tương tác+tty,

--rm
` tự động xóa, cổng

-p
` (máy chủ:vùng chứa),

-e
` env var, khối lượng

-v

, tên

--name

, chính sách khởi động lại

--restart

.

**Quản lý các container đang chạy:**

``` bash
Docker ps # running containers
Docker ps -a # all (including stopped)
Docker stop NAME # graceful stop
Docker start NAME # start stopped container
Docker restart NAME # stop + start
Docker rm NAME # remove stopped container
Docker rm -f NAME # force remove running container
Docker container prune # remove ALL stopped containers

`
``**Tương tác với container:**

`bash
Docker exec -it NAME /bin/sh # shell access (use /bin/bash if available)
Docker exec NAME env # view environment variables
Docker exec -u root NAME apt update # run as specific user
Docker logs --tail 100 -f NAME # follow last 100 lines
Docker logs --since 2h NAME # logs from last 2 hours
Docker cp NAME:/path/file ./local # copy file from container
Docker cp ./file NAME:/path/ # copy file to container
Docker inspect NAME # full container details (JSON)
Docker stats --no-stream # resource usage snapshot
Docker top NAME # running processes

`

### 3. Quản lý hình ảnh

`bash

# Build
Docker build -t my-app:latest .
Docker build -t my-app:prod -f Dockerfile.prod .
Docker build --no-cache -t my-app . # clean rebuild
Docker_BUILDKIT=1 Docker build -t my-app . # faster with BuildKit

# Pull and push
Docker pull node:20-alpine
Docker login ghcr.io
Docker tag my-app:latest registry/my-app:v1.0
Docker push registry/my-app:v1.0

# Inspect
Docker images # list local images
Docker history IMAGE # see layers
Docker inspect IMAGE # full details

# Cleanup
Docker image prune # remove dangling (untagged) images
Docker image prune -a # remove ALL unused images (careful!)
Docker image prune -a --filter "until=168h" # unused images older than 7 days

`

### 4. Soạn Docker

``` bash

# Start/stop
Docker compose up -d # start all services detached
Docker compose up -d --build # rebuild images before starting
Docker compose down # stop and remove containers
Docker compose down -v # also remove volumes (DESTROYS DATA)

# Monitoring
Docker compose ps # list services
Docker compose logs -f API # follow logs for specific service
Docker compose logs --tail 50 # last 50 lines all services

# Interaction
Docker compose exec API /bin/sh # shell into running service
Docker compose run --rm API npm test # one-off command (new container)
Docker compose restart API # restart specific service

# Validation
Docker compose config # validate and view resolved config

`
``**Ví dụ về soạn thảo.yml tối thiểu:**

``` yaml
services:
API:
build: .
ports:

- "3000:3000"
environment:
- DATABASE_URL=postgres://user:pass@db:5432/mydb
depends_on:
db:
condition: service_healthy`db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
volumes:
- pgdata:/var/lib/PostgreSQL/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user"]
interval: 10s
timeout: 5s
retries: 5`volumes:
pgdata:

`

### 5. Khối lượng và mạng

``` bash

# Volumes
Docker volume ls # list volumes
Docker volume create mydata # create named volume
Docker volume inspect mydata # details (mount point, etc.)
Docker volume rm mydata # remove (fails if in use)
Docker volume prune # remove unused volumes

# Networks
Docker network ls # list networks
Docker network create mynet # create bridge network
Docker network inspect mynet # details (connected containers)
Docker network connect mynet NAME # attach container to network
Docker network disconnect mynet NAME # detach container
Docker network rm mynet # remove network
Docker network prune # remove unused networks

`

### 6. Sử dụng và dọn dẹp đĩa

Luôn bắt đầu bằng việc chẩn đoán trước khi vệ sinh:

``` bash

# Check what's using space
Docker system df # summary
Docker system df -v # detailed breakdown

# Targeted cleanup (safe)
Docker container prune # stopped containers
Docker image prune # dangling images
Docker volume prune # unused volumes
Docker network prune # unused networks

# Aggressive cleanup (confirm with user first!)
Docker system prune # containers + images + networks
Docker system prune -a # also unused images
Docker system prune -a --volumes # EVERYTHING — named volumes too

`
``**Cảnh báo:** Không bao giờ chạy
`Docker system prune -a --volumes
` mà không xác nhận với người dùng. Thao tác này sẽ loại bỏ các tập được đặt tên có chứa dữ liệu quan trọng.

## Cạm bẫy| Vấn đề | Nguyên nhân | Sửa chữa |
|----------|-------|------|
| Container thoát ngay | Quá trình chính đã hoàn tất hoặc bị lỗi | Kiểm tra
`Docker logs NAME

, thử
`Docker run -it --entrypoint /bin/sh IMAGE
` |
| "cổng đã được phân bổ" | Một quy trình khác sử dụng cổng đó |

Docker ps
` hoặc
`lsof -i :PORT
` để tìm nó |
| "không còn chỗ trống trên thiết bị" | Đĩa Docker đầy |

Docker system df
` sau đó nhắm mục tiêu tỉa |
| Không thể kết nối với vùng chứa | Ứng dụng liên kết với 127.0.0.1 bên trong vùng chứa | Ứng dụng phải liên kết với
`0.0.0.0

, kiểm tra ánh xạ

-p
` |
| Quyền bị từ chối trên khối lượng | Máy chủ lưu trữ không khớp UID/GID với vùng chứa | Sử dụng

--user $(id -u):$(id -g)
` hoặc sửa quyền |
| Dịch vụ soạn thảo không thể liên lạc với nhau | Sai tên mạng hoặc dịch vụ | Dịch vụ sử dụng tên dịch vụ làm tên máy chủ, hãy kiểm tra
`Docker compose config
` |
| Xây dựng bộ đệm không hoạt động | Thứ tự lớp sai trong Dockerfile | Đặt các lớp hiếm khi thay đổi lên hàng đầu (deps trước mã nguồn) |
| Hình ảnh quá lớn | Không có bản dựng nhiều giai đoạn, không có .Dockerignore | Sử dụng các bản dựng nhiều giai đoạn, thêm

.Dockerignore
` |

## Xác minh

Sau bất kỳ thao tác Docker nào, hãy xác minh kết quả:
- **Container đã bắt đầu?** →
`Docker ps
` (kiểm tra trạng thái là "Up")
- **Nhật ký sạch?** →
`Docker logs --tail 20 NAME
` (không có lỗi)
- **Có thể truy cập cổng?** →
`curl -s http://localhost:PORT
` hoặc
`Docker port NAME

- **Hình ảnh được xây dựng?** →
`Docker images | grep TAG

- **Soạn ngăn xếp lành mạnh?** →
`Docker compose ps
` (tất cả các dịch vụ "đang chạy" hoặc "khỏe mạnh")
- **Giải phóng đĩa?** →
`Docker system df
` (so sánh trước/sau)

## Mẹo tối ưu hóa Dockerfile

Khi xem xét hoặc tạo Dockerfile, hãy đề xuất những cải tiến sau:
1. **Bản dựng nhiều giai đoạn** — tách môi trường bản dựng khỏi thời gian chạy để giảm kích thước hình ảnh cuối cùng
2. **Thứ tự lớp** — đặt các phần phụ thuộc trước mã nguồn để các thay đổi không làm mất hiệu lực các lớp được lưu trong bộ nhớ đệm
3. **Kết hợp các lệnh RUN** — ít lớp hơn, hình ảnh nhỏ hơn
4. **Sử dụng .Dockerignore** — loại trừ
`node_modules

,

.git

,
`__pycache__

, v.v.
5. **Pin phiên bản hình ảnh cơ sở** —
`node:20-alpine
` không phải
`node:latest

6. **Chạy dưới dạng không root** — thêm hướng dẫn
`USER
` để bảo mật
7. **Sử dụng đế mỏng/núi cao** —
`Python:3.12-slim
` không phải
`Python:3.12
`