news 2026/6/20 23:10:12

Docker基础 - 一个web应用实例

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker基础 - 一个web应用实例

通过上文我们已经基本了解了docker的结构(仓库,镜像,容器)以及跑docker应用了;本文将通过介绍一个web应用:向你展示如何进行主机与web容器之间的通信,这是web开发者常用的;第二,贯穿上文中内容, 且为我们后续讲解网络提供基础。

一个web 应用运行和访问

# 运行一个 web 应用

我们只需要找一个webapp的镜像即可,无需自己再写个程序啥的。接下来让我们尝试使用 docker 构建一个 web 应用程序。

这里找了一个training/webapp,它是将在docker容器中运行一个 Python Flask web应用。

[root@pdai ~]# docker pull training/webapp Using default tag: latest latest: Pulling from training/webapp Image docker.io/training/webapp:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/ e190868d63f8: Pull complete 909cd34c6fd7: Pull complete 0b9bfabab7c1: Pull complete a3ed95caeb02: Pull complete 10bbbc0fc0ff: Pull complete fca59b508e9f: Pull complete e7ae2541b15b: Pull complete 9dd97ef58ce9: Pull complete a4c1b0cb7af7: Pull complete Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d Status: Downloaded newer image for training/webapp:latest docker.io/training/webapp:latest [root@pdai ~]# docker images | grep webapp training/webapp latest 6fae60ef3446 4 years ago 349MB

紧接着,我们启动这个webapp

[root@pdai ~]# docker run -d -P training/webapp python app.py ec3eb9ae218494d5aa5902c1ca4435733567b5e81319f02e5d2509d45cbc25da [root@pdai ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ec3eb9ae2184 training/webapp "python app.py" 18 seconds ago Up 17 seconds 0.0.0.0:32768->5000/tcp gifted_agnesi

参数说明:

  • -d:让容器在后台运行。
  • -P:将容器内部使用的网络端口映射到我们使用的主机上。

# 访问webapp

我们注意看上述PORTS部分为0.0.0.0:32769->5000/tcp

Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。

  • 从主机上看,它应该暴露了端口32768

所以我们来验证下:

[root@pdai ~]# netstat | grep 32768 [root@pdai ~]# netstat -nltp | grep 32768 tcp6 0 0 :::32768 :::* LISTEN 2227/docker-proxy [root@pdai ~]# curl localhost:32768 Hello world!

这意味着,你浏览器你可以输入localhost:32768访问这个页面。

  • 从容器内部看,它应该有一个端口5000

我们再进容器验证下:

[root@pdai ~]# docker exec -it ec3eb9ae2184 /bin/bash root@ec3eb9ae2184:/opt/webapp# netstat -nltp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:5000 0.0.0.0:* LISTEN 1/python

所以我们的理解是对的。

# 设置自定义映射端口

我们发现,通过-P参数映射到主机上的端口是随机,能否自定义端口呢?

我们可以通过 -p 参数来设置不一样的端口;为了对比,我们再起一个容器实例:

[root@pdai ~]# docker run -d -p 5001:5000 training/webapp python app.py 5da3588d5bc43a9ed3aa61fb87f98220c9719d2879b616404d443aaae6cee77a [root@pdai ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5da3588d5bc4 training/webapp "python app.py" 33 seconds ago Up 31 seconds 0.0.0.0:5001->5000/tcp hopeful_bardeen ec3eb9ae2184 training/webapp "python app.py" 22 minutes ago Up 22 minutes 0.0.0.0:32768->5000/tcp gifted_agnesi [root@pdai ~]# netstat -nltp | grep 5001 tcp6 0 0 :::5001 :::* LISTEN 2591/docker-proxy [root@pdai ~]# curl localhost:5001 Hello world!

所以你看到跑了两个内部端口都是5000的web实例,新的容器内部的 5000 端口映射到我们本地主机的 5001 端口上。

# 其它常用功能

# 查看web 应用网络端口

通过 docker ps 命令可以查看到容器的端口映射,docker 还提供了另一个快捷方式 docker port,使用 docker port 可以查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号。

上面我们创建的 web 应用容器 ID 为 5da3588d5bc4 名字为 hopeful_bardeen。

我可以这样查看容器端口的映射情况:

[root@pdai ~]# docker port 5da3588d5bc4 5000/tcp -> 0.0.0.0:5001 [root@pdai ~]# docker port hopeful_bardeen 5000/tcp -> 0.0.0.0:5001

# 查看 WEB 应用程序日志

docker logs [ID或者名字] 可以查看容器内部的标准输出。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 23:08:26

FaceFusion 3.6.0:从零开始掌握人脸融合的3个关键步骤

FaceFusion 3.6.0:从零开始掌握人脸融合的3个关键步骤 【免费下载链接】facefusion Industry leading face manipulation platform 项目地址: https://gitcode.com/GitHub_Trending/fa/facefusion 想要将一张脸完美融合到另一张脸上,创造出自然逼…

作者头像 李华
网站建设 2026/6/20 23:06:17

ksnip终极指南:5分钟掌握这款强大的跨平台截图工具

ksnip终极指南:5分钟掌握这款强大的跨平台截图工具 【免费下载链接】ksnip ksnip the cross-platform screenshot and annotation tool 项目地址: https://gitcode.com/gh_mirrors/ks/ksnip 你是否厌倦了系统自带的简陋截图工具?想要一款功能强大…

作者头像 李华
网站建设 2026/6/20 22:59:59

VisualCppRedist AIO:5分钟解决Windows运行库问题的完整指南

VisualCppRedist AIO:5分钟解决Windows运行库问题的完整指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 当您在Windows系统中遇到"缺少MSVC…

作者头像 李华
网站建设 2026/6/20 22:54:13

Gemini 3.2本地API调用实战:构建可审计的多模态AI工作流

1. 项目概述:这不是“升级浏览器插件”,而是重建本地AI工作流的信任链“Gemini 最新版升级 教程 :一键更新无捆绑,解锁超强多模态能力”——这个标题里藏着三个被绝大多数人忽略的关键信号:“最新版”不是指Chrome浏览…

作者头像 李华
网站建设 2026/6/20 22:52:32

从0到1部署E2B Cloud基础设施:gh_mirrors/infra4/infra新手入门指南

从0到1部署E2B Cloud基础设施:gh_mirrors/infra4/infra新手入门指南 【免费下载链接】infra Infrastructure thats powering E2B Cloud. 项目地址: https://gitcode.com/gh_mirrors/infra4/infra 想要构建自己的AI代码执行云平台吗?E2B Cloud基础…

作者头像 李华
网站建设 2026/6/20 22:48:32

DeepSeek V4代码生成实战:Prompt工程与生产级落地方法论

1. 不是“能不能写代码”,而是“在什么场景下它比人更稳”最近两周,我用 DeepSeek V4 在三个真实项目里替换了原本由我手动完成的编码环节:一个 Vue3 组件库的响应式逻辑重构、一段 Python 数据清洗脚本的批量生成、以及一个嵌入式 STM32 HAL…

作者头像 李华