启动一个简单的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 映射一个网络port

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中的5000port。映射到host的49153port。5000是Python Flask 的默认port。

也能够使用 -p container-port:host-port 命令来指定映射端口号

# docker run -d -p 5000:5000 training/webapp python app.py

查看web应用信息

查看名为hopeful_lalande的docker container中,5000port的映射信息

# 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应用的更多相关文章

  1. Docker中执行Shell出现乱码

    问题描述 最近遇到一个问题: 执行命令 docker exec f4af9b sh -c 'bash /tmp/build.sh' 命令在docker中执行shell,会出现中文乱码的问题.但是在do ...

  2. 在docker中执行linux shell命令

    在docker中执行shell命令,需要在命令前增加sh -c,例如: docker run ubuntu sh -c 'cat /data/a.txt > b.txt' 否则,指令无法被正常解 ...

  3. docker中执行sed: can't move '/etc/resolv.conf73UqmG' to '/etc/resolv.conf': Device or resource busy错误的处理原因及方式

    错误现象 在docker容器中想要修改/etc/resolv.conf中的namesever,使用sed命令进行执行时遇到错误: / # sed -i 's/192.168.1.1/192.168.1 ...

  4. 在Docker中运行web应用

    启动一个简单的web 应用 使用社区提供的模板,启动一个简单的web应用,熟悉下各种Docker命令的使用: # docker run -d -P training/webapp python app ...

  5. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  6. .NET Core Web 应用部署到 Docker 中运行

    环境介绍 : 虚拟机:VirtualBox 5.1.6 系 统:Ubuntu 16.04.1 LTS 系统准备完成后可以使用 sudo apt-get udpate 和 sudo apt-get up ...

  7. docker中运行ASP.NET Core Web API

    在docker中运行ASP.NET Core Web API应用程序 本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过 ...

  8. 通过使用Web Workers,Web应用程序可以在独立于主线程的后台线程中,运行一个脚本操作。这样做的好处是可以在独立线程中执行费时的处理任务,从而允许主线程(通常是UI线程)不会因此被阻塞/放慢。

    Web Workers API - Web API 接口参考 | MDNhttps://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API ...

  9. 让docker中的mysql启动时自动执行sql文件

    本文提要 本文目的不仅仅是创建一个MySQL的镜像,而是在其基础上再实现启动过程中自动导入数据及数据库用户的权限设置,并且在新创建出来的容器里自动启动MySQL服务接受外部连接,主要是通过Docker ...

随机推荐

  1. [BZOJ4898] [Apio2017]商旅

    [BZOJ4898] [Apio2017]商旅 传送门 试题分析 考虑两个点之间的路径,显然如果交易的话肯定选\(S_{t,i}-B_{s,i}\)最大的. 那么我们可以先用\(Cost\)把两个点的 ...

  2. 【后缀自动机】poj1509 Glass Beads

    字符串最小表示 后缀自动机 O(n) 把串复制一次,链接在后面之后,建立SAM,贪心地在SAM上转移,每次贪心地选择最小的字符,转移的长度为n时停止. 输出时由于要最靠前的,所以要在endpos集合中 ...

  3. 【高斯消元】BZOJ1013-[JSOI2008]球形空间产生器sphere

    [题目大意] 给出n维空间中给出n+1个点的坐标,求出球心坐标. [思路] 令球心坐标为x1,x2...xn,假设当前第i个点坐标为a1,a2...,an,第i+1个点坐标为b1,b2...,bn,则 ...

  4. 【动态规划去除冗余】NOIP2010-乌龟棋

    [题目大意] [思路] 最简单的思路是五维数组,但是当前走到的步数由已经取到的卡片决定,所以只需要四维.本来想要改一个滚动数组的,但是好像没有滚起来,算了(ノ`Д)ノ. 在学校要晚自习到21:15,回 ...

  5. vue-router 2.0 改变的内容

    2.x 版本的 vue-router 相比之前的0.7.x版本,有很多破坏性改变: 通用 API 的修改 The old router.go() is now router.push() . 新的 r ...

  6. python笔记13-多线程实战篇(tomorrow)

    安装 1.tomorrow安装,用pip可以直接安装 pip install tomorrow 单线程 1.以下案例是单线程时候跑的情况,在下载图片的时候很耗时. # coding:utf-8 fro ...

  7. SIP消息类型和消息格式

    转自:http://blog.chinaunix.net/uid-1797566-id-2840904.html sip消息类型和消息格式 SIP是一个基于文本的协议,使用的是UTF-8字符集. SI ...

  8. [Linux Memory] 用/proc/stat计算cpu的占用率

    转载自:http://blog.csdn.net/pppjob/article/details/4060336 在Linux下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时 ...

  9. Android疑难杂症之android:configChanges="orientation" 无效

    通常情况下,当“屏幕方向”变化时会销毁并重建当前Activity.而我们有时候并不希望重新创建Activity实例,然后就会在AndroidManifest.xml中配置Activity: <a ...

  10. linux面试题目--1

    Linux面试题目 填空题1. 在Linux系统中,以 (文件)方式访问设备 .2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用i节 ...