Docker 快速上手:从镜像到容器的常用命令

云原生与交付419 阅读约 4 分钟

Docker 把「应用 + 依赖 + 运行环境」打包成一个可移植的镜像,再以容器的形式运行。理解它只需抓住三个概念:镜像(image)是只读模板,容器(container)是镜像的运行实例,仓库(registry)存放镜像。下面按使用场景整理常用命令。

镜像

docker pull nginx:1.27-alpine     # 拉取镜像(带具体 tag,别用 latest)
docker images                     # 列出本地镜像
docker build -t myapp:1.0 .       # 用当前目录 Dockerfile 构建
docker rmi myapp:1.0              # 删除镜像
docker image prune -f             # 清理悬空(dangling)镜像

经验:生产镜像永远打具体 tag(如 commit sha 或版本号),不要依赖 latest——否则「构建的、推送的、部署的」可能不是同一个产物。

容器

docker run -d --name web -p 8080:80 nginx   # 后台运行并映射端口
docker ps            # 运行中的容器;加 -a 看全部(含已退出)
docker logs -f web   # 跟随查看日志
docker exec -it web sh   # 进入容器排查
docker stop web && docker rm web   # 停止并删除

-d 后台、-it 交互、-p 宿主:容器 端口映射、--name 起名——这四个参数覆盖了日常九成场景。

数据卷与网络

容器是「用完即弃」的,有状态数据必须放卷,否则删容器即丢:

docker volume create pgdata
docker run -d -v pgdata:/var/lib/postgresql/data postgres:16

docker network create app-net           # 自建网络,容器间用服务名互通
docker run -d --network app-net --name api myapi

同一自定义网络内,容器可直接用容器名/服务名互相访问(如 apimongo:27017),不必暴露端口到宿主机。

清理(释放磁盘)

docker system df            # 看 Docker 占用了多少磁盘
docker container prune -f   # 删所有已停止容器
docker image prune -af      # 删所有未被使用的镜像(慎用 -a)
docker system prune -af --volumes   # 终极清理:含未用卷(极慎用)

常见坑

  • 端口映射方向别写反-p 8080:80 是「宿主 8080 → 容器 80」,前宿主后容器。
  • 改了代码容器没更新:容器跑的是构建时的镜像,改代码要重新 build 再重启,或用 bind mount 挂源码做开发热重载。
  • 磁盘被吃满:长期不清理,悬空镜像和停止容器会堆积,定期 docker system df + prune

掌握「镜像→容器→卷/网络→清理」这条主线,Docker 的日常使用就基本顺手了。

相关文章

评论 (7)

M

moonlight

请问多个 server_name 复用同一张证书会有坑吗?

F

foglight

受教了,之前一直一知半解

G

GG_Bond

刚好工作里要用,太及时了

H

hellojs

小项目生产用 compose 还是直接上 k8s?感觉 k8s 太重了

M

Mr.Lin

镜像分层讲得透彻

青柠

码住,回头实践一下

T

Tina_w

nginx 配置每次都现查,这篇可以当手册