在Docker中运行web应用
启动一个简单的web 应用
使用社区提供的模板,启动一个简单的web应用,熟悉下各种Docker命令的使用:
- # docker run -d -P training/webapp python app.py
- Unable to find image 'training/webapp' locally
- Pulling repository training/webapp
- 31fa814ba25a: Download complete
- 511136ea3c5a: Download complete
- f10ebce2c0e1: Download complete
- 82cdea7ab5b5: Download complete
- 5dbd9cb5a02f: Download complete
- 74fe38d11401: Download complete
- 64523f641a05: Download complete
- 0e2afc9aad6e: Download complete
- e8fc7643ceb1: Download complete
- 733b0e3dbcee: Download complete
- a1feb043c441: Download complete
- e12923494f6a: Download complete
- a15f98c46748: Download complete
- Status: Downloaded newer image for training/webapp:latest
- d00f94a31e8767271f68ab72eab15a8e805c416b0636877f22a31572d10b718d
-d 启动一个daemon并在后台运行
-P 映射一个网络端口
training/webapp docker社区提供的,预先创建好的模板,里面包含一个简单的Python Flask web应用
- # docker ps -l
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- d00f94a31e87 training/webapp:latest "python app.py" 59 seconds ago Up 56 seconds 0.0.0.0:49153->5000/tcp hopeful_lalande
-l 查看详细信息
PORTS显示 0.0.0.0:49153->5000/tcp
意思是将Container中的5000端口,映射到host的49153端口。5000是Python Flask 的默认端口。
也可以使用 -p container-port:host-port 命令来指定映射端口号
- # docker run -d -p 5000:5000 training/webapp python app.py

查看web应用信息
查看名为hopeful_lalande的docker container中,5000端口的映射信息
- # docker port hopeful_lalande 5000
- 0.0.0.0:49153
查看web应用日志
- # docker logs -f hopeful_lalande
- * Running on http://0.0.0.0:5000/
- 192.168.254.1 - - [17/Dec/2014 02:30:32] "GET / HTTP/1.1" 200 -
- 192.168.254.1 - - [17/Dec/2014 02:30:32] "GET /favicon.ico HTTP/1.1" 404 -
- 192.168.254.1 - - [17/Dec/2014 02:30:32] "GET /favicon.ico HTTP/1.1" 404 -
-f 持续查看container日志的标准化输出,类似tail -f
查看进程详细信息
- # docker top hopeful_lalande
- UID PID PPID C STIME TTY TIME CMD
- root 15189 2447 0 10:24 ? 00:00:00 python app.py
查看web应用容器详细信息
- # docker inspect hopeful_lalande
- [{
- "AppArmorProfile": "",
- "Args": [
- "app.py"
- ],
- "Config": {
- "AttachStderr": false,
- "AttachStdin": false,
- "AttachStdout": false,
- "Cmd": [
- "python",
- "app.py"
- ],
- "CpuShares": 0,
- "Cpuset": "",
- "Domainname": "",
- "Entrypoint": null,
- "Env": [
- "HOME=/",
- "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
- ],
- "ExposedPorts": {
- "5000/tcp": {}
- },
- "Hostname": "d00f94a31e87",
- "Image": "training/webapp",
- "Memory": 0,
- "MemorySwap": 0,
- "NetworkDisabled": false,
- "OnBuild": null,
- "OpenStdin": false,
- "PortSpecs": null,
- "StdinOnce": false,
- "Tty": false,
- "User": "",
- "Volumes": null,
- "WorkingDir": "/opt/webapp"
- },
- "Created": "2014-12-17T02:24:09.468631143Z",
- "Driver": "devicemapper",
- "ExecDriver": "native-0.2",
- "HostConfig": {
- "Binds": null,
- "CapAdd": null,
- "CapDrop": null,
- "ContainerIDFile": "",
- "Devices": [],
- "Dns": null,
- "DnsSearch": null,
- "ExtraHosts": null,
- "Links": null,
- "LxcConf": [],
- "NetworkMode": "bridge",
- "PortBindings": {},
- "Privileged": false,
- "PublishAllPorts": true,
- "RestartPolicy": {
- "MaximumRetryCount": 0,
- "Name": ""
- },
- "SecurityOpt": null,
- "VolumesFrom": null
- },
- "HostnamePath": "/var/lib/docker/containers/d00f94a31e8767271f68ab72eab15a8e805c416b0636877f22a31572d10b718d/hostname",
- "HostsPath": "/var/lib/docker/containers/d00f94a31e8767271f68ab72eab15a8e805c416b0636877f22a31572d10b718d/hosts",
- "Id": "d00f94a31e8767271f68ab72eab15a8e805c416b0636877f22a31572d10b718d",
- "Image": "31fa814ba25ae3426f8710df7a48d567d4022527ef2c14964bb8bc45e653417c",
- "MountLabel": "",
- "Name": "/hopeful_lalande",
- "NetworkSettings": {
- "Bridge": "docker0",
- "Gateway": "172.17.42.1",
- "IPAddress": "172.17.0.8",
- "IPPrefixLen": 16,
- "MacAddress": "02:42:ac:11:00:08",
- "PortMapping": null,
- "Ports": {
- "5000/tcp": [
- {
- "HostIp": "0.0.0.0",
- "HostPort": "49153"
- }
- ]
- }
- },
- "Path": "python",
- "ProcessLabel": "",
- "ResolvConfPath": "/var/lib/docker/containers/d00f94a31e8767271f68ab72eab15a8e805c416b0636877f22a31572d10b718d/resolv.conf",
- "State": {
- "ExitCode": 0,
- "FinishedAt": "0001-01-01T00:00:00Z",
- "Paused": false,
- "Pid": 15189,
- "Restarting": false,
- "Running": true,
- "StartedAt": "2014-12-17T02:24:11.279426855Z"
- },
- "Volumes": {},
- "VolumesRW": {}
- }
- ]
输出一个JSON格式的Docker container配置和状态。
也可以通过指定名称,获取某项信息值,如下:
- # docker inspect -f '{{ .NetworkSettings.IPAddress }}' hopeful_lalande
- 172.17.0.8
停止Web应用
- # docker stop hopeful_lalande
- hopeful_lalande
停止后,可以使用docker ps -a命令,列出之前所有docker容器
- # docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- d00f94a31e87 training/webapp:latest "python app.py" 21 minutes ago Exited (-1) 43 seconds ago hopeful_lalande
- 7f22b335fb2c fedora:latest "/bin/sh -c 'while t 49 minutes ago Exited (-1) 40 minutes ago silly_archimedes
- 。。。
重启Web应用
- # docker start hopeful_lalande
- hopeful_lalande
删除Web应用
- # docker rm hopeful_lalande
- Error response from daemon: You cannot remove a running container. Stop the container before attempting removal or use -f
- 2014/12/17 10:49:32 Error: failed to remove one or more containers
提示无法删除一个正在运行的container。
停止该container后,重新执行上条命令,成功删除container
在Docker中运行web应用的更多相关文章
- 在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...
- .NET Core Web 应用部署到 Docker 中运行
环境介绍 : 虚拟机:VirtualBox 5.1.6 系 统:Ubuntu 16.04.1 LTS 系统准备完成后可以使用 sudo apt-get udpate 和 sudo apt-get up ...
- docker中运行ASP.NET Core Web API
在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过 ...
- 如何让传统ASP.NET网站在Docker中运行
本文主要描述如何让传统ASP.NET网站在Docker中运行,侧重Docker image 搭建. 使用条件: Docker for windows 用户切换到Windows 容器模式 Windows ...
- 在Docker中运行gocd
gocd是一个持续集成的工具,可视化效果非常好 运行gocd-server 12345 docker run -d --name server -p8153:8153 -p8154:8154 -v / ...
- k3d入门指南:在Docker中运行K3s
在本文中,我们将简单了解k3d,这是一款可让您在安装了Docker的任何地方运行一次性Kubernetes集群的工具,此外在本文中我们还将探讨在使用k3d中可能会出现的一切问题. 什么是k3d? k3 ...
- 在Docker中运行torch版的neural style
相关的代码都在Github上,请参见我的Github,https://github.com/lijingpeng/deep-learning-notes 敬请多多关注哈~~~ 在Docker中运行to ...
- ASP.NET Core 网站在Docker中运行
Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...
- 在Eclipse中运行Web项目Jsp网页时提示端口被占用的解决办法:Several ports (8005, 8888, 8009) required by Tomcat v9.0 Server at localhost are already in use.
问题: 在Eclipse中运行Web项目Jsp网页启动Tomcat时提示端口被占用: Several ports (8005, 8080, 8009) required by Tomcat v9.0 ...
随机推荐
- ShareDrop – 苹果 AirDrop 服务的 HTML5 实现
ShareDrop 是苹果 AirDrop 服务的 HTML5 版本,你可以直接在设备之间传输文件,而无需先上传到任何服务器.它使用 WebRTC 来实现安全的点对点文件传输.目前 ShareDrop ...
- 用js动态生成css代码
有时候我们需要利用js来动态生成页面上style标签中的css代码,方法很直接,就是直接创建一个style元素,然后设置style元素里面的css代码,最后把它插入到head元素中.但有些兼容性问题我 ...
- 微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决
今天偶然的把微信jssdk的debug打开后,发现调试信息总是提示签名错误,感情前两天api的"偶尔"不生效,不是因为还没执行代码,而是因为签名没正确啊!,这就是个100%可以重现 ...
- 关于JS堆栈与拷贝
1.栈(stack)和堆(heap) stack为自动分配的内存空间,它由系统自动释放:而heap则是动态分配的内存,大小不定也不会自动释放. 2.基本类型和引用类型 基本类型:存放在栈内存中的简单数 ...
- Python十六进制与字符串的转换
电脑上装了Python2.7和3.3两个版本,平时运行程序包括在Eclipse里面调试都会使用2.7,但是由于某些原因在cmd命令行中输入python得到的解释器则是3.3, 一直没对此做处理,因为这 ...
- 图解六大UML类图关系
在学习UML类图的过程中,UML类图关系是必须要掌握的问题,UML定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合.下面对其定义和表示方法逐一说明. UML类图关系简介 依赖(Dependen ...
- Facebook开源动画库 POP-POPDecayAnimation运用
关于POPDecayAnimation的介绍先引用别人写的一些内容,基本上把它的一些注意点都说明了: Decay Animation 就是 POP 提供的另外一个非常特别的动画,他实现了一个衰减的效果 ...
- 转大写字母-(ASCII表)
#include<stdio.h> /* 转大写,ASCII表.大写与小写相差32 */ char upper(char c) { if(c>='a'&&c<= ...
- ios必须知道的事情
一. 学前提醒 其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言 iOS开发需要学习的主要程序设计语言有:C语言.C++.Objective-C,其中C ...
- 转:JS获取浏览器高度和宽度
发现一篇好文章,汇总到自己的网站上. IE中: document.body.clientWidth ==> BODY对象宽度 document.body.clientHeight ==> ...