Docker 实战测评全记录:安装、部署、Compose 与常用命令一次讲透
Docker 测评报告|附完整命令
一、前言
Docker 是目前最流行的容器化平台之一,它通过容器技术将应用程序及其运行环境打包在一起,使应用能够在不同服务器、不同操作系统环境中保持一致的运行效果。相比传统虚拟机,Docker 更轻量、启动更快、资源占用更低,因此被广泛应用于开发测试、持续集成、微服务部署、云原生架构以及生产环境运维中。
本文将从 Docker 的安装部署、基础命令、镜像管理、容器运行、数据持久化、网络配置、Docker Compose 使用、性能体验、安全性、适用场景等方面进行完整测评,并附上常用完整命令,便于读者直接参考和实践。
二、测评环境说明
本次测评以 Linux 服务器环境为主,Docker 在 Linux 上的体验最完整、性能也最接近生产环境。测试环境如下:
| 项目 | 配置 |
|---|---|
| 操作系统 | Ubuntu 22.04 LTS |
| CPU | 4 核 |
| 内存 | 8GB |
| 磁盘 | 100GB SSD |
| Docker 版本 | Docker Engine 24.x / 25.x |
| 测试用户 | root / sudo 用户 |
| 网络环境 | 公网服务器 / 局域网服务器均可 |
查看系统信息命令:
lsb_release -a
查看内核版本:
uname -a
查看 CPU 信息:
lscpu
查看内存信息:
free -h
查看磁盘信息:
df -h
三、Docker 安装体验
1. 卸载旧版本 Docker
如果系统中曾经安装过旧版本 Docker,建议先卸载:
sudo apt remove -y docker docker-engine docker.io containerd runc
清理无用依赖:
sudo apt autoremove -y
2. 安装依赖工具
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
3. 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
设置权限:
sudo chmod a+r /etc/apt/keyrings/docker.gpg
4. 添加 Docker 软件源
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
更新软件源:
sudo apt update
5. 安装 Docker Engine
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
6. 启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
查看 Docker 服务状态:
sudo systemctl status docker
7. 验证安装是否成功
docker version
docker info
运行官方测试镜像:
sudo docker run hello-world
如果看到类似以下输出,说明 Docker 已安装成功:
Hello from Docker!
This message shows that your installation appears to be working correctly.
四、Docker 基础命令测评
Docker 的命令体系比较清晰,主要分为镜像、容器、网络、数据卷、日志、资源管理等模块。
1. 查看 Docker 版本
docker --version
docker version
2. 查看 Docker 系统信息
docker info
该命令可以看到 Docker 根目录、存储驱动、容器数量、镜像数量、Cgroup 驱动、日志驱动等信息,是排查问题时非常常用的命令。
3. 查看帮助信息
docker --help
查看某个子命令帮助:
docker run --help
五、镜像管理测评
Docker 镜像可以理解为容器运行的模板,容器则是镜像运行后的实例。Docker Hub 提供了大量官方镜像,例如 nginx、mysql、redis、ubuntu、node、python 等。
1. 搜索镜像
docker search nginx
搜索 Redis 镜像:
docker search redis
2. 拉取镜像
拉取最新版 Nginx:
docker pull nginx
拉取指定版本:
docker pull nginx:1.25
拉取 Redis:
docker pull redis:7
拉取 MySQL:
docker pull mysql:8.0
3. 查看本地镜像
docker images
或者:
docker image ls
输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest xxxxxxxxxxxx 2 weeks ago 187MB
redis 7 xxxxxxxxxxxx 3 weeks ago 138MB
mysql 8.0 xxxxxxxxxxxx 1 month ago 620MB
4. 删除镜像
删除指定镜像:
docker rmi nginx:latest
通过镜像 ID 删除:
docker rmi IMAGE_ID
强制删除镜像:
docker rmi -f IMAGE_ID
清理无用镜像:
docker image prune
清理所有未使用镜像:
docker image prune -a
六、容器运行测评
容器是 Docker 的核心使用对象。通过 docker run 命令可以快速创建并启动一个容器。
1. 运行一个 Nginx 容器
docker run -d --name nginx-test -p 8080:80 nginx
参数说明:
| 参数 | 含义 |
|---|---|
-d |
后台运行 |
--name nginx-test |
指定容器名称 |
-p 8080:80 |
将宿主机 8080 端口映射到容器 80 端口 |
nginx |
使用 nginx 镜像 |
访问测试:
curl http://127.0.0.1:8080
如果服务器有公网 IP,也可以在浏览器访问:
http://服务器IP:8080
2. 查看运行中的容器
docker ps
查看所有容器,包括已停止的容器:
docker ps -a
3. 停止容器
docker stop nginx-test
4. 启动已停止容器
docker start nginx-test
5. 重启容器
docker restart nginx-test
6. 删除容器
删除前需要先停止容器:
docker stop nginx-test
docker rm nginx-test
强制删除运行中的容器:
docker rm -f nginx-test
7. 查看容器日志
docker logs nginx-test
实时查看日志:
docker logs -f nginx-test
查看最近 100 行日志:
docker logs --tail=100 nginx-test
8. 进入容器内部
docker exec -it nginx-test bash
如果容器内没有 bash,可以使用 sh:
docker exec -it nginx-test sh
退出容器:
exit
七、数据持久化测评
默认情况下,容器删除后,容器内部产生的数据也会丢失。因此生产环境中通常需要使用数据卷或目录挂载来实现持久化。
1. 使用宿主机目录挂载 Nginx 页面
创建目录:
mkdir -p /data/nginx/html
创建测试页面:
echo "Hello Docker Nginx
" > /data/nginx/html/index.html
运行容器:
docker run -d \
--name nginx-volume-test \
-p 8081:80 \
-v /data/nginx/html:/usr/share/nginx/html \
nginx
访问测试:
curl http://127.0.0.1:8081
如果返回:
Hello Docker Nginx
说明目录挂载成功。
2. 使用 Docker Volume
创建数据卷:
docker volume create nginx-data
查看数据卷:
docker volume ls
查看数据卷详情:
docker volume inspect nginx-data
使用数据卷运行容器:
docker run -d \
--name nginx-volume-demo \
-p 8082:80 \
-v nginx-data:/usr/share/nginx/html \
nginx
删除数据卷:
docker volume rm nginx-data
清理无用数据卷:
docker volume prune
八、Docker 网络测评
Docker 默认提供多种网络模式,其中最常用的是 bridge 网络。容器之间可以通过自定义网络实现服务名互通。
1. 查看 Docker 网络
docker network ls
常见网络包括:
| 网络 | 说明 |
|---|---|
| bridge | 默认桥接网络 |
| host | 使用宿主机网络 |
| none | 不配置网络 |
2. 创建自定义网络
docker network create app-net
查看网络详情:
docker network inspect app-net
3. 在同一网络中运行 Redis 和应用容器
运行 Redis:
docker run -d \
--name redis-demo \
--network app-net \
redis:7
运行临时 BusyBox 测试网络连通性:
docker run --rm -it \
--network app-net \
busybox sh
在 BusyBox 容器内测试 Redis 域名解析:
ping redis-demo
如果可以解析到 IP,说明 Docker 自定义网络正常工作。
4. 删除网络
docker network rm app-net
如果网络仍被容器使用,需要先停止并删除相关容器:
docker rm -f redis-demo
九、Docker Compose 测评
Docker Compose 用于通过 YAML 文件管理多个容器,非常适合部署 Web 应用、数据库、缓存、中间件等组合服务。
1. 查看 Docker Compose 版本
新版 Docker 使用插件形式:
docker compose version
旧版命令可能是:
docker-compose version
2. 编写 docker-compose.yml
以下示例部署 Nginx 和 Redis:
mkdir -p /data/compose-demo
cd /data/compose-demo
创建配置文件:
cat > docker-compose.yml <<'EOF'
services:
nginx:
image: nginx:latest
container_name: compose-nginx
ports:
- "8090:80"
volumes:
- ./html:/usr/share/nginx/html
networks:
- compose-net
restart: always
redis:
image: redis:7
container_name: compose-redis
networks:
- compose-net
restart: always
networks:
compose-net:
driver: bridge
EOF
创建页面目录和测试文件:
mkdir -p html
echo "Docker Compose Demo
" > html/index.html
3. 启动服务
docker compose up -d
查看服务:
docker compose ps
查看日志:
docker compose logs
实时查看日志:
docker compose logs -f
访问 Nginx:
curl http://127.0.0.1:8090
4. 停止服务
docker compose stop
5. 启动服务
docker compose start
6. 重启服务
docker compose restart
7. 删除服务
docker compose down
如果要同时删除数据卷:
docker compose down -v
十、常见应用部署实测
1. 部署 MySQL
docker run -d \
--name mysql-demo \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/mysql:/var/lib/mysql \
--restart=always \
mysql:8.0
查看日志:
docker logs -f mysql-demo
进入 MySQL:
docker exec -it mysql-demo mysql -uroot -p
输入密码:
123456
测试 SQL:
SHOW DATABASES;
停止 MySQL:
docker stop mysql-demo
删除 MySQL:
docker rm mysql-demo
2. 部署 Redis
docker run -d \
--name redis-demo \
-p 6379:6379 \
-v /data/redis:/data \
--restart=always \
redis:7 \
redis-server --appendonly yes
进入 Redis:
docker exec -it redis-demo redis-cli
测试命令:
set name docker
get name
退出:
exit
3. 部署 Nginx
mkdir -p /data/nginx/conf /data/nginx/html /data/nginx/logs
创建首页:
echo "Nginx Running In Docker
" > /data/nginx/html/index.html
先拷贝默认配置:
docker run --name temp-nginx -d nginx
docker cp temp-nginx:/etc/nginx/nginx.conf /data/nginx/conf/nginx.conf
docker rm -f temp-nginx
正式运行:
docker run -d \
--name nginx-prod \
-p 80:80 \
-v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/logs:/var/log/nginx \
--restart=always \
nginx
查看运行状态:
docker ps
十一、资源限制与性能测评
Docker 容器默认可以使用宿主机的大部分资源。在生产环境中,为了避免某个容器占满 CPU 或内存,建议设置资源限制。
1. 限制内存
docker run -d \
--name nginx-memory-limit \
-p 8083:80 \
--memory=256m \
nginx
2. 限制 CPU
docker run -d \
--name nginx-cpu-limit \
-p 8084:80 \
--cpus=0.5 \
nginx
表示最多使用半个 CPU 核心。
3. 查看容器资源占用
docker stats
查看指定容器:
docker stats nginx-memory-limit
该命令可以实时查看 CPU、内存、网络 I/O、磁盘 I/O 等指标。
4. 性能体验总结
从实际测试来看,Docker 的启动速度非常快。以 Nginx 为例,镜像拉取完成后,容器通常可以在 1 秒左右启动完成。相比传统虚拟机需要完整启动操作系统,Docker 仅启动应用进程,因此在弹性部署、快速扩容、自动化测试等场景中优势明显。
在资源占用方面,Docker 容器共享宿主机内核,不需要为每个应用分配完整操作系统,因此内存占用明显低于虚拟机。同一台服务器上可以运行更多应用实例。不过,Docker 并不是完全隔离的虚拟机,安全隔离性依赖 Linux Namespace、Cgroups、Capabilities、Seccomp、AppArmor 等机制,因此对强隔离场景仍需谨慎设计。
十二、镜像构建测评
除了使用官方镜像,Docker 的重要能力之一是自定义镜像构建。下面以一个简单的 Nginx 静态页面镜像为例。
1. 创建构建目录
mkdir -p /data/docker-build-demo
cd /data/docker-build-demo
2. 创建 index.html
cat > index.html <<'EOF'
Docker Build Demo
Hello, Docker Image Build!
EOF
3. 创建 Dockerfile
cat > Dockerfile <<'EOF'
FROM nginx:latest
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
EOF
4. 构建镜像
docker build -t my-nginx-demo:1.0 .
查看镜像:
docker images
5. 运行自定义镜像
docker run -d \
--name my-nginx-demo \
-p 8091:80 \
my-nginx-demo:1.0
访问测试:
curl http://127.0.0.1:8091
十三、Docker 清理命令
Docker 使用一段时间后,会产生停止的容器、未使用镜像、构建缓存、无用数据卷等。如果不及时清理,可能占用大量磁盘空间。
1. 查看 Docker 磁盘占用
docker system df
显示详细信息:
docker system df -v
2. 清理停止的容器
docker container prune
3. 清理无用镜像
docker image prune
清理所有未被容器使用的镜像:
docker image prune -a
4. 清理无用网络
docker network prune
5. 清理无用数据卷
docker volume prune
6. 一键清理无用资源
docker system prune
清理更彻底,包括未使用镜像:
docker system prune -a
如果要同时清理未使用的数据卷:
docker system prune -a --volumes
注意:清理命令具有破坏性,生产环境执行前务必确认数据是否仍需要保留。
十四、安全性测评
Docker 的安全性整体可控,但并不意味着可以忽略安全配置。尤其是在生产环境中,以下几点非常重要。
1. 避免容器使用特权模式
不建议随意使用:
--privileged
特权模式会给予容器非常高的宿主机权限,可能带来安全风险。
2. 不建议直接使用 root 用户运行应用
如果自定义镜像,可以在 Dockerfile 中指定普通用户:
RUN useradd -m appuser
USER appuser
3. 设置只读文件系统
docker run -d \
--name readonly-nginx \
-p 8085:80 \
--read-only \
nginx
部分应用可能需要写临时目录,需要额外挂载 tmpfs。
4. 限制容器资源
docker run -d \
--name safe-nginx \
-p 8086:80 \
--memory=256m \
--cpus=0.5 \
nginx
5. 定期更新镜像
拉取新镜像:
docker pull nginx:latest
重建并重启容器:
docker stop nginx-prod
docker rm nginx-prod
然后使用新镜像重新运行容器。
十五、优缺点总结
1. Docker 优点
| 优点 | 说明 |
|---|---|
| 部署快速 | 镜像拉取后,容器秒级启动 |
| 环境一致 | 开发、测试、生产环境更容易保持一致 |
| 资源占用低 | 相比虚拟机更轻量 |
| 生态成熟 | Docker Hub 镜像丰富,社区资料多 |
| 易于扩展 | 适合微服务、CI/CD、自动化部署 |
| 便于迁移 | 镜像可以跨主机分发和运行 |
2. Docker 缺点
| 缺点 | 说明 |
|---|---|
| 学习成本 | 初学者需要理解镜像、容器、网络、卷等概念 |
| 数据管理需谨慎 | 容器删除可能导致数据丢失,需要正确挂载 |
| 安全隔离弱于虚拟机 | 容器共享宿主机内核 |
| 网络排错复杂 | 多容器、多网络环境下排查成本较高 |
| 镜像体积可能膨胀 | Dockerfile 编写不当会导致镜像过大 |
十六、适用场景建议
Docker 非常适合以下场景:
-
开发环境统一
团队成员可以使用同一套镜像,避免“我本地能跑,你那里跑不了”的问题。 -
测试环境快速搭建
MySQL、Redis、Nginx、RabbitMQ、Elasticsearch 等服务都可以快速启动。 -
微服务部署
每个服务单独打包为镜像,配合 Docker Compose、Kubernetes 可以实现更灵活的服务治理。 -
持续集成与持续交付
CI/CD 流程中可以用 Docker 构建、测试、发布应用。 -
中小型项目生产部署
对于个人项目、小型网站、内部系统,Docker Compose 已经足够方便。
不太适合或需要谨慎的场景:
- 对强隔离要求极高的多租户环境;
- 对内核版本有特殊依赖的应用;
- 团队完全没有容器运维经验的大规模生产环境;
- 数据库高可用集群,如果没有充分经验,不建议简单容器化后直接上生产。
十七、综合测评结论
综合安装体验、命令易用性、性能表现、生态丰富度和部署效率来看,Docker 仍然是目前最值得学习和使用的容器化工具之一。它极大降低了应用交付过程中的环境差异问题,让开发者和运维人员可以通过镜像实现标准化部署。
在本次测评中,Docker 的表现可以概括为:
| 维度 | 评价 |
|---|---|
| 安装难度 | 中等偏低,官方文档完善 |
| 启动速度 | 非常快,常见服务秒级启动 |
| 资源占用 | 较低,明显优于传统虚拟机 |
| 命令体验 | 结构清晰,学习后效率很高 |
| 生态成熟度 | 非常成熟,官方镜像丰富 |
| 生产可用性 | 高,但需要规范化配置 |
| 安全性 | 可控,但需要额外加固 |
| 运维复杂度 | 中等,多容器场景建议使用 Compose 或 Kubernetes |
如果是个人开发者、中小团队或希望提升部署效率的企业,Docker 非常值得引入。对于生产环境,建议建立规范的镜像构建流程、数据备份策略、日志收集方案、资源限制策略和安全加固方案,避免只会“跑起来”,却忽视长期运维稳定性。
总体评分:
Docker 综合评分:9/10
推荐指数:★★★★★
Docker 不是万能工具,但它已经成为现代软件交付体系中的重要基础设施。掌握 Docker,不仅可以提升开发部署效率,也能为后续学习 Kubernetes、DevOps、云原生架构打下坚实基础。