一、镜像 (Image) 相关命令
镜像是创建容器的基础,相当于一个只读的模板。
命令 | 说明 | 示例 |
---|---|---|
docker images |
列出本地所有镜像 | docker images |
docker search <name> |
从 Docker Hub 搜索镜像 | docker search nginx |
docker pull <image>[:tag] |
下载镜像(不指定 tag 默认为 latest) | docker pull nginx:alpine |
docker rmi <image_id> |
删除一个本地镜像 | docker rmi abc123def456 |
docker rmi -f <image_id> |
强制删除一个本地镜像(即使有容器在用) | docker rmi -f abc123def456 |
docker rmi $(docker images -q) |
删除所有本地镜像 | - |
docker build -t <name:tag> . |
根据当前目录的 Dockerfile 构建镜像 | docker build -t my-app:v1 . |
docker image prune |
删除所有未被使用的悬虚镜像(none) | docker image prune |
docker image prune -a |
删除所有未被任何容器使用的镜像 | docker image prune -a |
二、容器 (Container) 相关命令
容器是由镜像创建的运行实例。
1. 生命周期管理
命令 | 说明 | 示例 |
---|---|---|
docker run [options] <image> |
创建并启动一个新容器 | docker run -d --name my-nginx nginx |
docker start <container> |
启动一个已停止的容器 | docker start my-nginx |
docker stop <container> |
停止一个运行中的容器(SIGTERM) | docker stop my-nginx |
docker restart <container> |
重启一个容器 | docker restart my-nginx |
docker kill <container> |
强制停止一个容器(SIGKILL) | docker kill my-nginx |
docker pause <container> |
暂停容器内的所有进程 | docker pause my-nginx |
docker unpause <container> |
恢复容器内的所有进程 | docker unpause my-nginx |
docker rm <container> |
删除一个已停止的容器 | docker rm my-nginx |
docker rm -f <container> |
强制删除一个容器(无论是否运行) | docker rm -f my-nginx |
docker container prune |
删除所有已停止的容器 | docker container prune |
docker run
常用选项:
-d
:后台运行容器(守护模式)--name
:为容器指定一个名称-p <host_port>:<container_port>
:映射主机端口到容器端口- 示例:
-p 8080:80
将主机的 8080 端口映射到容器的 80 端口
- 示例:
-v <host_path>:<container_path>
:挂载数据卷- 示例:
-v /opt/data:/var/lib/mysql
- 示例:
-e <key=value>
:设置环境变量- 示例:
-e MYSQL_ROOT_PASSWORD=123456
- 示例:
--rm
:容器停止后自动删除(常用于测试)-it
:启动一个交互式容器(通常与/bin/bash
连用)- 示例:
docker run -it ubuntu /bin/bash
- 示例:
2. 查看与查询
命令 | 说明 | 示例 |
---|---|---|
docker ps |
列出正在运行的容器 | docker ps |
docker ps -a |
列出所有容器(包括已停止的) | docker ps -a |
docker logs <container> |
查看容器的日志输出 | docker logs my-nginx |
docker logs -f <container> |
实时跟踪(follow)日志输出 | docker logs -f my-nginx |
docker logs --tail 10 <container> |
查看最后 10 条日志 | docker logs --tail 10 my-nginx |
docker inspect <container> |
查看容器的详细信息(JSON 格式) | docker inspect my-nginx |
3. 交互与执行
命令 | 说明 | 示例 |
---|---|---|
docker exec [options] <container> <command> |
在正在运行的容器中执行命令 | docker exec my-nginx ls / |
docker exec -it <container> /bin/bash |
进入一个正在运行的容器的交互式 Shell | docker exec -it my-nginx /bin/bash |
docker attach <container> |
附着到正在运行的容器(不推荐,退出会导致容器停止) | docker attach my-nginx |
注意:
exec
是在容器内新启动一个进程,而attach
是直接连接容器原有的主进程。
三、网络 (Network) 相关命令
命令 | 说明 | 示例 |
---|---|---|
docker network ls |
列出所有网络 | docker network ls |
docker network create <name> |
创建一个新的网络 | docker network create my-net |
docker network inspect <network> |
查看网络的详细信息 | docker network inspect bridge |
docker network connect <network> <container> |
将容器连接到指定网络 | docker network connect my-net my-nginx |
docker network disconnect <network> <container> |
断开容器与指定网络的连接 | docker network disconnect my-net my-nginx |
docker network prune |
删除所有未使用的网络 | docker network prune |
使用网络:
在 docker run
时使用 --network
选项指定容器使用的网络。
四、数据卷 (Volume) 相关命令
数据卷用于持久化容器产生的数据。
命令 | 说明 | 示例 |
---|---|---|
docker volume ls |
列出所有数据卷 | docker volume ls |
docker volume create <name> |
创建一个数据卷 | docker volume create my-data |
docker volume inspect <name> |
查看数据卷的详细信息 | docker volume inspect my-data |
docker volume rm <name> |
删除一个数据卷 | docker volume rm my-data |
docker volume prune |
删除所有未被使用的数据卷 | docker volume prune |
使用数据卷:
在 docker run
时使用 -v
选项。
- 命名卷:
-v my-data:/app/data
(推荐) - 绑定挂载:
-v /host/path:/app/data
五、Docker Compose 常用命令
Compose 用于定义和运行多容器应用。
命令 | 说明 | 示例 |
---|---|---|
docker-compose up |
创建并启动所有服务(在前台) | docker-compose up |
docker-compose up -d |
创建并后台启动所有服务 | docker-compose up -d |
docker-compose down |
停止并删除所有容器、网络 | docker-compose down |
docker-compose start |
启动已存在的服务容器 | docker-compose start |
docker-compose stop |
停止服务容器,但不删除 | docker-compose stop |
docker-compose restart |
重启服务 | docker-compose restart |
docker-compose ps |
列出本项目下的所有容器 | docker-compose ps |
docker-compose logs |
查看所有服务的日志 | docker-compose logs |
docker-compose logs -f <service> |
实时跟踪某个服务的日志 | docker-compose logs -f web |
docker-compose exec <service> <command> |
在某个服务中执行命令 | docker-compose exec db mysql -u root -p |
docker-compose build |
重新构建服务的镜像 | docker-compose build |
总结与最佳实践
- 容器命名:始终使用
--name
为容器指定一个有意义的名称,便于管理 - 端口映射:使用
-p
参数将容器内部服务暴露给外部 - 数据持久化:务必使用
-v
或命名卷来保存重要数据,避免容器删除后数据丢失 - 查看日志:使用
docker logs -f
来调试和监控应用程序 - 进入容器:使用
docker exec -it ... /bin/bash
进入容器内部进行调试 - 清理资源:定期使用
prune
系列命令(container prune
,image prune
,volume prune
)清理不再使用的资源,释放磁盘空间