docker_note_5__完整的例子

18.一个完整的例子

  1. 例子主要完成自己镜像的制作,端口映射,Dockerfile文件编写,镜像上传DockerHub完成镜像的分享。
    首先选择一个合适的目录:
    /root/docker/hello
  2. 首先创建Dockerfile:里面定义了我们构建镜像的指令步骤。具体定义如下:
    #一个基础的python运行环境
    FROM python
    #设置工作目录
    WORKDIR /app
    #将当前系统文件夹内容复制到容器的app目录
    ADD . /app
    #安装必要的依赖包
    RUN pip install -r softwares.txt
    #开放端口,供容器外访问
    EXPOSE 80
    #定义环境变量
    ENV NAME Hello_docker
    #运行命令
    CMD ["python","app.py"]
    

在Dockerfile中定义了我们要在容器中运行pip install命令安装软件,软件定义在softwares.txt中,要使用python命
令运行app.py文件,因此这两个文件需要我们定义
softwares.txt文件定义内容

	Flask
	Redis

app.py文件内容

from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
	try:
		visits = redis.incr("counter")
	except RedisError:
		visits = "<i>cannot connect to Redis, counter disabled</i>" 
		html = "<h3>Hello {name}!</h3>" \
		"<b>Hostname:</b> {hostname}<br/>" \
		"<b>Visits:</b> {visits}"
	return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
	app.run(host='0.0.0.0', port=80)

3.使用docker buil构建镜像
docker build -t hello .
运行完成之后
使用docker images查看
查看/app目录有Dockerfile、app.py、softwares.txt三个文件
使用-p映射宿主机端口9876,启动容器hello
docker run -p 9876:80 hello
网页访问,这里配置了hosts文件,hadoop2对应的机器ip如下:
由于没有启动redis,很明显app.py文件中抛出了不能够连接到redis中。这个地方出来使用浏览器验证,也可以使用
curl http://hadoop2:9876来验证
这个地方我们没有配置redis,那我们就来配置下redis吧

首先使用``docker search redis``
国内网速较慢,选择红框中的镜像,下载要快些。
启动docker
启动redis容器
`docker run --name redis -d redis`
使用`sudo docker inspect -f "{{.State.Pid}}" `找到redis容器对应的进程id
使用`nsenter --target 23348 --mount --uts --ipc --net --pid` or `nsenter --target 23348`进入这个守护进程
在根目录下有run.sh脚本
chmod 700 run.sh赋予运行权限
执行./run.sh
redis启动起来了
我们再启动一个容器,运行我们的hello镜像
docker run -d --name hello --link redis:redis -p 9876:80 hello
通过nsenter工具进入这个容器中,修改app目录下的app.py文件。将
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)改为:
redis = Redis(host="redis", db=0, socket_connect_timeout=2,
socket_timeout=2,password='QOiTIvQ4ST2NVZHiT97wXme2OrV2xmka')
保存退出容器,重启docker restart hello容器

现在浏览器中访问:hadoop2:9876
刷新浏览器可以看到redis中记录的访问数在增加了。

实际结果不乐观,redis没有办法使用,实际上找不到run.sh脚本,可能是redis实际上没有成功开启的原因,不再排查
因为步数redis不是我的主要任务,我的主要任务是部署hadoop和spark集群。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值