构建一个有Web Application的container

课程中的例子中是用Flask框架的web app,大致步骤如下。

首先把代码clone下来,执行git clone git@github.com:jleetutorial/dockerapp.git

有Dockerfile如下:

1
2
3
4
5
6
7
FROM python:3.5
RUN pip install Flask==1.0.2
RUN useradd -ms /bin/bash admin
USER admin
WORKDIR /app
COPY app /app
CMD ["python", "app.py"]

app\app.py,一个Flask的web app如下:

1
2
3
4
5
6
7
8
9
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
return 'Hello, World!'

if __name__ == '__main__':
app.run(host='0.0.0.0')

app.py的上层目录执行docker build -t dockerapp:v0.1 .,构建一个docker image.

执行docker images来查询本机上所有的docker image,可以发现dockerapp已经在列表中了。

1
2
3
rx:dockerapp reed$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerapp v0.1 1661743950e7 About a minute ago 700MB

运行一个dockerapp的container,-d表示在后台运行,-p表示端口映射,执行结果返回container ID。

1
2
rx:app reed$ docker run -d -p 5000:5000 1661743950e7
2312dc563731677c5b127628df2312889bd8d9b3104560d56154a0c0498f13c0

然后可以用docker ps来查询运行中的container列表。

1
2
3
rx:app reed$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2312dc563731 1661743950e7 "python app.py" 2 minutes ago Up 2 minutes 0.0.0.0:5000->5000/tcp dreamy_torvalds

打开本机浏览器访问http://localhost:5000/,即可看到web app已经在运行,并显示Hello, World!

进入后台中运行的container(interactive模式)并执行一些命令

1
2
3
4
5
6
7
8
9
rx:app reed$ docker exec -it 2312dc563731 bash
admin@f5f0334b04a0:/app$ pwd
/app
admin@f5f0334b04a0:/app$ cd /home/admin/
admin@f5f0334b04a0:~$ ps axu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
admin 1 0.0 1.2 252100 25340 ? Ss 11:49 0:00 python app.py
admin 9 0.1 0.1 21956 3676 pts/0 Ss 11:54 0:00 bash
admin 16 0.0 0.1 19188 2380 pts/0 R+ 11:54 0:00 ps axu

学到这里感觉docker应用很广啊,至少在配置自动化测试环境上应该很好使。