【Docker的理解和指令 - - -来源于deepseek】

📅 2026/7/22 9:37:03 👁️ 阅读次数 📝 编程学习
【Docker的理解和指令 - - -来源于deepseek】

🚀 Docker 是什么?

Docker 是一个开源的容器化平台,用于开发、交付和运行应用程序。它的核心目标是“Build, Ship and Run Any App, Anywhere”—— 即“一次构建,处处运行”。

🤔 为什么需要 Docker?

在传统软件开发和部署中,常常遇到这样的问题:

  • 环境不一致:开发人员在 Windows 上开发测试通过的应用,部署到 Linux 服务器时,可能因为操作系统、库版本、依赖软件不同而运行失败。
  • 部署繁琐:每次部署都需要手动安装各种运行环境、配置依赖、设置端口等,过程繁琐且容易出错。
  • 资源浪费:传统虚拟机虽然能隔离环境,但每个虚拟机都需要运行一整套完整的操作系统,占用大量内存和磁盘空间,启动慢。

Docker 通过容器化技术解决了这些问题。它将应用及其所有依赖打包成一个镜像,在任何支持 Docker 的环境中都能以容器的形式一致运行。

⚖️ Docker vs 传统虚拟机

特性传统虚拟机Docker 容器
虚拟化层级硬件虚拟化操作系统虚拟化
操作系统每个 VM 运行完整客户操作系统(含内核)所有容器共享宿主机内核
资源占用高(几百MB几GB内存,几GB几十GB磁盘)低(MB级别)
启动速度分钟级秒级
隔离性强隔离进程级隔离

简单来说:虚拟机虚拟的是硬件,Docker 虚拟的是操作系统。容器直接运行在宿主机内核上,因此更轻量、更快速。

🧠 Docker 核心概念

在了解具体指令前,先掌握三个核心概念:

  1. 镜像(Image):一个只读的模板,包含应用程序及其运行所需的环境、依赖和配置。类似于“类”。
  2. 容器(Container):镜像的运行实例。类似于“对象”。容器是相互隔离的。
  3. 仓库(Repository):存放镜像的地方,最著名的是 Docker Hub。

📖 Docker 常用命令详解

Docker 命令按功能可分为镜像管理、容器管理、数据卷管理、网络管理等几大类。
(其他学习资源:https://vuepress.mirror.docker-practice.com/)

一、镜像管理命令

命令作用示例
docker images列出本地所有镜像docker images -a(显示所有)
docker pull <镜像名>:<标签>从仓库拉取镜像到本地docker pull nginx:latest
docker search <镜像名>在 Docker Hub 搜索镜像docker search mysql
docker build -t <镜像名> <路径>根据 Dockerfile 构建镜像docker build -t myapp .
docker rmi <镜像名/ID>删除本地镜像docker rmi nginx(加-f强制删除)
docker save -o <文件> <镜像名>导出镜像为 tar 文件docker save -o nginx.tar nginx
docker load -i <文件>从 tar 文件导入镜像docker load -i nginx.tar
docker tag <源镜像> <目标镜像>:<标签>给镜像打标签docker tag myapp myrepo/myapp:v1
docker history <镜像名>查看镜像构建历史docker history myapp
docker inspect <镜像名/容器名>查看镜像或容器的详细信息docker inspect nginx

二、容器管理命令

命令作用示例
docker ps列出正在运行的容器docker ps -a(列出所有容器)
docker run <镜像名>从镜像创建并启动容器docker run -d -p 8080:80 nginx
docker start <容器名/ID>启动已停止的容器docker start mynginx
docker stop <容器名/ID>停止运行中的容器docker stop mynginx
docker restart <容器名/ID>重启容器docker restart mynginx
docker kill <容器名/ID>强制停止容器docker kill mynginx
docker rm <容器名/ID>删除容器(需先停止)docker rm mynginx
docker exec -it <容器名> <命令>在运行中的容器内执行命令docker exec -it mynginx bash
docker attach <容器名>附加到运行中的容器docker attach mynginx
docker logs <容器名>查看容器日志docker logs -f mynginx(实时跟踪)
docker cp <源路径> <目标路径>在容器和宿主机之间复制文件docker cp ./file.txt mynginx:/app/
docker stats显示容器资源使用情况docker stats
docker top <容器名>显示容器内的进程docker top mynginx
docker commit <容器名> <新镜像名>将容器保存为新镜像docker commit mynginx mynginx:v2
docker run常用参数详解
参数作用示例
-d后台运行容器(detach)docker run -d nginx
-it交互式运行,分配伪终端docker run -it ubuntu bash
-p <宿主机端口>:<容器端口>端口映射docker run -p 8080:80 nginx
-v <宿主机路径>:<容器路径>挂载数据卷docker run -v /data:/app/data nginx
--name <名称>给容器指定名称docker run --name mynginx nginx
--restart always容器退出时自动重启docker run --restart always nginx
-e <key>=<value>设置环境变量docker run -e MYSQL_ROOT_PASSWORD=123 mysql

三、数据卷(Volume)管理命令

数据卷用于持久化容器数据,即使容器被删除,数据依然保留。

命令作用示例
docker volume create <名称>创建数据卷docker volume create mydata
docker volume ls列出所有数据卷docker volume ls
docker volume rm <名称>删除数据卷docker volume rm mydata
docker volume inspect <名称>查看数据卷详情docker volume inspect mydata

四、网络管理命令

命令作用
docker network ls列出所有网络
docker network create <名称>创建网络
docker network connect <网络> <容器>将容器连接到网络
docker network disconnect <网络> <容器>断开容器与网络的连接
docker network rm <名称>删除网络

五、系统信息命令

命令作用
docker version显示 Docker 版本信息
docker info显示 Docker 系统信息
docker events获取 Docker 实时事件

📄 Dockerfile 指令详解

Dockerfile 是一个文本文件,包含构建镜像所需的全部指令。

指令作用示例
FROM必须第一条,指定基础镜像FROM ubuntu:20.04
MAINTAINER指定维护者信息MAINTAINER user@example.com
RUN在构建镜像时执行命令,并提交为新镜像层RUN apt-get update && apt-get install -y nginx
CMD容器启动时执行的命令(可被docker run覆盖)CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT容器启动时执行的命令(不可被覆盖)ENTRYPOINT ["nginx"]
COPY将本地文件复制到镜像中COPY ./app /app
ADD类似COPY,但支持 URL 和自动解压 tarADD https://example.com/file.tar.gz /tmp/
EXPOSE声明容器运行时监听的端口EXPOSE 80
ENV设置环境变量ENV NODE_ENV production
WORKDIR设置工作目录WORKDIR /app
VOLUME创建挂载点,用于持久化数据VOLUME ["/data"]
USER指定运行容器时的用户USER nginx
ONBUILD当镜像被用作其他镜像的基础时触发的指令ONBUILD COPY . /app
CMDENTRYPOINT的区别
  • CMD:提供容器启动时的默认命令,可被docker run后的命令覆盖。
  • ENTRYPOINT:容器启动时执行的命令,不可被覆盖,docker run后的参数会作为ENTRYPOINT的参数追加。

🎯 总结

Docker 通过镜像打包应用与环境,通过容器实现轻量级运行,解决了“环境不一致”和“部署繁琐”两大核心痛点。掌握上述命令,你就能完成从构建镜像(docker build)、拉取/推送镜像(docker pull/push)、运行容器(docker run)到管理容器生命周期(start/stop/restart/rm)的完整操作。