python的web是用什么容器_初识docker—创建WEB应用容器1python+flask

-P:将容器内部使用的网络端口映射到我们使用的主机上。

自我练习

[root@CentOS1611 multi-user.target.wants]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

[root@CentOS1611 multi-user.target.wants]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

hello-world latest 05a3bd381fc2 5 weeks ago 1.84kB

[root@CentOS1611 multi-user.target.wants]# docker run -d -P training/webapp python app.py

Unable to find image 'training/webapp:latest' locally

latest: Pulling from training/webapp

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

e318b989ecc3917d14c834c2e80c26046c1c64bd92522b365185652eca265438

[root@CentOS1611 multi-user.target.wants]#

查看WEB应用容器

使用docker ps来查看我们正在运行的容器

runoob@runoob:~$ docker ps

这里多了端口信息。

PORTS

0.0.0.0:32769->5000/tcp

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

这时我们可以通过浏览器访问WEB应用

我们也可以指定-p标识来绑定指定端口。

runoob@runoob:~$ docker run -d -p 5000:5000training/webapp python app.py

docker ps查看正在运行的容器

容器内部的5000端口映射到我们本地主机的5000端口上。

自我练习

[root@CentOS1611 multi-user.target.wants]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

e318b989ecc3 training/webapp "python app.py" 5 minutes ago Up 5 minutes 0.0.0.0:32768->5000/tcp determined_poitras

[root@CentOS1611 multi-user.target.wants]#

此时我们需要知道这个容器的IP和端口号,从上图可以知道端口号是32768.

想知道网络信息,可以使用Inspect和network ls查看。看是否是与宿主机是一个IP

也可以用命令查看详情

[root@CentOS1611 multi-user.target.wants]# docker inspect e318b989

[

{

"Id": "e318b989ecc3917d14c834c2e80c26046c1c64bd92522b365185652eca265438",

"Created": "2017-10-19T09:37:11.706960417Z",

"Path": "python",

"Args": [

"app.py"

],

"State": {

"Status": "running",

"Running": true,

"Paused": false,

"Restarting": false,

"OOMKilled": false,

"Dead": false,

"Pid": 8408,

"ExitCode": 0,

"Error": "",

"StartedAt": "2017-10-19T09:37:11.923778391Z",

"FinishedAt": "0001-01-01T00:00:00Z"

},

"Image": "sha256:6fae60ef344644649a39240b94d73b8ba9c67f898ede85cf8e947a887b3e6557",

"ResolvConfPath": "/var/lib/docker/containers/e318b989ecc3917d14c834c2e80c26046c1c64bd92522b365185652eca265438/resolv.conf",

"HostnamePath": "/var/lib/docker/containers/e318b989ecc3917d14c834c2e80c26046c1c64bd92522b365185652eca265438/hostname",

"HostsPath": "/var/lib/docker/containers/e318b989ecc3917d14c834c2e80c26046c1c64bd92522b365185652eca265438/hosts",

"LogPath": "/var/lib/docker/containers/e318b989ecc3917d14c834c2e80c26046c1c64bd92522b365185652eca265438/e318b989ecc3917d14c834c2e80c26046c1c64bd92522b365185652eca265438-json.log",

"Name": "/determined_poitras",

"RestartCount": 0,

"Driver": "overlay",

"MountLabel": "",

"ProcessLabel": "",

"AppArmorProfile": "",

"ExecIDs": null,

"HostConfig": {

"Binds": null,

"ContainerIDFile": "",

"LogConfig": {

"Type": "json-file",

"Config": {}

},

"NetworkMode": "default",

"PortBindings": {},

"RestartPolicy": {

"Name": "no",

"MaximumRetryCount": 0

},

"AutoRemove": false,

"VolumeDriver": "",

"VolumesFrom": null,

"CapAdd": null,

"CapDrop": null,

"Dns": [],

"DnsOptions": [],

"DnsSearch": [],

"ExtraHosts": null,

"GroupAdd": null,

"IpcMode": "",

"Cgroup": "",

"Links": null,

"OomScoreAdj": 0,

"PidMode": "",

"Privileged": false,

"PublishAllPorts": true,

"ReadonlyRootfs": false,

"SecurityOpt": null,

"UTSMode": "",

"UsernsMode": "",

"ShmSize": 67108864,

"Runtime": "runc",

"ConsoleSize": [

0,

0

],

"Isolation": "",

"CpuShares": 0,

"Memory": 0,

"NanoCpus": 0,

"CgroupParent": "",

"BlkioWeight": 0,

"BlkioWeightDevice": null,

"BlkioDeviceReadBps": null,

"BlkioDeviceWriteBps": null,

"BlkioDeviceReadIOps": null,

"BlkioDeviceWriteIOps": null,

"CpuPeriod": 0,

"CpuQuota": 0,

"CpuRealtimePeriod": 0,

"CpuRealtimeRuntime": 0,

"CpusetCpus": "",

"CpusetMems": "",

"Devices": [],

"DeviceCgroupRules": null,

"DiskQuota": 0,

"KernelMemory": 0,

"MemoryReservation": 0,

"MemorySwap": 0,

"MemorySwappiness": -1,

"OomKillDisable": false,

"PidsLimit": 0,

"Ulimits": null,

"CpuCount": 0,

"CpuPercent": 0,

"IOMaximumIOps": 0,

"IOMaximumBandwidth": 0

},

"GraphDriver": {

"Data": {

"LowerDir": "/var/lib/docker/overlay/486c8e9e565be0450b7af95e3ee4e64f3175864e812b3963bd82d0674362e72d/root",

"MergedDir": "/var/lib/docker/overlay/eb9d82883cf23ee5f87943ff645256abb0f69f6333a6e07ae3f2d1bc20f19c36/merged",

"UpperDir": "/var/lib/docker/overlay/eb9d82883cf23ee5f87943ff645256abb0f69f6333a6e07ae3f2d1bc20f19c36/upper",

"WorkDir": "/var/lib/docker/overlay/eb9d82883cf23ee5f87943ff645256abb0f69f6333a6e07ae3f2d1bc20f19c36/work"

},

"Name": "overlay"

},

"Mounts": [],

"Config": {

"Hostname": "e318b989ecc3",

"Domainname": "",

"User": "",

"AttachStdin": false,

"AttachStdout": false,

"AttachStderr": false,

"ExposedPorts": {

"5000/tcp": {}

},

"Tty": false,

"OpenStdin": false,

"StdinOnce": false,

"Env": [

"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

],

"Cmd": [

"python",

"app.py"

],

"Image": "training/webapp",

"Volumes": null,

"WorkingDir": "/opt/webapp",

"Entrypoint": null,

"OnBuild": null,

"Labels": {}

},

"NetworkSettings": {

"Bridge": "",

"SandboxID": "d11c77eff37a27d80323d2c95b2c59b2a4a472d3ae908095302dc8c1e2478c4f",

"HairpinMode": false,

"LinkLocalIPv6Address": "",

"LinkLocalIPv6PrefixLen": 0,

"Ports": {

"5000/tcp": [

{

"HostIp": "0.0.0.0",

"HostPort": "32768"

}

]

},

"SandboxKey": "/var/run/docker/netns/d11c77eff37a",

"SecondaryIPAddresses": null,

"SecondaryIPv6Addresses": null,

"EndpointID": "46c8c004298140857b84a51b0a3aa146030e176132aa40ea2c71c6c05fe1edcb",

"Gateway": "172.17.0.1",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"IPAddress": "172.17.0.2",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"MacAddress": "02:42:ac:11:00:02",

"Networks": {

"bridge": {

"IPAMConfig": null,

"Links": null,

"Aliases": null,

"NetworkID": "b9e1d951899da3c16ba5dc6686b54e85c9c49842c3c23d5e3573c1f196b625a7",

"EndpointID": "46c8c004298140857b84a51b0a3aa146030e176132aa40ea2c71c6c05fe1edcb",

"Gateway": "172.17.0.1",

"IPAddress": "172.17.0.2",

"IPPrefixLen": 16,

"IPv6Gateway": "",

"GlobalIPv6Address": "",

"GlobalIPv6PrefixLen": 0,

"MacAddress": "02:42:ac:11:00:02",

"DriverOpts": null

}

}

}

}

]

[root@CentOS1611 multi-user.target.wants]#

[root@CentOS1611 multi-user.target.wants]# docker network ls

NETWORK ID NAME DRIVER SCOPE

b9e1d951899d bridge bridge local

7577a140f2d2 host host local

d4edaa484e93 none null local

由此可以采用桥连接,与宿主机是一个IP,连接验证如下

网络端口的快捷方式

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

上面我们创建的web应用容器ID为:7a38a1ad55c6名字为:determined_swanson

我可以使用docker port 7a38a1ad55c6或docker port determined_swanson来查看容器端口的映射情况

runoob@runoob:~$ docker port 7a38a1ad55c6

5000/tcp ->0.0.0.0:5000

runoob@runoob:~$ docker port determined_swanson

5000/tcp ->0.0.0.0:5000

查看WEB应用程序日志

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

runoob@runoob:~$ docker logs -f 7a38a1ad55c6

*Runningon http://0.0.0.0:5000/ (Press CTRL+C to quit)

192.168.239.1--[09/May/201616:30:37]"GET / HTTP/1.1"200-

192.168.239.1--[09/May/201616:30:37]"GET /favicon.ico HTTP/1.1"404-

-f:表示实时输出。让dokcer logs像使用tail -f一样来输出容器内部的标准输出。(补充:tail –f的意思是什么?tail 命令从指定点开始将文件写到标准输出.使用tail命令的-f选项可以方便的查阅正在改变的日志文件,tail -f filename会把filename里最尾部的内容显示在屏幕上,并且不但刷新,使你看到最新的文件内容.用于显示指定文件末尾内容,不指定文件时,作为输入信息进行处理。常用查看日志文件。)

从上面,我们可以看到应用程序使用的是5000端口并且能够查看到应用程序的访问日志。

自我练习

宿主机是10.24.11.52,

查看WEB应用程序日志,下面显示的10.24.12.109是刚才访问过这个应用程序的IP地址。

[root@CentOS1611 /]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

e318b989ecc3 training/webapp "python app.py" 23 minutes ago Up 23 minutes 0.0.0.0:32768->5000/tcp determined_poitras

[root@CentOS1611 /]# docker logs -f e318b989ecc3

* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

10.24.12.109 - - [19/Oct/2017 09:56:37] "GET / HTTP/1.1" 200 -

10.24.12.109 - - [19/Oct/2017 09:56:37] "GET /favicon.ico HTTP/1.1" 404 -

10.24.12.109 - - [19/Oct/2017 09:57:14] "GET / HTTP/1.1" 200 -

10.24.12.109 - - [19/Oct/2017 09:57:15] "GET /favicon.ico HTTP/1.1" 404 -

[root@CentOS1611 /]#

查看WEB应用程序容器的进程

我们还可以使用docker top来查看容器内部运行的进程

runoob@runoob:~$ docker top determined_swanson

检查WEB应用程序

使用docker inspect来查看Docker的底层信息。它会返回一个JSON文件记录着Docker容器的配置和状态信息。

runoob@runoob:~$ docker inspect determined_swanson

[

{

"Id":"7a38a1ad55c6914b360b565819604733db751d86afd2575236a70a2519527361",

"Created":"2016-05-09T16:20:45.427996598Z",

"Path":"python",

"Args":[

"app.py"

],

"State":{

"Status":"running",

......

停止WEB应用容器

runoob@runoob:~$ docker stop determined_swanson

determined_swanson

重启WEB应用容器

已经停止的容器,我们可以使用命令docker start来启动。

runoob@runoob:~$ docker start determined_swanson

determined_swanson

docker ps -l查询最后一次创建的容器:

正在运行的容器,我们可以使用docker restart命令来重启

移除WEB应用容器

我们可以使用docker rm命令来删除不需要的容器

runoob@runoob:~$ docker rm determined_swanson

determined_swanson

删除容器时,容器必须是停止状态,否则会报如下错误

runoob@runoob:~$ docker rm determined_swanson

Errorresponse fromdaemon:Youcannot remove a running container 7a38a1ad55c6914b360b565819604733db751d86afd2575236a70a2519527361.Stopthe container before attempting removal oruse-f

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值