最近在做一些接口,需要使用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"]
View Code
执行成功后,使用 docker ps -a 查看一下运行情况。如果运行有错误可以查看日志排查。
四、推送
将打包好的docker镜像推送到远端。
控制版本使用 docker tag 给镜像打标签
docker tag 36ace58ff853 registry.cn-beijing.aliyuncs.com/my-docker-api/api-data:1.0
登录远端
docker login --username=myname registry.cn-beijing.aliyuncs.com
提示需要输入密码,输入密码即可
推送
docker push registry.cn-beijing.aliyuncs.com/my-docker-api/api-data:1.0
这个是使用阿里云搭建的docker镜像仓库,从网站上登录可以看到推送上去的版本。
需要使用的环境,仍使用相应的docker run语句即可运行容器。
贴一下文档
https://docs.docker.com/desktop/