【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 核心概念在了解具体指令前先掌握三个核心概念镜像Image一个只读的模板包含应用程序及其运行所需的环境、依赖和配置。类似于“类”。容器Container镜像的运行实例。类似于“对象”。容器是相互隔离的。仓库Repository存放镜像的地方最著名的是 Docker Hub。 Docker 常用命令详解Docker 命令按功能可分为镜像管理、容器管理、数据卷管理、网络管理等几大类。其他学习资源https://vuepress.mirror.docker-practice.com/一、镜像管理命令命令作用示例docker images列出本地所有镜像docker images -a显示所有docker pull 镜像名:标签从仓库拉取镜像到本地docker pull nginx:latestdocker search 镜像名在 Docker Hub 搜索镜像docker search mysqldocker build -t 镜像名 路径根据 Dockerfile 构建镜像docker build -t myapp .docker rmi 镜像名/ID删除本地镜像docker rmi nginx加-f强制删除docker save -o 文件 镜像名导出镜像为 tar 文件docker save -o nginx.tar nginxdocker load -i 文件从 tar 文件导入镜像docker load -i nginx.tardocker tag 源镜像 目标镜像:标签给镜像打标签docker tag myapp myrepo/myapp:v1docker history 镜像名查看镜像构建历史docker history myappdocker inspect 镜像名/容器名查看镜像或容器的详细信息docker inspect nginx二、容器管理命令命令作用示例docker ps列出正在运行的容器docker ps -a列出所有容器docker run 镜像名从镜像创建并启动容器docker run -d -p 8080:80 nginxdocker start 容器名/ID启动已停止的容器docker start mynginxdocker stop 容器名/ID停止运行中的容器docker stop mynginxdocker restart 容器名/ID重启容器docker restart mynginxdocker kill 容器名/ID强制停止容器docker kill mynginxdocker rm 容器名/ID删除容器需先停止docker rm mynginxdocker exec -it 容器名 命令在运行中的容器内执行命令docker exec -it mynginx bashdocker attach 容器名附加到运行中的容器docker attach mynginxdocker logs 容器名查看容器日志docker logs -f mynginx实时跟踪docker cp 源路径 目标路径在容器和宿主机之间复制文件docker cp ./file.txt mynginx:/app/docker stats显示容器资源使用情况docker statsdocker top 容器名显示容器内的进程docker top mynginxdocker commit 容器名 新镜像名将容器保存为新镜像docker commit mynginx mynginx:v2docker run常用参数详解参数作用示例-d后台运行容器detachdocker 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 keyvalue设置环境变量docker run -e MYSQL_ROOT_PASSWORD123 mysql三、数据卷Volume管理命令数据卷用于持久化容器数据即使容器被删除数据依然保留。命令作用示例docker volume create 名称创建数据卷docker volume create mydatadocker volume ls列出所有数据卷docker volume lsdocker volume rm 名称删除数据卷docker volume rm mydatadocker 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.04MAINTAINER指定维护者信息MAINTAINER userexample.comRUN在构建镜像时执行命令并提交为新镜像层RUN apt-get update apt-get install -y nginxCMD容器启动时执行的命令可被docker run覆盖CMD [nginx, -g, daemon off;]ENTRYPOINT容器启动时执行的命令不可被覆盖ENTRYPOINT [nginx]COPY将本地文件复制到镜像中COPY ./app /appADD类似COPY但支持 URL 和自动解压 tarADD https://example.com/file.tar.gz /tmp/EXPOSE声明容器运行时监听的端口EXPOSE 80ENV设置环境变量ENV NODE_ENV productionWORKDIR设置工作目录WORKDIR /appVOLUME创建挂载点用于持久化数据VOLUME [/data]USER指定运行容器时的用户USER nginxONBUILD当镜像被用作其他镜像的基础时触发的指令ONBUILD COPY . /appCMD与ENTRYPOINT的区别CMD提供容器启动时的默认命令可被docker run后的命令覆盖。ENTRYPOINT容器启动时执行的命令不可被覆盖docker run后的参数会作为ENTRYPOINT的参数追加。 总结Docker 通过镜像打包应用与环境通过容器实现轻量级运行解决了“环境不一致”和“部署繁琐”两大核心痛点。掌握上述命令你就能完成从构建镜像docker build、拉取/推送镜像docker pull/push、运行容器docker run到管理容器生命周期start/stop/restart/rm的完整操作。