当前位置: 首页 > news >正文

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或者名字] 可以查看容器内部的标准输出。

http://www.jsqmd.com/news/1051252/

相关文章:

  • OpenWRT终极指南:iStore软件中心3大核心问题完整解决方案
  • 2026 淘宝代运营服务商实力排名|中小商家实测靠谱机构测评 - 羊城派
  • 20252821 2025-2026-2 《网络攻防实践》课程总结
  • 有向空间网络模型与兴趣聚类系数研究
  • 电瓶车托运怎么打包不伤车 2026防护技巧必看 - 快递物流资讯
  • 抖店一件代发上货软件哪个好用?抖掌柜功能实测 - 抖掌柜
  • 飞利浦 Hue 推首款有线墙壁模块,多款新品升级功能并拓展生态
  • PCL2启动器Java环境配置终极指南:3步解决所有兼容性问题
  • 终极指南:HunterPie 5分钟快速部署教程与核心功能解析
  • 三阶突破:MOVA-720p如何终结AI视频“静音时代“
  • ksnip终极指南:5分钟掌握这款强大的跨平台截图工具
  • 揭秘PartPacker核心技术:Dual Volume Packing如何实现零件级3D生成突破
  • Audiveris如何让纸质乐谱在MuseScore中重获新生:一场音乐数字化的奇妙旅程
  • Proof General:你的形式化证明智能助手,让数学验证更简单!
  • 嵌入式开发实战:ELF链接器命令文件(LCF)内存布局与优化
  • Windows 11优化终极指南:如何用Win11Debloat免费提升系统性能51%
  • 如何扩展LIRE:自定义图像特征提取器的开发指南 [特殊字符]
  • 湖南二战寄宿考研集训营怎么选?实地现场测评:正规高性价比首选长沙博闻考研 - 长沙考研集训营
  • 终极Kubernetes证书监控工具:x509-certificate-exporter核心功能解析
  • 恒丰工业城/阳光花园/润科华府桶装水送水电话多少 - 资讯速览
  • 报考合肥高科经济技工学校需要多少分?录取门槛一览 - 教育为先
  • IAM系统测试实战:从单元测试到压力测试的完整指南
  • SEGGER emWin下拉框与编辑框控件实战:从核心API到工业HMI应用
  • 工业盾牌:06 安全品牌大乱斗:Pilz、Sick、西门子、汇川谁更靠谱?
  • 嵌入式GUI开发实战:emWin中MULTIEDIT与MULTIPAGE控件的深度解析与应用
  • RxJavaSample项目入门指南:Android响应式编程的完美起点
  • 如何快速上手dhcp:5分钟构建你的第一个DHCP客户端
  • 鹤州豪庭/鹤州新村桶装水送水电话多少 - 资讯速览
  • 2026佛山市禅城区防水补漏维修公司排行榜|卫生间漏水检测、免砸砖防水、屋顶外墙漏水修缮 - 佛山臻至防水补漏
  • 利用Microchip PRG外设实现硬件级三角波生成与VCO控制