Docker、Docker Compose、Container、Image、Volume、Network 與 Laradock 常用指令整理。
Container
| 指令 | 用途 | 備註 |
|---|---|---|
docker ps |
顯示正在執行的 Container | |
docker ps -a |
顯示所有 Container | 包含已停止的 Container |
docker start CONTAINER |
啟動 Container | 可使用 Container Name 或 ID |
docker stop CONTAINER |
停止 Container | |
docker restart CONTAINER |
重新啟動 Container | |
docker kill CONTAINER |
強制停止 Container | |
docker rm CONTAINER |
刪除已停止的 Container | |
docker rm -f CONTAINER |
強制刪除 Container | 包含正在執行的 Container |
docker pause CONTAINER |
暫停 Container | |
docker unpause CONTAINER |
恢復 Container |
Container 批次操作
停止所有正在執行的 Container:
docker stop $(docker ps -q)
啟動所有 Container:
docker start $(docker ps -a -q)
停止所有 Container:
docker stop $(docker ps -a -q)
刪除所有已停止的 Container:
docker container prune
強制刪除所有 Container:
docker rm -f $(docker ps -a -q)
原本的
docker stop $(docker ps -a -q)是停止全部 Container,不是啟動。原本的
docker start $(docker ps -a -q)才是啟動全部 Container。
進入 Container
| 指令 | 用途 |
|---|---|
docker exec -it CONTAINER bash |
使用 Bash 進入 Container |
docker exec -it CONTAINER sh |
使用 Shell 進入 Container |
docker attach CONTAINER |
Attach 到 Container 主程序 |
例如:
docker exec -it nginx bash
如果 Container 沒有 Bash:
docker exec -it nginx sh
執行單一指令:
docker exec CONTAINER ls -la
例如:
docker exec mysql mysql --version
Container Log
| 指令 | 用途 |
|---|---|
docker logs CONTAINER |
查看 Container Log |
docker logs -f CONTAINER |
即時查看 Log |
docker logs --tail 100 CONTAINER |
查看最後 100 行 |
docker logs --since 1h CONTAINER |
查看最近一小時 Log |
例如:
docker logs -f nginx
Container 狀態
| 指令 | 用途 |
|---|---|
docker stats |
即時查看 Container CPU / Memory |
docker stats CONTAINER |
查看指定 Container 資源 |
docker inspect CONTAINER |
查看 Container 詳細資訊 |
docker top CONTAINER |
查看 Container Process |
docker port CONTAINER |
查看 Port Mapping |
Docker Image
| 指令 | 用途 |
|---|---|
docker images |
顯示所有 Image |
docker image ls |
顯示所有 Image |
docker pull IMAGE |
下載 Image |
docker build -t NAME . |
建立 Image |
docker build --no-cache -t NAME . |
不使用 Cache 建立 Image |
docker rmi IMAGE |
刪除 Image |
docker image prune |
清除未使用的 Image |
docker image prune -a |
清除所有未被 Container 使用的 Image |
例如:
docker pull nginx
建立 Image:
docker build -t my-app .
指定 Dockerfile:
docker build -f Dockerfile.production -t my-app .
Docker Run
基本執行:
docker run IMAGE
背景執行:
docker run -d IMAGE
指定 Container Name:
docker run -d --name my-nginx nginx
Port Mapping:
docker run -d -p 8080:80 nginx
Volume:
docker run -d -v ./data:/app/data IMAGE
Environment Variable:
docker run -d -e APP_ENV=production IMAGE
Container 停止後自動刪除:
docker run --rm IMAGE
互動模式:
docker run -it IMAGE bash
Docker Compose
目前建議使用:
docker compose
舊版則是:
docker-compose
Docker Compose 啟動
啟動:
docker compose up
背景執行:
docker compose up -d
重新 Build 並啟動:
docker compose up -d --build
指定 Compose File:
docker compose -f docker-compose.yml up -d
使用多個 Compose File:
docker compose \
-f docker-compose.yml \
-f docker-compose.production.yml \
up -d
Docker Compose 停止
停止服務但保留 Container:
docker compose stop
重新啟動:
docker compose restart
停止並移除 Container / Network:
docker compose down
同時移除 Orphan Container:
docker compose down --remove-orphans
同時移除 Volume:
docker compose down -v
docker compose down --remove-orphans的主要用途是清除目前 Compose 設定中已不存在的舊服務 Container,不是「清除 file」。
Docker Compose Build
重新 Build:
docker compose build
不使用 Cache:
docker compose build --no-cache
Build 指定 Service:
docker compose build --no-cache redis-cluster
Build 多個 Service:
docker compose build --no-cache \
nginx \
mysql \
phpmyadmin \
redis \
redis-cluster \
php-worker \
workspace \
laravel-echo-server
Build 後啟動:
docker compose up -d --build
Docker Compose Service
查看服務:
docker compose ps
查看 Log:
docker compose logs
即時查看:
docker compose logs -f
指定 Service:
docker compose logs -f nginx
啟動指定 Service:
docker compose up -d nginx
重新啟動指定 Service:
docker compose restart nginx
停止指定 Service:
docker compose stop nginx
Docker Compose Exec
進入 Service:
docker compose exec SERVICE bash
例如:
docker compose exec workspace bash
如果沒有 Bash:
docker compose exec SERVICE sh
直接執行指令:
docker compose exec workspace php artisan migrate
Volume
| 指令 | 用途 |
|---|---|
docker volume ls |
查看 Volume |
docker volume inspect VOLUME |
查看 Volume 詳細資料 |
docker volume rm VOLUME |
刪除 Volume |
docker volume prune |
清除未使用 Volume |
查看:
docker volume ls
清除未使用 Volume:
docker volume prune
Volume 可能包含 Database 資料,刪除前要先確認。
Network
| 指令 | 用途 |
|---|---|
docker network ls |
查看 Network |
docker network inspect NETWORK |
查看 Network |
docker network create NETWORK |
建立 Network |
docker network rm NETWORK |
刪除 Network |
docker network prune |
清除未使用 Network |
例如:
docker network ls
Docker 清理
查看 Docker 使用空間:
docker system df
清除停止的 Container、未使用 Network、Build Cache:
docker system prune
清除包含未使用 Image:
docker system prune -a
清除包含 Volume:
docker system prune -a --volumes
docker system prune -a --volumes會刪除大量 Docker 資源,尤其需要注意資料庫 Volume。
Docker Build Cache
查看 Build Cache:
docker builder prune
清除全部未使用 Build Cache:
docker builder prune -a
File / Permission
查看權限:
ls -la
Laravel Storage 常見權限:
chown -R 1000:1000 storage
或:
chown -R 1000:1000 storage bootstrap/cache
修改權限:
chmod -R 775 storage bootstrap/cache
開發環境臨時處理:
chmod -R 777 storage
chmod -R 777權限過大,不建議正式環境使用。
Laradock
進入 Laradock Workspace:
docker compose exec workspace bash
舊版:
docker-compose exec workspace bash
啟動基本服務:
docker compose up -d nginx mysql phpmyadmin
啟動 Laravel + Redis:
docker compose up -d \
nginx \
mysql \
phpmyadmin \
redis \
redis-webui \
php-worker \
workspace \
laravel-echo-server
重新 Build Laradock 常用服務:
docker compose build --no-cache \
nginx \
mysql \
phpmyadmin \
redis \
redis-cluster \
php-worker \
workspace \
laravel-echo-server
啟動 Laravel Echo Server:
docker compose up -d laravel-echo-server
查看 Laradock:
docker compose ps
Laradock + Laravel
進入 Workspace:
docker compose exec workspace bash
Migration:
php artisan migrate
Seeder:
php artisan db:seed
清除 Laravel Cache:
php artisan optimize:clear
Composer:
composer install
Node:
npm install
npm run dev
也可以不進 Workspace,直接從 Host 執行:
docker compose exec workspace php artisan migrate
docker compose exec workspace php artisan optimize:clear
docker compose exec workspace composer install
MySQL
進入 MySQL Container:
docker compose exec mysql bash
登入 MySQL:
docker compose exec mysql mysql -u root -p
查看 Log:
docker compose logs -f mysql
Redis
Redis CLI:
docker compose exec redis redis-cli
測試 Redis:
docker compose exec redis redis-cli ping
正常應回:
PONG
查看 Redis Log:
docker compose logs -f redis
Nginx
重新啟動:
docker compose restart nginx
查看 Log:
docker compose logs -f nginx
測試 Nginx Config:
docker compose exec nginx nginx -t
Reload:
docker compose exec nginx nginx -s reload
Docker Debug
Container 不斷 Restart:
docker ps -a
docker logs CONTAINER
Compose Service 啟動失敗:
docker compose ps
docker compose logs SERVICE
查看完整 Container 設定:
docker inspect CONTAINER
查看 Network:
docker network ls
docker network inspect NETWORK
查看 Volume:
docker volume ls
docker volume inspect VOLUME
查看 Docker 空間:
docker system df
常用開發流程
啟動專案:
docker compose up -d
重新 Build:
docker compose up -d --build
查看狀態:
docker compose ps
查看 Log:
docker compose logs -f
進入 Application Container:
docker compose exec workspace bash
停止專案:
docker compose down
Docker 專案完全重建
一般重新 Build:
docker compose down
docker compose up -d --build
不使用 Cache:
docker compose down
docker compose build --no-cache
docker compose up -d
如果需要清除 Orphan:
docker compose down --remove-orphans
docker compose up -d --build
如果連 Volume 都要刪除:
docker compose down -v
docker compose up -d --build
down -v可能刪除 MySQL、PostgreSQL 等 Database Volume,使用前需確認。
常用快速檢查
Docker:
docker version
docker info
Container:
docker ps -a
Image:
docker images
Compose:
docker compose ps
Log:
docker compose logs -f
資源:
docker stats
硬碟:
docker system df
舊版 Docker Compose
舊環境可能仍使用:
docker-compose up -d
docker-compose down
docker-compose build
docker-compose ps
docker-compose logs
docker-compose exec workspace bash
對應新版:
docker compose up -d
docker compose down
docker compose build
docker compose ps
docker compose logs
docker compose exec workspace bash
新文件建議統一使用:
docker compose