幸运的是,docker实现了咱们的愿望。 docker甚至在部分状况下,搭建环境就和安装app同样简单,只须要一条命令行就可让服务跑起来。html
例如要搭建一个nginx文件服务:python
docker run -v build:/etc/nginx/html -p 80:80 nginx
复制代码
不只过程极其简单,屡次重复尝试,运行的结果也能保持一致。nginx
docker官方提供了一个新手示例git
项目目录结构
|-- templates // 页面模版
|-- index.html
|-- Dockerfile // docker镜像配置文件
|-- app.py // python服务入口文件
|-- requirements.txt // python依赖文件
复制代码
自定义一个应用,是经过配置Dockerfile来实现的:github
# 依赖的镜像
FROM alpine:3.5
# 安装 python 和 pip
RUN apk add --update py2-pip
# 更新 pip
RUN pip install --upgrade pip
# 安装应用须要的python依赖包
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r /usr/src/app/requirements.txt
# 复制应用运行须要用到的文件
COPY app.py /usr/src/app/
COPY templates/index.html /usr/src/app/templates/
# 容器须要暴露给外部的接口
EXPOSE 5000
# 运行应用
CMD ["python", "/usr/src/app/app.py"]
复制代码
在项目根路径执行构建镜像命令:docker
docker build -t app:1.0 .
复制代码
成功后,就可使用生成的镜像运行应用了:flask
docker run -p 80:5000 app:1.0
复制代码
当咱们开始完整尝试用docker部署项目时,会遇到各类须要google的问题:bash
Dockerfile
的volume
为何没法实现run
命令 -v
的效果?CMD
和 ENTRYPOINT
有什么区别?