docker 常用指令

Votes

Upvotes

0

Upvotes: 0

Downvotes

0

Downvotes: 0

Net votes

+0

Prompt #1

可以幫我寫一個docker 常用指令彙整嗎?

Response #1

當然可以。下面給你一份「Docker 常用指令彙整」(偏實戰、直接可複製貼上)。我把它分成:日常操作、映像檔、容器、logs/exec、網路、volume、compose、清理、除錯小抄。

1) 基本資訊 / 狀態

docker version
docker info
docker context ls
docker system df

2) 映像檔(Image)

搜尋/拉取/查看

docker search nginx
docker pull nginx:latest
docker images
docker image ls
docker image inspect nginx:latest
docker history nginx:latest

建立(build)

docker build -t myapp:1.0 .
docker build -t myapp:1.0 -f Dockerfile .
docker build --no-cache -t myapp:1.0 .

標籤/推送(常用於 registry)

docker tag myapp:1.0 myrepo/myapp:1.0
docker push myrepo/myapp:1.0

刪除

docker rmi myapp:1.0
docker image prune
docker image prune -a

3) 容器(Container)

建立並啟動(run)

# 前台跑(Ctrl+C 結束)
docker run --rm nginx:latest

# 背景跑(daemon)
docker run -d --name web -p 8080:80 nginx:latest

# 掛載資料夾(開發常用)
docker run -d --name app -p 8000:8000 \
  -v "$PWD":/app -w /app myapp:1.0

# 設環境變數
docker run -d --name app -e ENV=prod myapp:1.0

# 限制資源(簡單版)
docker run -d --name app --cpus=2 --memory=2g myapp:1.0

查看 / 列表

docker ps
docker ps -a
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
docker inspect <container>

停止 / 啟動 / 重啟 / 刪除

docker stop web
docker start web
docker restart web
docker rm web
docker rm -f web

4) 進入容器 / 執行指令 / logs

logs

docker logs web
docker logs -f web
docker logs --tail 200 web

exec(進去跑指令)

docker exec -it web sh
docker exec -it web bash
docker exec web ls -la

cp(容器與主機互拷)

docker cp web:/etc/nginx/nginx.conf .
docker cp ./local.conf web:/etc/nginx/conf.d/default.conf

5) Port / DNS / Host 相關

# port 映射:主機:容器
-p 8080:80

# 只綁定 localhost(比較安全)
-p 127.0.0.1:8080:80

# 自訂 host entry
--add-host host.docker.internal:host-gateway

6) 網路(Network)

列表 / 建立 / 連接

docker network ls
docker network inspect bridge

docker network create mynet
docker run -d --name db --network mynet postgres:16
docker run -d --name api --network mynet myapp:1.0

連接 / 解除

docker network connect mynet web
docker network disconnect mynet web

7) Volume(資料持久化)

列表 / 建立 / 檢視

docker volume ls
docker volume create pgdata
docker volume inspect pgdata

使用 volume

docker run -d --name db \
  -e POSTGRES_PASSWORD=pass \
  -v pgdata:/var/lib/postgresql/data \
  postgres:16

查看某個 volume 裡的檔案(很實用)

docker run --rm -it -v pgdata:/data alpine sh
# 進去後 ls -la /data

刪除

docker volume rm pgdata
docker volume prune

8) Docker Compose(多容器專案)

docker compose version
docker compose up -d
docker compose up --build -d
docker compose down
docker compose down -v          # 連 volumes 一起刪(小心)
docker compose ps
docker compose logs -f
docker compose exec <service> sh
docker compose pull
docker compose restart

9) 清理(省硬碟)

docker system prune
docker system prune -a
docker builder prune
docker container prune
docker image prune -a
docker volume prune

10) 除錯 / 常用小抄

看容器資源用量

docker stats
docker stats web

看容器「為什麼死掉」

docker ps -a
docker logs <container>
docker inspect <container> | less

看容器的 PID / IP

docker inspect -f '{{.State.Pid}}' web
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' web

只跑一次就刪(乾淨)

docker run --rm -it alpine sh

如果你想要更貼近你平常的用法(例如:開發掛載 $PWD + -w、GPU、Postgres、或偏 Podman 風格),我也可以幫你整理成「你自己的版本」一頁 A4 小抄。你現在最常用的情境是哪三種?(例如:Web app、DB、訓練/跑腳本)

Prompt #2

可以 list tag嗎?

Response #2

可以。你如果是想「列出本機有哪些 image tag」,Docker 其實沒有獨立的 tag ls 指令,通常是用列出 images 來看每個 image 的 tags。

列出所有 image 的 tags(最常用)

docker images
# 或
docker image ls

只列出 repo:tag(乾淨版)

docker image ls --format '{{.Repository}}:{{.Tag}}'

列出「某個 repo」底下有哪些 tags(本機已存在的)

docker image ls --format '{{.Repository}}:{{.Tag}}' | grep '^nginx:'

列出 digests / 詳細資訊(本機)

docker image ls --digests
docker image inspect <image:tag>

如果你問的是「遠端 registry(例如 Docker Hub / GHCR)有哪些 tags」,那就不是 docker 本機指令能直接完整列出(要用 registry API、skopeo、或 crane 這類工具)。你是要列本機的 tags,還是想列某個遠端 repo 的 tags?

Comments

Login to add a comment.

No comments yet.