Docker 容器入门:从镜像到容器,跑起你的第一个应用

举报
yd_285516661 发表于 2026/11/09 21:47:24 2026/11/09
【摘要】 本文用最直白的方式讲清 Docker 镜像与容器的区别,带你用 docker run 跑起 Nginx、写一个 Dockerfile 打包自己的静态页面,并总结新手最容易踩的四个坑。

刚接触服务器部署时,我经常被同一件事困扰:在自己电脑上跑得好好的程序,换一台机器就起不来,缺依赖、端口冲突、环境版本对不上。后来我开始用 Docker,这类问题少了很多。这篇文章用最直白的方式,把 Docker 从镜像到容器的关键概念讲清楚,并带你跑起第一个应用。

一、Docker 到底解决了什么问题

传统部署方式里,应用和它依赖的运行环境是绑在一起的。换一台机器,就要重新装语言、装库、配环境,任何一个版本差异都可能导致程序跑不起来。

Docker 的思路是:把应用和它需要的运行环境打包成一个镜像(Image),再从镜像启动出一个容器(Container)来运行。镜像是只读的模板,容器是镜像跑起来的实例。同一份镜像,在开发机、测试机和服务器上跑出来的行为基本一致,这就是常说的“一次构建,到处运行”。

可以这样理解:镜像是安装包,容器是装好之后正在运行的程序。删除容器不会影响镜像,随时可以用同一份镜像再起一个新的容器。

二、三个核心概念,先分清再动手

镜像(Image):分层构建的只读模板,每一层记录一次文件变化,相同的层可以在不同镜像之间共享,所以拉取镜像时常常很快。

容器(Container):镜像的运行实例,有自己独立的文件系统、网络和进程空间,容器停止后,内部没有持久化的数据会随容器一起消失。

仓库(Registry):存放镜像的地方,比如 Docker Hub。docker pull 就是从仓库把镜像下载到本地。

三、跑起第一个应用

装好 Docker 之后,先确认它能正常工作:

docker version
docker run hello-world

hello-world 是官方的测试镜像,能正常输出文字,说明 Docker 已经就绪。

接下来跑一个真正能访问的服务,以 Nginx 为例:

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

这条命令里,-d 是后台运行,–name 给容器起名字,-p 8080:80 把主机的 8080 端口映射到容器的 80 端口。执行后在浏览器访问本机的 8080 端口,就能看到 Nginx 的欢迎页。

几个常用的管理命令建议顺手记住:

docker ps              # 查看正在运行的容器
docker ps -a           # 查看所有容器,包括已停止的
docker logs my-nginx   # 查看容器日志
docker stop my-nginx   # 停止容器
docker rm my-nginx     # 删除容器

四、自己写一个 Dockerfile

只会用别人的镜像还不够,真正常用的是把自己的程序打包成镜像。假设目录里有一个简单的静态页面 index.html,新建一个 Dockerfile:

FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80

然后构建并运行:

docker build -t my-web:v1 .
docker run -d --name my-web -p 8080:80 my-web:v1

FROM 指定基础镜像,COPY 把文件放进镜像,EXPOSE 声明容器监听的端口。docker build 后面的点表示以当前目录为构建上下文。改一行代码就重新构建一次,镜像层会复用没变的层,所以重复构建通常很快。

五、新手最容易踩的几个坑

第一,容器里的数据默认不持久。数据库这类有状态的服务,一定要用 -v 挂载卷或者绑定目录,否则容器删掉数据就没了。

第二,端口映射别写反。-p 主机端口:容器端口,访问时用的是主机端口。

第三,镜像命名要有标签。my-web:v1 里的 v1 就是标签,写清楚版本,回滚时才找得到。

第四,不要在容器里用 latest 当作版本管理。latest 只是个默认标签,不代表最新、最稳定,上线环境最好固定具体版本号。

六、小结

Docker 的上手路径其实很短:理解镜像和容器、会用 run、ps、logs、stop、rm 这几个命令、能写一个简单的 Dockerfile,就已经能应付大部分开发和学习场景了。之后可以再慢慢学 Docker Compose 管理多容器、学数据卷和网络,循序渐进即可。

如果你今天刚装好 Docker,不妨就按上面的命令跑一遍,从 hello-world 到自己的 my-web:v1,亲手走通一次,比看十篇概念文章都有用。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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