Docker 入门:用容器跑第一个 Web 服务

举报
yd_250942226 发表于 2026/10/22 14:12:03 2026/10/22
【摘要】 为什么是容器?每个开发者大概都遇到过这种尴尬:在自己电脑上跑得好好的程序,搬到服务器上就罢工——缺依赖、版本对不上、环境变量没配。传统做法是写一份长长的部署文档,而 Docker 给出的答案更干脆:把程序连同它依赖的环境一起打包成一个"集装箱",走到哪里搬到哪里。镜像(Image)是这个"集装箱"的蓝图,容器(Container)是按蓝图真正运行起来的实例。概念先放一边,我们直接动手,把第...

为什么是容器?

每个开发者大概都遇到过这种尴尬:在自己电脑上跑得好好的程序,搬到服务器上就罢工——缺依赖、版本对不上、环境变量没配。传统做法是写一份长长的部署文档,而 Docker 给出的答案更干脆:把程序连同它依赖的环境一起打包成一个"集装箱",走到哪里搬到哪里。

镜像(Image)是这个"集装箱"的蓝图,容器(Container)是按蓝图真正运行起来的实例。概念先放一边,我们直接动手,把第一个 Web 服务跑起来。

第一步:安装 Docker

Linux 服务器上安装 Docker 非常简单:

curl -fsSL https://get.docker.com | sh
sudo systemctl start docker
docker --version

看到版本号输出,就说明 Docker 已经就绪。Windows 和 macOS 用户可以直接安装 Docker Desktop,图形化界面更友好。

第二步:先跑一个 Hello World 热热身

docker run hello-world

别小看这一行命令,它背后发生了三件事:本地没有 hello-world 镜像,Docker 自动去默认仓库拉取;下载完成后创建容器;容器运行并打印欢迎信息后退出。拉取、创建、运行,一气呵成。

第三步:用 Nginx 跑真正的 Web 服务

光打印一句话不过瘾,我们跑一个真正对外提供服务的 Nginx:

docker run -d --name my-web -p 8080:80 nginx

参数逐个拆开看:

  • -d:后台运行,不占用当前终端;
  • --name my-web:给容器起个名字,后续管理更方便;
  • -p 8080:80:端口映射,把宿主机的 8080 端口映射到容器内的 80 端口,这是容器与外界通信的关键;
  • nginx:使用的镜像名称。

执行后在浏览器访问 http://服务器IP:8080,熟悉的 Nginx 欢迎页出现了。你的第一个容器化 Web 服务,正式上线。

第四步:学会管理容器

服务跑起来只是开始,日常管理离不开几个高频命令:

docker ps            # 查看正在运行的容器
docker ps -a         # 查看所有容器,包括已停止的
docker logs my-web   # 查看容器日志,排查问题全靠它
docker stop my-web   # 停止容器
docker start my-web  # 重新启动容器
docker rm my-web     # 删除容器(需先 stop)
docker images        # 查看本地已下载的镜像

记住一个重要原则:容器应该是"一次性的",重要数据不要只放在容器里,持久化要靠数据卷(volume)。

第五步:把自己的页面装进容器

默认欢迎页太单调,换成我们自己的页面。先写一个简单的 index.html:

<!DOCTYPE html>
<html>
<body>
  <h1>你好,Docker!</h1>
  <p>这是我的第一个容器化页面。</p>
</body>
</html>

用数据卷挂载的方式替换 Nginx 默认页面:

docker run -d --name my-page -p 8081:80 \
  -v $(pwd)/index.html:/usr/share/nginx/html/index.html:ro nginx

浏览器访问 8081 端口,「你好,Docker!」出现了。-v 把宿主机文件映射进容器,修改本地文件后重启容器即生效,开发调试非常顺手。

新手常踩的四个坑

  1. 端口被占用:启动时报 port is already allocated,说明宿主机端口已被占用,换一个 -p 冒号前面的端口即可。
  2. 容器一起就退出:用 docker logs 容器名 看日志,多半是启动命令或配置写错了。
  3. 镜像拉取太慢:默认仓库在境外,配置国内镜像加速器后速度能快一个数量级。
  4. 容器里的数据丢了:容器删除数据就没了,重要数据一定要用 -v 挂载到宿主机。

写在最后

从一条 docker run 开始,你已经掌握了容器最核心的工作流:拉镜像、跑容器、映射端口、管理生命周期。下一步可以尝试自己写 Dockerfile,把应用打包成专属镜像,那就真正推开了容器化的大门。动手试试吧,当第一个 Web 服务在容器里跑起来的那一刻,你会发现部署原来可以这么简单。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。