上一篇 下一篇 分享链接 返回 返回顶部

Docker 实战测评全记录:安装、部署、Compose 与常用命令一次讲透

发布人:慈云数据-客服中心 发布时间:10小时前 阅读量:3

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 非常适合以下场景:

  1. 开发环境统一
    团队成员可以使用同一套镜像,避免“我本地能跑,你那里跑不了”的问题。

  2. 测试环境快速搭建
    MySQL、Redis、Nginx、RabbitMQ、Elasticsearch 等服务都可以快速启动。

  3. 微服务部署
    每个服务单独打包为镜像,配合 Docker Compose、Kubernetes 可以实现更灵活的服务治理。

  4. 持续集成与持续交付
    CI/CD 流程中可以用 Docker 构建、测试、发布应用。

  5. 中小型项目生产部署
    对于个人项目、小型网站、内部系统,Docker Compose 已经足够方便。

不太适合或需要谨慎的场景:

  1. 对强隔离要求极高的多租户环境;
  2. 对内核版本有特殊依赖的应用;
  3. 团队完全没有容器运维经验的大规模生产环境;
  4. 数据库高可用集群,如果没有充分经验,不建议简单容器化后直接上生产。

十七、综合测评结论

综合安装体验、命令易用性、性能表现、生态丰富度和部署效率来看,Docker 仍然是目前最值得学习和使用的容器化工具之一。它极大降低了应用交付过程中的环境差异问题,让开发者和运维人员可以通过镜像实现标准化部署。

在本次测评中,Docker 的表现可以概括为:

维度 评价
安装难度 中等偏低,官方文档完善
启动速度 非常快,常见服务秒级启动
资源占用 较低,明显优于传统虚拟机
命令体验 结构清晰,学习后效率很高
生态成熟度 非常成熟,官方镜像丰富
生产可用性 高,但需要规范化配置
安全性 可控,但需要额外加固
运维复杂度 中等,多容器场景建议使用 Compose 或 Kubernetes

如果是个人开发者、中小团队或希望提升部署效率的企业,Docker 非常值得引入。对于生产环境,建议建立规范的镜像构建流程、数据备份策略、日志收集方案、资源限制策略和安全加固方案,避免只会“跑起来”,却忽视长期运维稳定性。

总体评分:

Docker 综合评分:9/10
推荐指数:★★★★★

Docker 不是万能工具,但它已经成为现代软件交付体系中的重要基础设施。掌握 Docker,不仅可以提升开发部署效率,也能为后续学习 Kubernetes、DevOps、云原生架构打下坚实基础。

目录结构
全文