Docker 入门及实战:一篇带你看懂容器化

_

在软件开发领域,你一定听过这句话:“这代码在我机器上能跑啊!” 环境不一致,是开发、测试、运维之间永恒的矛盾。而 Docker 的出现,正是为了彻底解决这个问题。

本文将从零开始,带你弄懂 什么是 Docker、能做什么、常用命令有哪些,并手把手完成一次实战部署,最后聊聊 Docker 的部署目标与适用场景。

一、到底什么是 Docker?

Docker 是一个容器化平台,用于开发、打包和运行应用程序。它可以把你的应用,以及应用所需要的所有环境(代码、运行时、系统工具、系统库)打包在一个轻量级、可移植的容器里。

关键理解:容器不是虚拟机

特性

容器

虚拟机

启动速度

秒级

分钟级

资源占用

共享宿主机内核,体积小

每个 VM 包含完整 OS,体积大

隔离性

进程级隔离

完全隔离

镜像大小

通常几十 MB

几 GB

简单说:容器是操作系统层面的虚拟化,而虚拟机是硬件层面的虚拟化。 Docker 容器共享宿主机的操作系统内核,所以极其轻量。


二、Docker 能做什么?

Docker 的作用,早已超越了“解决环境不一致”这件事:

  1. 快速搭建一致的开发环境
    新成员入职,只需 docker-compose up 就能启动全套微服务,不用折腾半天环境。

  2. 简化部署流程
    开发环境、测试环境、生产环境保持完全一致,真正实现“一次构建,到处运行”。

  3. 微服务架构
    将一个大型应用拆分为多个容器运行,各自独立部署、升级和扩缩容。

  4. 持续集成/持续部署 (CI/CD)
    测试环境可以秒级生成与销毁,构建、测试、部署全流程自动化。

  5. 资源隔离与充分利用
    在一台机器上安全运行多个应用,避免依赖冲突,且比虚拟机更节省资源。


三、常用 Docker 命令速览

掌握以下命令,基本能覆盖日常 80% 的使用场景。

镜像相关(Image)

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx:latest

# 列出本地镜像
docker images

# 删除镜像
docker rmi nginx:latest

# 构建镜像(在 Dockerfile 所在目录执行)
docker build -t my-app:1.0 .

容器相关(Container)

# 运行一个容器
docker run -d --name my-nginx -p 80:80 nginx:latest

# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 停止/启动/重启容器
docker stop my-nginx
docker start my-nginx
docker restart my-nginx

# 进入正在运行的容器
docker exec -it my-nginx /bin/bash

# 查看容器日志
docker logs -f my-nginx

# 删除容器
docker rm my-nginx

# 强制删除正在运行的容器
docker rm -f my-nginx

其他常用命令

# 查看 docker 系统占用空间
docker system df

# 清理所有未使用的镜像、容器、网络
docker system prune -a
# 拉取镜像
docker pull nginx:latest

# 列出本地镜像
docker images

# 删除镜像
docker rmi nginx:latest

# 构建镜像(在 Dockerfile 所在目录执行)
docker build -t my-app:1.0 .

四、实战部署:用 Docker 运行一个静态网站

理论再多,不如动手敲一把。这里我们以 Nginx 部署一个静态 HTML 网站为例,走通完整流程。

0. 安装 Docker(已安装可跳过)

在开始部署之前,请确保你的机器上已经安装了 Docker。如果还没有,可以根据你的操作系统参考以下步骤。

Ubuntu / Debian

# 更新软件源并安装 Docker
sudo apt update
sudo apt install docker.io -y

# 启动 Docker 并设置开机自启
sudo systemctl enable --now docker

# 将当前用户加入 docker 组,避免每次都需要 sudo(需重新登录生效)
sudo usermod -aG docker $USER

CentOS / RHEL

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io -y
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER

macOS
下载并安装 Docker Desktop for Mac,安装后会在状态栏出现 Docker 图标,启动即可。

Windows
下载并安装 Docker Desktop for Windows,推荐启用 WSL 2 后端以获得更好的性能。安装完成后启动 Docker Desktop。

安装完成后,在终端执行以下命令,若正常显示版本信息则说明安装成功:

docker version

现在,我们可以正式开始部署了。

部署目标

  • 将本地的网页文件挂载到容器中

  • 映射宿主机的 8080 端口到容器的 80 端口

  • 容器在后台运行,开机自启(除非手动停止)

第 1 步:准备网页文件

在宿主机上新建一个目录,如 ~/my-website,在里面创建一个 index.html

mkdir my-website
touch index.html
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<head><title>Docker 实战</title></head>
<body>
  <h1>Hello, Docker!</h1>
  <p>这是运行在容器中的静态网站。</p>
</body>
</html>

第 2 步:拉取 Nginx 镜像

docker pull nginx:alpine   # 使用 alpine 版本,体积仅约 20MB

第 3 步:运行容器

docker run -d \
  --name website \
  -p 8080:80 \
  -v ~/my-website:/usr/share/nginx/html:ro \
  --restart unless-stopped \
  nginx:alpine

参数解释:

  • -d:后台运行

  • --name website:容器名称

  • -p 8080:80:宿主机的 8080 端口映射到容器内的 80 端口

  • -v:将宿主机 ~/my-website 目录挂载到容器的 /usr/share/nginx/htmlro 表示只读

  • --restart unless-stopped:容器在退出或宿主机重启后自动启动

第 4 步:验证

浏览器打开 http://你的服务器IP:8080(本地则访问 http://localhost:8080),可以看到 “Hello, Docker!” 的页面。

修改一下 ~/my-website/index.html 的内容,刷新浏览器,内容立即生效——这就是挂载卷的便利,特别适合开发阶段。


五、进阶:编写 Dockerfile 构建自己的应用

如果你的应用不是现成的镜像,可以通过 Dockerfile 来定义。下面是一个简单的 Node.js 应用示例:

项目结构:

my-node-app/
├── server.js
├── package.json
└── Dockerfile

server.js

const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello from Node.js in Docker!\n');
});
server.listen(3000, () => console.log('Server running on port 3000'));

Dockerfile

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

构建并运行:

# 构建镜像
docker build -t my-node-app:1.0 .

# 运行容器
docker run -d -p 3000:3000 --name node-server my-node-app:1.0

访问 http://localhost:3000 就能看到输出。


六、Docker 的部署目标与适用场景

使用 Docker 部署时,常见的目标环境包括:

  • 本地开发:快速搭建一致的开发环境,避免“我这儿能跑”的问题。

  • 持续集成测试:每次提交代码后,用临时容器运行测试,完毕即销毁。

  • 预发/灰度环境:与生产环境完全相同的镜像,仅配置不同,减少上线风险。

  • 生产环境:结合 Kubernetes 等编排工具,实现自动伸缩、滚动更新和高可用。

  • 边缘计算与物联网:Docker 轻量的特性,使其适用于资源受限的设备。

但也要注意,不是所有场景都适合容器化。例如,需要极致 IO 性能的数据库,或者与内核深度绑定的应用,需要谨慎评估。


七、总结

Docker 让应用的交付从“代码 + 环境说明书”变成了一个标准化、不可变、可移植的镜像。它不仅仅是工具,更是一种改变了我们软件交付和运维的思维方式。

本文从概念到命令,再到实战,帮你迈出了 Docker 的第一步。继续深入,你可以去接触 Docker Compose(管理多容器应用)、Docker Swarm / Kubernetes(容器编排),以及更精细的网络、存储配置。

希望这篇博客对你有帮助!如果觉得有用,欢迎分享给更多的开发者朋友。

使用kali Linux结合fluxion工具对周围WiFi进行渗透测试 2026-07-05

评论区