最近在做一些接口,需要使用docker打包发布。
接口的内容不多,文件结构也不复杂,使用的是Flask框架开发的。
一、Docker file
docker打包需要一个Dockerfile,指挥怎么打包怎么运行。
使用了一个简单的Dockerfile模板
FROM python:3.7.5 RUN mkdir /code COPY requirements.txt /code COPY config.py /code COPY run.py /code RUN pip install -r /code/requirements.txt WORKDIR /code CMD ["python3","run.py"]
这里是一个只有两个文件的项目,需要的依赖库都在requirements.txt中。执行方式为 python3 run.py
运行一段时间发现我的服务器时钟不对,需要同步一下时间,增加了以下代码
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
这一段放在运行程序之前即可。
二、构建镜像
代码写好之后,做好Dockerfile,就开始构建镜像,使用docker build镜像。
在当前文件夹构建一个叫做api-data的镜像,执行命令
docker build -t api-data ./
等待命令执行完毕,使用 docker images 可以看到镜像列表中多了一个名为api-data的镜像。
三、docker run
运行docker容器
简单的运行命令
docker run -d api-data
-d表示后台运行
我的是flask接口的运行,需要映射端口
docker run -d -p 5000:5000 api-data
增加一下重命名和日志文件夹的映射,方便查看文件
docker run -d -p 5000:5000 -v /code/logs:/code/logs --name my-docker-api api-data
这个文件夹在构建的时候需要创建,Dockerfile需要增加创建日志文件夹的命令,并在代码中配置将日志文件输出到该处。
FROM python:3.7.5 RUN mkdir /code RUN mkdir /code/logs COPY requirements.txt /code COPY config.py /code COPY run.py /code RUN pip install -r /code/requirements.txt WORKDIR /code RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone CMD ["python3","run.py"]