Docker 是现代应用部署的重要工具,这里整理了常用的 Docker 命令和实用技巧。
基础命令
镜像管理
# 搜索镜像docker search nginx
# 拉取镜像docker pull nginx:latestdocker pull nginx:1.20
# 查看本地镜像docker imagesdocker images -a # 显示所有镜像(包括中间层)
# 删除镜像docker rmi nginx:latestdocker rmi $(docker images -q) # 删除所有镜像
容器管理
# 运行容器docker run -d --name mynginx -p 80:80 nginxdocker run -it ubuntu:20.04 /bin/bash # 交互式运行
# 查看容器docker ps # 运行中的容器docker ps -a # 所有容器docker ps -q # 只显示容器ID
# 容器操作docker start container_namedocker stop container_namedocker restart container_namedocker pause container_namedocker unpause container_name
# 删除容器docker rm container_namedocker rm $(docker ps -aq) # 删除所有容器
容器交互
进入容器
# 执行命令docker exec -it container_name /bin/bashdocker exec -it container_name sh
# 查看容器日志docker logs container_namedocker logs -f container_name # 实时查看日志docker logs --tail 100 container_name # 查看最后100行
文件操作
# 复制文件docker cp file.txt container_name:/path/to/destinationdocker cp container_name:/path/to/file.txt ./local_file.txt
# 查看容器信息docker inspect container_namedocker stats container_name # 实时资源使用情况
Docker Compose
基本使用
# docker-compose.yml 示例version: '3.8'services: web: image: nginx:latest ports: - '80:80' volumes: - ./html:/usr/share/nginx/html restart: unless-stopped
db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: myapp volumes: - db_data:/var/lib/mysql restart: unless-stopped
volumes: db_data:
Compose 命令
# 启动服务docker-compose up -d
# 查看服务状态docker-compose ps
# 查看日志docker-compose logsdocker-compose logs web
# 停止服务docker-compose stopdocker-compose down # 停止并删除容器docker-compose down -v # 同时删除数据卷
实用技巧
数据持久化
# 数据卷docker volume create mydatadocker run -v mydata:/data nginx
# 绑定挂载docker run -v /host/path:/container/path nginxdocker run -v $(pwd):/app nginx # 挂载当前目录
网络管理
# 创建网络docker network create mynetwork
# 查看网络docker network lsdocker network inspect mynetwork
# 连接容器到网络docker run --network mynetwork nginx
镜像构建
# Dockerfile 示例FROM node:16-alpine
WORKDIR /app
COPY package*.json ./RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
# 构建镜像docker build -t myapp:latest .docker build -t myapp:v1.0 --no-cache .
# 多阶段构建docker build --target production -t myapp:prod .
监控和调试
容器监控
# 资源使用情况docker statsdocker stats --no-stream # 显示一次性统计
# 容器进程docker top container_name
# 容器端口映射docker port container_name
故障排查
# 查看容器详细信息docker inspect container_name | jq '.[0].State'
# 查看容器文件系统变化docker diff container_name
# 导出容器为镜像docker commit container_name new_image:tag
# 保存和加载镜像docker save -o myimage.tar myimage:tagdocker load -i myimage.tar
清理和维护
系统清理
# 清理未使用的资源docker system prune # 清理停止的容器、未使用的网络等docker system prune -a # 清理所有未使用的资源docker system prune --volumes # 包括数据卷
# 单独清理docker container prune # 清理停止的容器docker image prune # 清理悬空镜像docker volume prune # 清理未使用的数据卷docker network prune # 清理未使用的网络
磁盘空间管理
# 查看Docker磁盘使用docker system dfdocker system df -v # 详细信息
# 限制日志大小docker run --log-opt max-size=10m --log-opt max-file=3 nginx
安全最佳实践
用户权限
# 创建非root用户FROM ubuntu:20.04RUN groupadd -r appuser && useradd -r -g appuser appuserUSER appuser
镜像安全
# 扫描镜像漏洞docker scan myimage:tag
# 使用官方镜像docker pull nginx:1.20-alpine # 使用Alpine版本,更小更安全
常用组合命令
批量操作
# 停止所有容器docker stop $(docker ps -q)
# 删除所有停止的容器docker rm $(docker ps -aq --filter status=exited)
# 删除所有悬空镜像docker rmi $(docker images -f "dangling=true" -q)
# 强制删除所有镜像docker rmi -f $(docker images -q)
一键部署脚本
#!/bin/bash# 部署Web应用脚本
# 停止旧容器docker stop myapp 2>/dev/null || truedocker rm myapp 2>/dev/null || true
# 拉取最新镜像docker pull myapp:latest
# 启动新容器docker run -d \ --name myapp \ --restart unless-stopped \ -p 80:3000 \ -v /data/app:/app/data \ myapp:latest
echo "应用部署完成"
开发环境配置
热重载开发
# Node.js开发环境docker run -it --rm \ -v $(pwd):/app \ -w /app \ -p 3000:3000 \ node:16 \ npm run dev
数据库开发
# 快速启动MySQLdocker run -d \ --name dev-mysql \ -e MYSQL_ROOT_PASSWORD=password \ -e MYSQL_DATABASE=devdb \ -p 3306:3306 \ mysql:8.0
# 快速启动Redisdocker run -d \ --name dev-redis \ -p 6379:6379 \ redis:alpine
这些 Docker 命令和技巧可以大大提高你的开发和部署效率!