首页 / Docker 入门教程 / 跑起第一个容器:Hello World

Docker 入门教程

跑起第一个容器:Hello World

本教程共 25 篇 · 第 6 篇 · 更新于 2026-07-26 · 约 7 分钟阅读

DockerDocker 入门教程docker runHello World容器端口映射

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 [选项] 镜像名 [命令] [参数]
  • 选项:控制容器怎么跑,比如后台、交互、映射端口。
  • 镜像名:用什么镜像启动,比如 ubuntunginx: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_coriwizardly_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 其实是几步的合体:

  1. 本地没有镜像就先 docker pull 拉取。
  2. 基于镜像 docker create 创建容器,分配可读写层。
  3. 给容器分配网络和 IP。
  4. docker start 启动容器,执行指定命令。

也就是说,docker run = pull + create + start。理解了这个,下一节讲生命周期管理时你会很顺。

小结

这节跑了第一个容器,把 docker run 的常用参数过了一遍:-it 进交互终端、-d 后台跑、--name 起名字、-p 映射端口。这些组合几乎覆盖了日常九成的使用场景。

容器跑起来之后,怎么停、怎么启、怎么删?下一节讲容器的生命周期管理。