一、实验环境
1、宿主机OS:Win10 64位
2 、虚拟机OS:Ubuntu18.04 64位 虚拟机名称:Ubuntu18VM1 虚拟机IP:192.168.8.25
3、账号:docker
二、简要步骤
1.编写一个dockerfile文件
2.编写外部文件requirements.txt
3.编写一个app.py文件
4.创建镜像
5.查看镜像
6.创建并运行容器
7.从浏览器里查看
三、详细步骤
1、建立一个docker的工作文件夹dokerspace,进入这个文件夹,编写dockerfile
$vi Dockerfile
文件Dockerfile内容:
FROM python:3.5
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
EXPOSE 80
ENV NAME World
CMD ["python","app.py"]
2、编写外部文件requirements.txt
Flask
Redis
3、编写app.py,3、这里app.py是一个简单的Python应用文件内容:
from flask import Flask
from redis import Redis,RedisError
import os
import socket
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 disababled</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)
4、创建镜像
$docker build -t hellodocker .
其中,docker build是构建镜像的指令;-t参数指定了生成的镜像的名称为hellodocker;最后的点,表明是当前目录。如果Dockerfile不在此目录,则需要将点替换为
Dockerfile所在的目录。
5、查看镜像
$sudo docker ps
6、创建并启动容器
$sudo docker run -d -p 5000:80 hellodocker
7、从宿主机浏览器里查看
至此,一个简单的基于flask镜像创建的容器已经运行。
四、遇到问题及处理
1、遇到问题:在试验中,能创建镜像,但无法创建并启动容器。
经检查,是app.py文件里存在bug。把此文件放到一个Python的环境里,排查问题,直到能正常解释执行。修正本实验中的app.py后,后续步骤正常进行。