标签: Docker, 容器化, 后端, DevOps, 新手入门, 环境配置, CSDN博客
阅读时长: 约 12 分钟
哈喽 CSDN 的各位技术弄潮儿们! 今天博主不聊别的,就来给大家强势安利一个彻底改变我们开发、测试、部署流程的神器——Docker!
你是不是也遇到过这些令人头秃的场景?
姐妹们(啊不,是小伙伴们!),是时候跟这些烦恼 Say Goodbye 了!♀️ Docker 就是来拯救世界的!这篇爆肝整理的 Docker 入门教程,干货满满,从是什么、为什么到怎么用,手把手带你入门,小白也能轻松上手,赶紧码住学习吧!
简单粗暴地说,Docker 是一个开源的应用容器引擎。它允许开发者将应用及其所有依赖(库、运行时、系统工具等)打包到一个轻量级、可移植的容器 (Container) 中,然后发布到任何支持 Docker 的 Linux、Windows 或 macOS 机器上,也能实现虚拟化。
听起来是不是有点像虚拟机 (VM)? Nonono,它们有本质区别!
一张图看懂区别(脑补一下):
+-----------------+ +-----------------+ +-----------------+
| App A | | App B | | App C |
| Bins/Libs | | Bins/Libs | | Bins/Libs |
+-----------------+ +-----------------+ +-----------------+
| Docker Engine / Container Runtime |
+-----------------------------------------------------------------+
| Host Operating System |
+-----------------------------------------------------------------+
| Infrastructure |
+-----------------------------------------------------------------+
^ Docker: Apps share Host OS Kernel, lightweight ^
vs.
+-----------------+ +-----------------+ +-----------------+
| App A | | App B | | App C |
| Bins/Libs | | Bins/Libs | | Bins/Libs |
| Guest OS | | Guest OS | | Guest OS |
+-----------------+ +-----------------+ +-----------------+
| Hypervisor |
+-----------------------------------------------------------------+
| Host Operating System |
+-----------------------------------------------------------------+
| Infrastructure |
+-----------------------------------------------------------------+
^ Virtual Machine: Each App has its own full OS, heavyweight ^
Docker 的核心概念:
所以,Docker 的魅力在于:Build Once, Run Anywhere! (一次构建,处处运行)
博主摸着良心说,用了 Docker 之后,幸福感真的直线飙升! 它的好处简直不要太多:
为什么要这样用? 因为 Docker 解决了软件开发和运维中的核心痛点——环境依赖和部署复杂性。它用标准化的容器技术,抹平了环境差异,简化了交付流程,让开发者更专注于业务逻辑,运维更轻松高效。这是一种现代化的、高效的软件交付方式!
理论听着很香,咱们这就上手实操!保证简单易懂,小白也能跟上!
第一步:安装 Docker
这个根据你的操作系统来,官方文档写得非常清楚:
安装过程一般都很顺畅,跟着向导点点点就行。安装完成后,打开你的终端 (Terminal / CMD / PowerShell),输入以下命令验证:
docker --version
docker info
如果能看到版本号和 Docker 的详细信息,就说明安装成功啦!
第二步:镜像操作 (拉取、查看、删除)
咱们先从 Docker Hub 拉取一个官方的 Nginx 镜像试试水。Nginx 是一个高性能的 Web 服务器,经常用来做反向代理和静态资源服务。
# 1. 拉取 (pull) Nginx 镜像 (默认拉取 latest 版本)
docker pull nginx
# 拉取指定版本,比如 1.21 版本
# docker pull nginx:1.21
# 2. 查看本地已有的镜像
docker images
# 或者 docker image ls
docker images
会列出你本地所有的镜像,包括 REPOSITORY (仓库名)、TAG (标签/版本)、IMAGE ID (唯一标识)、CREATED (创建时间) 和 SIZE (大小)。
# 3. 删除本地镜像 (如果不需要了)
# 注意:需要先停止并删除使用了该镜像的容器才能删除镜像
docker rmi nginx
# 或者使用 IMAGE ID 删除
# docker rmi
第三步:容器操作 (运行、查看、停止、删除)
有了镜像,我们就可以用它来创建和运行容器了!
# 1. 运行 (run) 一个 Nginx 容器
docker run --name my-nginx -d -p 8080:80 nginx
这个命令稍微解释一下,参数很重要哦:
docker run
: 运行容器的命令。--name my-nginx
: 给这个容器起个名字叫 my-nginx
,方便后续操作。不指定会自动生成一个随机名字。-d
: Detached 模式,表示在后台运行容器,并打印容器 ID。如果不加 -d
,容器会在前台运行,终端会被它占用。-p 8080:80
: Port mapping (端口映射)。把宿主机的 8080
端口映射到容器内的 80
端口。Nginx 默认在容器内监听 80
端口。这样我们就可以通过访问宿主机的 8080
端口来访问容器里的 Nginx 服务了!格式是 宿主机端口:容器端口
。nginx
: 指定使用哪个镜像来创建容器。命令执行成功后,会输出一长串的容器 ID。现在,打开你的浏览器,访问 http://localhost:8080
(或者如果你用的是 Docker Toolbox 或远程服务器,访问对应的 IP 地址:8080),你应该能看到 Nginx 的欢迎页面啦!“Welcome to nginx!” 是不是超简单!
# 2. 查看正在运行的容器
docker ps
# 3. 查看所有容器 (包括已停止的)
docker ps -a
# 4. 停止 (stop) 正在运行的容器
docker stop my-nginx
# 或者使用 Container ID (只需要输入前几位唯一即可)
# docker stop
# 停止后,再访问 http://localhost:8080 就会失败了
# 5. 启动 (start) 已停止的容器
docker start my-nginx
# 启动后,服务就又恢复了
# 6. 删除 (remove) 已停止的容器
# 容器必须先停止才能删除
docker rm my-nginx
# 或者使用 Container ID
# docker rm
# 清理所有已停止的容器 (慎用)
# docker container prune -f
这个 “拉取镜像 (pull
) -> 运行容器 (run
) -> 管理容器 (ps
, stop
, start
, rm
)” 的流程,就是 Docker 最基本的使用闭环!
第四步:(进阶一丢丢) 构建自己的镜像 (Dockerfile)
虽然 Docker Hub 有很多现成的镜像,但我们最终还是要部署自己的应用。这时就需要编写 Dockerfile
来定义如何构建我们自己的镜像了。
Dockerfile
是一个文本文件,包含了一条条指令(Instruction),每一条指令构建一层。
来看一个超简单的 Node.js 应用的 Dockerfile 示例:
# Dockerfile (文件名就叫 Dockerfile,没有后缀)
# 1. 指定基础镜像 (从哪个现有镜像开始构建)
FROM node:16-alpine
# 2. 设置工作目录 (容器内的路径)
WORKDIR /app
# 3. 复制本地文件到容器的工作目录
# 将 package.json 和 package-lock.json (如果存在) 复制到 /app
COPY package*.json ./
# 4. 在容器内执行命令 (安装依赖)
RUN npm install
# 5. 再次复制 (将项目所有文件复制到 /app)
COPY . .
# 6. 暴露端口 (声明容器运行时监听的端口,供 -p 使用)
EXPOSE 3000
# 7. 容器启动时执行的命令
CMD [ "node", "server.js" ]
构建镜像的命令 (在 Dockerfile 所在目录下执行):
# -t 给镜像起名字和标签 (格式: :)
# . 表示 Dockerfile 在当前目录下
docker build -t my-node-app:1.0 .
构建成功后,用 docker images
就能看到你自己的 my-node-app:1.0
镜像了!然后就可以像之前运行 Nginx 一样运行你自己的应用容器了:
docker run --name my-app-instance -d -p 4000:3000 my-node-app:1.0
(假设你的 Node 应用监听 3000 端口,我们把它映射到宿主机的 4000 端口)
为什么要这样用? Dockerfile
提供了一种代码化 (Infrastructure as Code) 的方式来定义应用环境,保证了镜像构建过程的透明、可重复和版本化。这是实现标准化和自动化的关键!
好啦,今天的 Docker 保姆级入门就先到这里!我们一起探索了:
docker pull
拉取镜像docker run
运行容器 (重点掌握 -d
, -p
, --name
)docker ps
查看运行中的容器docker stop/start/rm
管理容器生命周期docker images/rmi
管理镜像Dockerfile
和 docker build
构建自定义镜像是不是感觉 Docker 也没有想象中那么高冷? 它更像是一个趁手的工具,帮你解决开发部署中的实际问题。
给新手宝宝们的建议:
进阶方向: Docker Compose (管理多个容器的应用)、Docker Swarm / Kubernetes (容器编排)、Docker 网络、数据卷 (Volume) 等,都是后续可以深入学习的方向。
希望这篇有点 CSDN 技术范儿,又带了点小红书安利风的文章,能成功把你带进 Docker 的大门! 用好 Docker,告别环境配置的烦恼,提升开发部署效率,早日实现下班自由!
觉得博主这篇整理得还不错的话,别忘了点赞、收藏、加关注哦!你的支持是我持续输出高质量内容的动力! ❤️ 对 Docker 还有什么疑问,或者想看哪些进阶内容,都可以在评论区留言告诉我呀!