一、Docker 是什么?为什么需要它?
想象一下,我们把开发好的应用程序及其所有依赖(比如代码、运行时、系统工具、库)全部打包到一个“集装箱”里。这个集装箱是标准化的,可以在任何支持 Docker 的机器上运行,无论这台机器是 Windows、macOS 还是 Linux,也无论它是什么版本。
这个“集装箱”,就是 Docker 容器 (Container)。
Docker 的核心价值:
环境隔离与一致性: 确保开发、测试、生产环境完全一致,告别环境问题。
快速部署与启动: 容器是秒级启动,远快于传统的虚拟机。
资源利用率高: Docker 容器直接运行在宿主机内核上,几乎没有性能损耗。一台物理机可以运行成百上千个容器。
简化运维: 便于迁移、扩展和管理。
二、核心概念:镜像、容器、仓库
学习 Docker,必须理解这三个核心概念:
镜像 (Image):
是什么: 镜像是一个只读的模板,它包含了运行应用程序所需的一切:代码、运行时、库、环境变量和配置文件。
类比: 你可以把镜像想象成一个面向对象编程中的“类”。
容器 (Container):
是什么: 容器是镜像的运行实例。镜像是静态的,而容器是动态的。我们对容器的任何修改(如创建、启动、停止、删除)都不会影响到镜像本身。
类比: 如果镜像是“类”,那么容器就是这个“类”的一个“实例对象”。
仓库 (Repository):
是什么: 仓库是集中存放镜像文件的地方。
类比: 你可以把它理解成代码界的 GitHub,只不过它存放的是镜像而不是代码。最著名的公共仓库是 Docker Hub。
三者关系: 我们从 仓库 pull (拉取) 镜像到本地,然后以这个镜像为模板,run (运行) 起一个或多个容器。
三、"保姆式"实战:5分钟部署你的第一个Nginx网站
光说不练假把式!接下来,我们用一个完整的实战案例,带你体验 Docker 的魅力。
目标: 在 Docker 中运行一个 Nginx 容器,并通过浏览器访问它。
步骤一:搜索并拉取 Nginx 镜像
首先,我们从 Docker Hub 搜索官方的 Nginx 镜像。
# 搜索 Docker Hub 上的 nginx 镜像
docker search nginx
AI写代码
你会看到很多结果,通常我们选择 OFFICIAL 为 [OK] 的官方镜像。然后,使用 pull 命令把它拉取到本地。
# 拉取最新版的 nginx 镜像
docker pull nginx
AI写代码
提示: 如果不指定版本号(如 nginx:1.21),默认会拉取 latest (最新) 版本的镜像。
步骤二:查看本地镜像
拉取成功后,我们可以用 images 命令查看本地已经存在的所有镜像。
docker images
AI写代码
你会看到刚刚下载的 nginx 镜像信息,包括仓库名、标签(版本)、镜像ID、创建时间和大小。
步骤三:运行容器
这是最核心的一步!我们使用 run 命令来启动一个 Nginx 容器。
docker run --name my-nginx -p 8080:80 -d nginx
AI写代码
这条命令看起来有点复杂,别怕,我们来逐一拆解(这几个参数非常重要,一定要掌握):
docker run: 运行容器的命令。
--name my-nginx: 给你的容器起一个自定义的名字,叫 my-nginx。如果不指定,Docker 会随机分配一个。
-p 8080:80: 这是端口映射。
-p 是 --publish 的缩写。
8080:80 的意思是,将宿主机(你的电脑)的 8080 端口映射到容器的 80 端口。
Nginx 默认在容器内监听 80 端口,我们通过这个映射,就可以通过访问我们电脑的 8080 端口来访问容器里的 Nginx 服务。
-d: 这是 -detach 的缩写,表示在后台运行容器。如果不加这个参数,你的终端就会被容器的前台进程占据。
nginx: 指定要使用哪个镜像来创建容器。
步骤四:验证容器运行
现在,我们的 Nginx 容器已经在后台运行了。如何确认呢?
使用 ps 命令查看正在运行的容器:
docker ps
AI写代码
你会看到名为 my-nginx 的容器正在运行,并且端口映射关系 0.0.0.0:8080->80/tcp 也清晰可见。
打开浏览器访问: 在你的浏览器地址栏输入 http://localhost:8080 并回车。
如果看到了 Nginx 的欢迎页面 “Welcome to nginx!”,恭喜你,你已经成功部署了第一个 Docker 应用!
步骤五:查看容器日志
如果容器启动失败或运行异常,查看日志是排查问题的第一步。
# docker logs [容器名或容器ID]
docker logs my-nginx
AI写代码
步骤六:进入容器内部
有时候我们需要进入容器内部进行一些操作(比如修改配置文件)。
# docker exec -it [容器名或容器ID] /bin/bash
docker exec -it my-nginx /bin/bash
AI写代码
-i: 交互式操作 (interactive)。
-t: 分配一个伪终端 (tty)。
/bin/bash: 指定进入容器后要执行的命令,这里是启动一个 Bash Shell。
执行后,你的命令行提示符会变了,表示你已经成功进入了 my-nginx 容器的内部。你可以像在普通 Linux 系统里一样使用 ls, cd, cat 等命令。输入 exit 即可退出容器。
步骤七:停止并删除容器
如果想停止这个网站,可以 stop 容器。
docker stop my-nginx
AI写代码
停止后的容器依然存在,只是不运行了。你可以用 docker ps -a 查看所有容器(包括已停止的)。如果确定不再需要它,可以用 rm 命令彻底删除。
# 删除前必须先停止容器
docker rm my-nginx
AI写代码
步骤八:删除镜像
如果连 Nginx 镜像也不想要了,可以用 rmi 命令删除它。
# docker rmi [镜像名或镜像ID]
docker rmi nginx
AI写代码
注意: 如果有容器正在使用这个镜像,必须先删除所有依赖该镜像的容器,然后才能删除镜像。
至此,一个完整的“拉取->运行->交互->清理”的 Docker 生命周期你就体验完了!
四、Docker 常用命令大全(超详细)
掌握了上面的实战,你已经入门了。下面这份详细的命令大全,将是你日常工作中的得力助手。
(一) 镜像相关命令 (Image Commands)
命令
详细说明
常用示例
docker images
列出本地所有镜像。
docker images
-a, --all: 列出所有镜像(包括中间层镜像)。
docker images -a
-q, --quiet: 只显示镜像ID。
docker images -q
docker pull
从镜像仓库拉取镜像。
docker pull ubuntu:20.04
docker rmi
删除一个或多个本地镜像。
docker rmi nginx (按名) docker rmi 2d... (按ID前几位)
-f, --force: 强制删除镜像。
docker rmi -f nginx
docker build
从 Dockerfile 构建镜像。
docker build -t my-app:1.0 .
-t, --tag: 指定镜像的名字和标签。
docker build -t my-repo/my-app:v1 .
-f, --file: 指定 Dockerfile 文件路径。
docker build -f /path/to/Dockerfile .
docker search
在 Docker Hub 中搜索镜像。
docker search redis
--limit: 指定搜索结果的最大数量。
docker search --limit 5 tomcat
docker tag
为本地镜像打上一个新的标签。
docker tag nginx:latest my-nginx:v1.0
docker push
将本地镜像推送到镜像仓库。
docker push my-repo/my-app:v1
docker save
将指定镜像保存成 tar 归档文件。
docker save -o nginx.tar nginx:latest
docker load
从 tar 归档文件加载镜像。
docker load -i nginx.tar
(二) 容器相关命令 (Container Commands)
命令
详细说明
常用示例
docker run
创建并启动一个新容器(核心命令)。
docker run -it ubuntu /bin/bash
-d: 后台运行容器。
docker run -d nginx
-p 主机端口:容器端口: 端口映射。
docker run -d -p 80:80 nginx
-v 主机路径:容器路径: 卷挂载,实现数据持久化。
docker run -v /mydata:/data redis
--name: 指定容器名称。
docker run --name my-redis redis
-it: 交互模式并分配终端。
docker run -it centos /bin/bash
--rm: 容器停止后自动删除。
docker run --rm -it ubuntu bash
-e: 设置环境变量。
docker run -e MYSQL_ROOT_PASSWORD=1234 mysql
docker ps
列出正在运行的容器。
docker ps
-a, --all: 列出所有容器(包括已停止的)。
docker ps -a
-q, --quiet: 只显示容器ID。
docker ps -q
docker start
启动一个或多个已停止的容器。
docker start my-nginx
docker stop
停止一个或多个正在运行的容器。
docker stop my-nginx
docker restart
重启容器。
docker restart my-nginx
docker rm
删除一个或多个已停止的容器。
docker rm my-nginx
-f, --force: 强制删除正在运行的容器。
docker rm -f my-nginx
清理所有停止的容器:
docker rm $(docker ps -aq)
docker exec
在运行的容器中执行命令。
docker exec -it my-nginx bash
docker logs
获取容器的日志。
docker logs my-nginx
-f, --follow: 持续跟踪日志输出。
docker logs -f my-nginx
-t, --timestamps: 显示时间戳。
docker logs -t my-nginx
--tail: 只显示末尾N行日志。
docker logs --tail 100 my-nginx
docker inspect
获取容器/镜像的元数据(详细信息)。
docker inspect my-nginx
docker cp
在容器和宿主机之间复制文件。
docker cp foo.txt my-nginx:/foo.txt (本机->容器) docker cp my-nginx:/foo.txt . (容器->本机)
docker top
显示一个容器内正在运行的进程。
docker top my-nginx
(三) 其他常用命令
命令
详细说明
docker login
登录到一个 Docker 镜像仓库(如 Docker Hub)。
docker logout
登出镜像仓库。
docker version
显示 Docker 的版本信息。
docker info
显示 Docker 的系统级信息,包括镜像和容器数量等。
五、总结
Docker 是一项颠覆性的技术,是现代开发者的必备技能。它不仅解决了环境一致性的痛点,更是一种全新的软件打包和分发方式。希望这篇“保姆级”的入门教程能帮助你迈出坚实的第一步。
记住,学习技术最好的方式就是不断练习。赶紧打开你的终端,跟着文章的步骤和命令大全亲自敲一遍吧!
————————————————
版权声明:本文为CSDN博主「Stuomasi_xiaoxin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Stuomasi_xiaoxin/article/details/148895637
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




