构建一个有Web Application的container
课程中的例子中是用Flask框架的web app,大致步骤如下。
首先把代码clone下来,执行git clone git@github.com:jleetutorial/dockerapp.git
有Dockerfile如下:
dockerfile
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"]
```text
有`app\app.py`,一个Flask的web app如下:
```properties
fromflaskimportFlask
app = Flask(__name__)
@app.route('/')
defhello_world():
return'Hello, World!'
if__name__ =='__main__':
app.run(host='0.0.0.0')
```text
在`app.py`的上层目录执行`docker build -t dockerapp:v0.1 .`,构建一个docker image.
执行`docker images`来查询本机上所有的docker image,可以发现dockerapp已经在列表中了。
```text
rx:dockerapp reed$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
dockerapp v0.1 1661743950e7 About a minute ago 700MB
```text
运行一个dockerapp的container,`-d`表示在后台运行,`-p`表示端口映射,执行结果返回container ID。
```text
rx:app reed$ docker run -d -p 5000:5000 1661743950e7
2312dc563731677c5b127628df2312889bd8d9b3104560d56154a0c0498f13c0
```text
然后可以用`docker ps`来查询运行中的container列表。
```bash
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
```text
打开本机浏览器访问`http://localhost:5000/`,即可看到web app已经在运行,并显示`Hello, World!`。
进入后台中运行的container(interactive模式)并执行一些命令
```text
rx:app reed$ dockerexec-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应用很广啊,至少在配置自动化测试环境上应该很好使。