作者: huc00125

  • 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 端口