2.4 容器基础操作:第一次起吊


2.4 容器基础操作:第一次起吊

本节摘要:本章收官站——完成一次从提货到送离的完整闭环:起吊(run)、瞭望(ps)、停船(stop)、送离(rm)。学完本节,你具备独立完成单容器作业的全部技能,也正式拿到第 4 章生命周期管理的学习资格。

一次完整的首吊作业

上一节提回的 nginx 镜像,现在吊起来。首吊作业按标准流程走四步,每一步都有对应的命令与预期现象。先看全貌图,再逐步实操:

图 2-3:一次完整的起吊作业闭环

图 2-3:一次完整的起吊作业闭环

第一步:起吊

# 起吊一只 nginx 箱子:后台运行、挂牌 web01、把宿主机 8080 泊位接到容器的 80 docker run -d --name web01 -p 8080:80 nginx:1.25-alpine # 输出一串 64 位字符:这就是容器的完整编号,作业单据号 # c3f1a2b4d5e6...(截断显示)

三个选项各就各位:-d 后台运行让你拿回终端;--name web01 挂牌,从此用名字指挥它;-p 8080:80 分配泊位——宿主机 8080 端口进来的流量被引到容器的 80 端口。打开浏览器访问本机 8080 端口,应该能看到 nginx 的欢迎页:一只箱子吊起来了,而且能收发货物了。

验证一下泊位真的通了:

# 命令行验证泊位连通性(返回欢迎页的 HTML 即成功) curl -s -o /dev/null -w "HTTP 状态码: %{http_code}\n" http://localhost:8080 # 输出示例:HTTP 状态码: 200

第二步:瞭望

# 在船清单:只显示运行中的容器 docker ps # CONTAINER ID IMAGE STATUS PORTS NAMES # c3f1a2b4d5e6 nginx:1.25-alpine Up 2 minutes 0.0.0.0:8080->80/tcp web01 # 全体清单:加上已经停船的(-a 是 all) docker ps -a # CONTAINER ID IMAGE STATUS NAMES # c3f1a2b4d5e6 nginx:1.25-alpine Up 2 minutes web01 # 9d8e7f6a5b4c hello-world Exited (0) 3 days ago quirky-wojak

两个视图的差异必须刻进肌肉记忆:ps 默认只看"在船的",-a 才看"全体"。无数新手在"容器不见了"的假故障上耗过时间——容器没丢,只是停了,docker ps -a 一查便知。

再瞭望一眼作业记录:

# 拉取容器日志(nginx 的访问日志与错误日志都会出现在这里) docker logs web01 # 输出示例: # /docker-entrypoint.sh: Configuration complete; ready for start up # 172.17.0.1 - - [30/Aug/2026: 10:12:01 +0800] "GET / HTTP/1.1" 200 615

第三步与第四步:停船与送离

# 停船:给进程发优雅停机信号,默认给 10 秒宽限 docker stop web01 # web01 # 此刻 ps 里已经看不到它,但它还在——用全体清单确认 docker ps -a --filter name=web01 # STATUS 显示 Exited (0) Stop 1 minute ago:正常熄火退出 # 送离:拆除箱子,释放船位;可写层数据随之清除 docker rm web01 # web01 # 送离后再查,现场干净 docker ps -a --filter name=web01 # (无输出)

停船与送离的区别值得再强调一次:stop 只是熄火,箱子还占着船位和存储;rm 才是拆箱。另外注意镜像毫发无损——rm 只动容器不动镜像,想清镜像用第 2.3 节的 rmi。

顺手收走一个知识点:--rm 选项把"送离"自动化。它让容器退出时自动清理,特别适合一次性试验:

# 一次性试验:退出即自动送离,不留残余船位 docker run --rm alpine echo "跑完即走" # 跑完即走 # (docker ps -a 里查不到这只容器,它已自动离场)

首吊复训:把闭环跑三遍

技能要长在手上,把下面的组合拳连跑三遍,速度一次比一次快:

# 组合训练:提货-起吊-瞭望-停船-送离 一气呵成 docker pull httpd:2.4-alpine docker run -d --name web-test -p 8081:80 httpd:2.4-alpine docker ps --filter name=web-test docker logs web-test docker stop web-test && docker rm web-test

跑完三遍后自问三个问题:run 的 -p 两个端口哪边是宿主机?ps 不加参数为什么看不到停了的容器?stop 和 rm 各自动了什么?三个问题都能秒答,本节就算过关。

闭环之外再补两个顺手的动词:start 复航与 rename 改挂牌,它们让你不必为小变动拆箱重建:

# 复航一只已停的箱子:不新建容器,现场与可写层原样恢复 docker run -d --name web-x nginx:1.25-alpine docker stop web-x docker start web-x # ps 里重新出现,泊位映射照旧生效——与重新 run 的"新箱子"有本质区别 # 改挂牌:箱子在航状态下直接换名字,调度单据同步更新 docker rename web-x web-prod

start 的复航是第 4 章生命周期管理的起点动作,这里先建立起"停了不等于废了"的手感。

顺手记两个首吊期常见的小磕绊。泊位被占:如果 8080 端口已有别的程序在用,run 会直接报端口分配失败——换一个宿主机端口重试即可(比如 8081),容器侧的 80 不用动,这正是"泊位与舱位分离"的好处。名字撞车--name 是全局唯一的,上一只同名箱子没送离,新一轮起吊会被拒绝——按 2.4 的纪律收尾(rm),或者先查 docker ps -a 找到旧箱子处置掉。这些磕绊在第 7 章的排错总演习里还会系统性复盘,此处先混个脸熟。

本节要点回顾

  • 首吊四步:run 起吊、ps 瞭望、stop 停船、rm 送离;--rm 让试验容器退出即离场。
  • -p 8080:80 左边是宿主机泊位、右边是容器端口;curl 验证泊位连通。
  • ps 默认只显示运行中的容器-a 才是全体清单——"容器不见了"多半是假故障。
  • stop 是熄火(容器保留),rm 是拆箱(可写层清除);两者都不影响镜像。
  • 容器名(--name)是给箱子挂牌,之后所有操作都可以用名字而不是长编号。

单箱作业已熟练。下一章深入装箱车间:看懂镜像的分层结构,亲手把你的应用装成箱子。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U