Docker基本基础知识了解



Docker基本基础知识了解

将服务拆散开,以链接、api、转发、负载均衡等方式对外提供,在提供商这里,拆小了业务逻辑,将原先生产一条飞机的难度降低到了生产一颗螺丝钉上去。对于开发者和消费者,微服务提供了更多的可能和更强大的兼容性。

然而,抛开了完整的系统,而转向微服务的我们,该如何保证微服务的稳定和高可用呢?

云计算就像一个池子,服务就像池子里的水,正常情况下,服务从提供商手里流出,保障其基础设施的运转良好。但是当你的池子不够大呢?扩容?是个好办法。但是这需要时间和成本的开销,而且运维反应速度慢和快也是衡量一个公司服务能力的重要标准。因此,在云计算时代,无论企业还是个人,都需要一个轻便,易于部署,快速迁移,快速启动的环境设置技术来支持服务启用、备份、容灾、迁移。

这个技术,就是Docker

 

root@server-zyq9z8tu:/var/run# servicedocker.io status

docker.io start/running, process 2711

An Interactive Container

一个可以交互的容器。我们输入如下命令:

一个是-t ,表示给我们的容器tty,终端。一个是-i 表示可以interactive,可以交互。

我们在之前的命令行已经看到了:

~# docker run -i -t ubuntu:14.04 /bin/bash

通过Exit,退出了Bash,容器也就自动释放了

 

abroot@server-zyq9z8tu:~$ docker ps

2015/08/15 16:18:04 Gethttp:///var/run/docker.sock/v1.12/containers/json: dial unix/var/run/docker.sock: permission denied

abroot@server-zyq9z8tu:~$ sudo –s

 

容器后台运行持续化,守候进程化–d

由于容器在执行完任务后,会退出,给一个循环

root@server-zyq9z8tu:~#  docker run -d ubuntu /bin/sh

2a7a1552c890eb4bd189dc5face034b08f4c633dff3c1095566336ad409db943

root@server-zyq9z8tu:~# docker run -dubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

106f519c896dbd3dfec58230c260d5c5c28b31eb8c87b8a98e045190d6f68bad

 

命令行返回ID,但这个ID一般多是内部使用,就和noVNClxc等类似,用户使用的是Name

这个namecondescending_carson 来自docker ps

CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS               NAMES

106f519c896d        ubuntu:14.04        /bin/sh -c 'while tr   5 seconds ago       Up 4 seconds                            condescending_carson   

 

root@server-zyq9z8tu:~# docker logscondescending_carson

hello world

hello world

hello world

hello world

hello world

hello world

hello world

hello world

 

在后台的容器,如何关闭?想附加上去如何操作?

1\attach,然后Exit/Ctrl+C

root@server-zyq9z8tu:/var/run# docker attach condescending_carson

进入了console输出,然后Ctrl+C

2\stop命令

 

root@server-zyq9z8tu:/var/run# docker stopcondescending_carson

condescending_carson

root@server-zyq9z8tu:/var/run# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

 

进入容器后,外部可操作的其实不多的,类似虚拟化之后只有一个文件:

1. docker ps - Lists containers.  

2. docker logs - Shows us the standard output of a container.  

3. docker stop - Stops running containers. 

发布web应用

Web应用最重要的是port,可http访问,这个就涉及,类似NAT的端口映射

-p, --publish=[]           Publish a container's port to the host

                               format:ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort

                               (use 'dockerport' to see the actual mapping)

 

 

root@server-zyq9z8tu:~# docker run -d -P training/webapppython app.py 

Unable to find image 'training/webapp'locally

Pulling repository training/webapp

02a8815912ca: Pulling dependent layers

02a8815912ca: Pulling image (latest) fromtraining/webapp

e9e06b06e14c: Download complete

a82efea989f9: Download complete

37bea4ee0c81: Download complete

这里要执行的命令是python app.py,我们在容器里面看下app.py的示范代码

 

[c8eb30e5] +job

 allocate_port(a72accf82221d4fb85972b18cf90b00c4c9a059a0059ac0150d5b68597530eaf)

[c8eb30e5] -job

allocate_port(a72accf82221d4fb85972b18cf90b00c4c9a059a0059ac0150d5b68597530eaf) =OK (0)

[c8eb30e5] -job

start(a72accf82221d4fb85972b18cf90b00c4c9a059a0059ac0150d5b68597530eaf)= OK (0)

===

root@server-zyq9z8tu:~# docker ps

CONTAINER ID        IMAGE                    COMMAND             CREATED              STATUS              PORTS                     NAMES

a72accf82221        training/webapp:latest   python app.py       About a minute ago   Up About a minute   0.0.0.0:49153->5000/tcp  nostalgic_blackwell 

-p参数之后,实现了端口的映射:本机49153的内容就会转发到容器nostalgic_blackwell

 

 

尝试了用交互方式启动,可惜还是没想到如何进入container分析下这个py脚本

root@server-zyq9z8tu:~# docker run -t -i -Ptraining/webapp python app.py 

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

 

永远的hello word index.html中!

如果我们期望用本地的固定的端口来映射,请用小写的-p指定端口

-P, --publish-all=false    Publish all exposed ports to the hostinterfaces

-p, --publish=[]           Publish a container's port to thehost

                               format: ip:hostPort:containerPort |ip::containerPort | hostPort:containerPort

                               (use 'dockerport' to see the actual mapping)

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

2. aa47ba8e71c8512f228a96bf80da117b6c86fc03bdb17eef1c2db353a3e18493  

 




还是要一探究竟啊!


root@server-zyq9z8tu:~# docker run -t -itraining/webapp /bin/bash


root@d26086b1b3f0:/opt/webapp# pwd


/opt/webapp


==========================


Vi app.py


==========================


 


import os


 


from flask import Flask


 


app = Flask(__name__)


 


@app.route('/')


def hello():


   provider = str(os.environ.get('PROVIDER', 'world'))


   return 'Hello '+provider+'!'


 


if __name__ == '__main__':


    #Bind to PORT if defined, otherwise default to 5000.


   port = int(os.environ.get('PORT', 5000))


   app.run(host='0.0.0.0', port=port)


~                                                                                                                 


~                                                                                                                 

~              




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值