Docker快速入门之一个小Demo

目标:

运行docker容器,从容器外访问docker内的应用程序

步骤:

1、安装docker

2、使用docker镜像创建容器:

docker run --name test1 -it --rm -p 127.0.0.1:5010:5011 centos:latest bash
  • docker run:创建容器
  • --name test1:容器名称是test1
  • -it:命令窗口交互。-i 则让容器的标准输入保持打开;-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
  • --rm:容器关闭后就删除容器并删除容器挂载的数据卷
  • -p 127.0.0.1:5010:5011:把容器的5011端口映射到宿主机的ip和端口127.0.0.1:5010上
  • centos:latest:创建容器使用的镜像是最新版本的centos(如果本地没有该镜像,docker会自动从仓库拉取)
  • bash:启动容器后,在容器内启动一个 bash 终端,允许用户进行交互

3、在本地写一个python socket 监听脚本 socket-listen.py:

注意,由于在映射ip的时候并没有指定容器ip,容器中的python应用监听的ip应该是0.0.0.0,而不是127.0.0.1(127.0.0.1 是一个环回地址,并不表示“本机”;0.0.0.0才是真正表示“本网络中的本机” )

#coding=utf-8 
import socket
import threading, time

# 可以使用telnet ip port 来与此python socket通信(因为telnet是应用层的,而socket是传输层的)

print "hello, world"

def tcplink(sock, addr):
print 'Accept new connection from %s:%s...' % addr
sock.send('Welcome!')
while True:
data = sock.recv(1024)
time.sleep(1)
if data == 'exit' or not data:
break
sock.send('Hello, %s!' % data)
sock.close()
print 'Connection from %s:%s closed.' % addr

#创建一个基于IPv4和TCP协议的Socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#监听端口
s.bind(('0.0.0.0', 5011))
#调用listen()方法开始监听端口,传入的参数指定等待连接的最大数量
s.listen(5)
print 'Waiting for connection...'
while True:
# 接受一个新连接:
sock, addr = s.accept()
# 创建新线程来处理TCP连接:
t = threading.Thread(target=tcplink, args=(sock, addr))
t.start()

4、把socket-listen.py 从宿主机cp到容器中:

docker cp ~/Desktop/socket-listen.py test1:/
  • ~/Desktop/socket-listen.py:宿主机中python文件路径
  • test1:/:拷贝到名称为test1的容器的/路径下

5、让docker监听容器的5011端口,通过端口映射,也就是监听宿主机的127.0.0.1:5010:

centos自带python,在容器中直接执行python代码:

python socket-listen.py

6、在宿主机使用telnet测试是否能访问容器中的python应用:

telnet 127.0.0.1 5010

在宿主机可以看到:

doing@doings-MacBook-Air:/usr/local/bin$ telnet 127.0.0.1 5010
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Welcome!

在容器中可以看到:

[root@e6d506e5b5eb /]# python socket-listen.py
hello, world
Waiting for connection...
Accept new connection from 127.0.0.1:46804...

猜你喜欢

转载自blog.csdn.net/LeZhi_126/article/details/82592209