跑起第一个容器:Hello World
本教程共 25 篇 · 第 6 篇 · 更新于 2026-07-26 · 约 7 分钟阅读
6. 跑起第一个容器:Hello World
本节目标:用
docker run跑通第一个容器,搞懂这条命令每个参数的含义,学会前台交互、后台运行、端口映射三种最常用的运行方式。
从 hello-world 开始
装好 Docker 之后,第一个要跑的必然是 hello-world。这条命令几乎是 Docker 的「开机电灯泡」:
docker run hello-world
第一次执行,你会看到类似这样的输出:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
e6590344b1a5: Pull complete
Digest: sha256:...
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
这段话翻译过来就是:本地找不到 hello-world 镜像,于是从仓库拉了一份,基于它创建并启动了一个容器,容器跑了下打印了这几行问候语,然后自己退出了。
一条命令,把「拉镜像、建容器、跑程序」全走了一遍。安装没问题,加速也没问题,接下来就可以正经学命令了。
拆解 docker run 命令
docker run 是用得最多的命令,它的完整骨架是:
docker run [选项] 镜像名 [命令] [参数]
- 选项:控制容器怎么跑,比如后台、交互、映射端口。
- 镜像名:用什么镜像启动,比如
ubuntu、nginx:alpine。 - 命令和参数:容器启动后执行什么,不写就用镜像默认的。
Note镜像名不写标签时,Docker 默认拉
latest。也就是docker run ubuntu等同于docker run ubuntu:latest。生产环境建议显式写版本号,别依赖latest,否则哪天镜像更新了,你的应用可能突然出问题。
前台交互式运行
很多时候我们需要「进到容器里」敲命令,比如调试、探索容器内部环境。这就要用 -i 和 -t 两个参数:
docker run -it ubuntu /bin/bash
-i(--interactive):保持标准输入打开,让你能往容器里输东西。-t(--tty):分配一个伪终端,这样才有命令行提示符。
两个合在一起写成 -it,加上 /bin/bash,你就进到了一个 Ubuntu 容器的 bash 里:
root@0123ce188bd8:/#
注意提示符变了,主机名是一串容器 ID。此时你在容器内部,可以随便敲命令:
cat /etc/os-release
ls /
想退出,输入 exit 或按 Ctrl+D。退出后容器会随之停止—因为 /bin/bash 是这个容器的主进程,主进程结束容器就停了。
Tip想退出终端但不让容器停,可以按
Ctrl+P然后Ctrl+Q这组快捷键,它会把你「摘」出来,容器继续在后台跑。不过日常更推荐用后面讲的-d后台运行。
后台运行
生产场景里,容器通常要长时间跑着,你不能让终端一直被占着。加 -d(--detach)让容器在后台跑:
docker run -d ubuntu /bin/sh -c "while true; do echo hello; sleep 1; done"
执行后不会看到输出,而是返回一串长字符:
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
这就是容器 ID,每个容器的唯一标识。容器在后台每秒打印一次 hello,这些输出不会显示在你终端,而是存进了容器日志里。想看的话用 docker logs(下一章细讲):
docker logs 2b1b7a428627
Note容器 ID 很长,但平时不用写全,写前几位能唯一区分就行。比如
docker logs 2b1b通常就够了。
给容器起个名字
每次让 Docker 自动生成名字,会出来类似 amazing_cori、wizardly_chandrasekhar 这种随机组合,不好记。用 --name 自己起一个:
docker run -d --name my-ubuntu ubuntu
之后操作这个容器,既能用 ID 也能用名字 my-ubuntu,方便很多。
端口映射初体验
容器里的服务默认是隔离的,外面访问不到。想让本机或外部能访问容器里的端口,得用 -p(--publish)做端口映射。
跑个 Nginx 试试:
docker run -d -p 8080:80 nginx
8080是宿主机端口。80是容器内 Nginx 监听的端口。
这条命令的意思:把宿主机的 8080 端口,转发到容器的 80 端口。现在打开浏览器访问 http://localhost:8080,就能看到 Nginx 的欢迎页。
Tip端口映射的格式是
宿主机端口:容器端口,别记反了。如果只想让容器内部通信、不对外暴露,就不加-p。还有一种-P(大写)会自动把镜像里EXPOSE的端口随机映射到宿主机一个高端口,适合临时测试。
docker run 背后发生了什么
把前面学的串起来,docker run 其实是几步的合体:
- 本地没有镜像就先
docker pull拉取。 - 基于镜像
docker create创建容器,分配可读写层。 - 给容器分配网络和 IP。
docker start启动容器,执行指定命令。
也就是说,docker run = pull + create + start。理解了这个,下一节讲生命周期管理时你会很顺。
小结
这节跑了第一个容器,把 docker run 的常用参数过了一遍:-it 进交互终端、-d 后台跑、--name 起名字、-p 映射端口。这些组合几乎覆盖了日常九成的使用场景。
容器跑起来之后,怎么停、怎么启、怎么删?下一节讲容器的生命周期管理。