tips:(docker和虚拟机的区别)

作者:

tips:(docker和虚拟机的区别)

1、虚拟机是对硬件的虚拟化,而 Docker 是对操作系统的虚拟化。Docker 因为其轻量、快速和高可移植性,已经成为了现代应用开发和运维的基础设施。

最重要的几个功能区:

  • Containers:管理所有的容器,包括运行中和已停止的
  • Images:查看和管理本地镜像
  • Volumes:管理数据卷
  • Dev Environments:用于创建开发环境(较新版本功能)
    containers:
    image(镜像):里面包含了你要部署的应用程序以及它所关联的所有库

https://yeasy.gitbook.io/docker_practice/ docker 中文文档


📖 概念详解

镜像(Image) vs 容器(Container)

镜像 (Image) 容器 (Container)
本质 一个只读的模板 镜像的运行实例
类比 类(Class) 对象(Object)
能否修改 不可直接修改,需重新构建 可读写,但重启后变更丢失
生命周期 长期保存 可创建、启动、停止、删除

Docker 的核心优势

  1. 环境一致性:你在本地能跑的,服务器上一定能跑("我电脑上明明可以啊" 从此消失)
  2. 快速部署:启动容器只需秒级,而虚拟机需要分钟级
  3. 资源隔离:每个容器独立运行,互不干扰
  4. 生态丰富:Docker Hub 上有大量官方镜像(Nginx、MySQL、Python、Redis……)

日常开发工作流

写代码 → 编写 Dockerfile → 构建镜像 (docker build)
                                      ↓
                           推送到镜像仓库 (docker push)
                                      ↓
                           服务器拉取并运行 (docker pull + docker run)

🐘 常用 Docker 命令速查

镜像操作

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi <image_id>

# 构建镜像(从 Dockerfile)
docker build -t my-app:1.0 .

容器操作

# 创建并运行容器
docker run -d --name my-nginx -p 8080:80 nginx

# 列出运行中的容器
docker ps

# 列出所有容器(含已停止的)
docker ps -a

# 停止容器
docker stop <container_id>

# 启动已停止的容器
docker start <container_id>

# 重启容器
docker restart <container_id>

# 删除容器
docker rm <container_id>

# 强制删除运行中的容器
docker rm -f <container_id>

查看资源占用

# 查看容器资源使用情况(CPU、内存、网络)
docker stats

# 查看容器进程
docker top <container_id>

# 查看容器详细信息(IP、挂载卷、环境变量等)
docker inspect <container_id>

🔍 Docker Desktop 功能区域详解

仪表盘(Dashboard) 的各个功能区:

  1. Containers:所有容器的管理中心

    • 可查看日志、进入终端、启停操作
    • 点击容器名可查看详情
  2. Images:本地镜像管理

    • 可以在此拉取、删除镜像
    • 查看镜像分层信息
  3. Volumes:数据卷管理

    • 数据卷是持久化数据的最佳方式
    • 即使删除容器,数据卷中的数据也不会丢失
  4. Dev Environments:用于创建独立的开发环境(较新版本功能)


👨‍💻 实操过程:第一次用 Docker 部署一个 Nginx 网站

如果你跟我一样是新手,直接上来就跑命令可能会有点懵。下面是我第一次用 Docker 部署一个静态网站的完整过程,你可以照着做一遍。

第 1 步:确认 Docker 装好了

docker --version

能看到版本号,说明装好了。如果没有,先去 Docker 官网 下载 Desktop 版本。

第 2 步:拉取一个 Nginx 镜像

docker pull nginx:alpine

alpine 是精简版,只有几十 MB,下载很快。下载完后,我特意跑了一次 docker images 确认它出现在列表里了。

第 3 步:跑起来看看

docker run -d --name my-first-site -p 8080:80 nginx:alpine

命令拆解一下:

  • -d:后台运行(不会霸占你的终端)
  • --name my-first-site:给它起个名字,方便以后管理
  • -p 8080:80:把容器的 80 端口映射到本机的 8080 端口
  • nginx:alpine:用哪个镜像

跑完之后,打开浏览器访问 http://localhost:8080,看到了 Welcome to nginx! 的页面。那一刻还挺有成就感的 😄

第 4 步:把自己的网页放进去

那页默认的欢迎页是 Nginx 自带的,我想换成自己的 HTML。先看了一下容器里默认的网页路径:

docker exec my-first-site ls /usr/share/nginx/html

看到了 index.html。然后我在本地写了一个简单的 index.html,用 docker cp 复制进去:

# 在本地新建一个 index.html,内容随便写点什么
echo "<h1>我的第一个网站</h1>" > ./index.html

# 复制进容器,覆盖默认页面
docker cp ./index.html my-first-site:/usr/share/nginx/html/

刷新浏览器,内容已经变了。第一次体验到 Docker 的快——从拉镜像到上线自己的页面,前后不到 5 分钟。

第 5 步:停止和清理

# 停止容器
docker stop my-first-site

# 删除容器(只是删容器,镜像还在)
docker rm my-first-site

# 查看镜像还在不在
docker images

看到镜像还在,以后随时可以再 docker run 一个一样的容器,这就是 Docker 镜像的妙处。


⚠️ 常见问题

Q: 容器退出后数据会丢吗?

取决于数据存在哪。

  • 存在容器内部 → 会丢(容器删除后数据就没了)
  • 存在 Volume 或 Bind Mount → 不会丢

Q: docker run 和 docker start 有什么区别?

  • docker run = 创建新容器 + 启动它(相当于 docker create + docker start
  • docker start = 启动一个已存在但已停止的容器

Q: 端口映射怎么理解?

docker run -p 主机端口:容器端口 nginx
# 例:-p 8080:80 → 访问宿主机 8080 端口相当于访问容器内 80 端口

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注