3.8Dockerfile实践

dockerfile 实践

在本节中,我们将一个python web程序制作为一个镜像并部署。当访问该python web程序时,将返回"hello world"

前提条件

主机上安装有Python和flask,若未安装,可通过如下命令安装

$ yum install python
$ yum -y install epel-release
$ yum -y install python-pip
$ pip install flask

步骤

1.新建工作空间flask-hello-world并切换

mkdir flask-hello-world
cd flask-hello-world/

2.新建app.py文件,文件内容如下:

vi app.py
from flask import Flask
app=Flask(__name__)
@app.route('/')
def hello():
    return "hello docker\n"
if __name__ == '__main__':
    app.run()

提示:想要验证app.py能否正常工作可以使用

python app.py

3.新建Dockerfile文件,文件内容如下

vi Dockerfile
FROM python:2.7
LABEL maintainer="moluo<moluo@163.com>"
RUN pip install flask
COPY app.py /app/ 
WORKDIR /app
EXPOSE 5000
CMD ["python","app.py"]

注意:请不要把COPY app.py /app/误写成COPY app.py /app,在该案例中,COPY app.py /app的作用是将app.py重命名为app,而不是拷贝文件

4.编译镜像

docker build -t moluo/flask-hello-world .

提示:docker在编译镜像过程中,会生成一些临时镜像。若编译中出错可以运行这些临时镜像来进行排错。为了演示排错。我们认为将Dockerfile中的COPY app.py /app/变为COPY app.py /app,这样镜像编译过程中将产生如下错误:

[root@master flask-hello-world]# docker build -t moluo/flask-hello-world .
Sending build context to Docker daemon  4.096kB
Step 1/7 : FROM python:2.7
 ---> 55b47eef9c39
Step 2/7 : LABEL maintainer="moluo<moluo@163.com>"
 ---> Using cache
 ---> 8a73e1a8525f
Step 3/7 : RUN pip install flask
 ---> Using cache
 ---> f3b1e6583f24
Step 4/7 : COPY app.py /app
 ---> 122167530f7c
Step 5/7 : WORKDIR /app
Cannot mkdir: /app is not a directory

编译过程第5步出错了,我们进入第4步编译生成的临时镜像122167530f7c进行排错,命令如下

[root@master flask-hello-world]# docker run -it 122167530f7c /bin/bash
root@2a1b23080633:/# ls
app  bin  boot    dev  etc  home    lib  lib64  media  mnt    opt  proc  root  run  sbin  srv  sys  tmp  usr    var
root@2a1b23080633:/# cd app
bash: cd: app: Not a directory

5.运行镜像

docker run -d moluo/flask-hello-world

Last updated

Was this helpful?