docker部署python程序清空redis数据
线上服务器没有独立的python环境,也没有外网可以装包,因此我们大都采用docker部署服务和脚本。
这样好处是:
- 不同的应用之间环境和包不同,互相隔离
- 方便移植,上传镜像文件其他机器直接下载部署
清空redis数据需求
web api采用了redis作为缓存,默认缓存时间为1天(从发起请求开始),集群数据每天6天更新到mysql,考虑到如果是晚上发起的请求,凌晨6点后的api返回的数据依然是缓存数据没有更新,因此采用这种方式去更新,在集群数据写入mysql以后,执行此任务,清空redis里的缓存数据保证数据为最新
依赖环境
python版本3.5.2(从docker下载python镜像)
依赖包
redis==2.10.6
Click==7.0
Cython==0.29.2
项目目录
|
RefreshRedis
├──
refresh
.
py
清空程序
├──
config
.
json
数据库配置文件
├──
Dockerfile
创建
docker
镜像文件(文件名不可变)
├──
requirements
.
txt
需要安装的包
refresh.py 清空redis数据脚本
#coding:utf-8
import
os
,
json
,
redis
import
click
class
BwRedisHandler
(
object
):
def
__init__
(
self
,
redis_config
):
self
.
redis_config
=
redis_config
self
.
pool
=
redis
.
ConnectionPool
(**
self
.
redis_config
)
self
.
r
=
redis
.
StrictRedis
(
connection_pool
=
self
.
pool
)
def
delele
(
self
,
key
):
self
.
r
.
delete
(
key
)
return
True
@property
def
keys
(
self
,
delete_prefixion
=
'Cloud:get'
):
return
[
k
for
k
in
self
.
r
.
keys
()
if
k
.
startswith
(
delete_prefixion
)]
if
self
.
r
.
keys
()
else
[]
def
rm_keys
(
self
):
n
=
0
if
self
.
keys
:
for
key
in
self
.
keys
:
self
.
delele
(
key
)
n
+=
1
(
'成功删除{}条数据\n{}'
.
format
(
n
,
','
.
join
(
self
.
keys
)))
@click
.
command
()
@click
.
option
(
'--mode'
,
help
=
'local/test/prd'
)
def
main
(
mode
):
BASE_DIR
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
__file__
))
CONFIG_FILE
=
os
.
path
.
join
(
BASE_DIR
,
'config.json'
)
with
open
(
CONFIG_FILE
,
'r'
,
encoding
=
'utf-8'
)
as
fr
:
config
=
json
.
load
(
fr
)
CONFIG
=
config
[
mode
]
redis
=
BwRedisHandler
(
CONFIG
[
'redis'
])
redis
.
rm_keys
()
if
__name__
==
'__main__'
:
main
()
Dockerfile
#依赖的镜像
FROM python
:
3.5
.
2
#开发者信息
MAINTAINER chengxinyao
<
chengxinyao1991@163
.
com
>
#镜像描述及版本号
LABEL
Description
=
"RefreshRedis"
Vendor
=
"Bwang"
Version
=
"0.0.1"
#拷贝文件
COPY
.
/
src
/
# 执行命令
RUN pip install
-
i https
:
//pypi.douban.com/simple -I wheel setuptools
RUN pip install
-
r
/
src
/
requirements
.
txt
-
i https
:
//pypi.douban.com/simple
#指定路径
WORKDIR
/
src
/
#命令行
CMD
[
"python"
,
"/src/refresh.py"
,
"--mode"
,
"test"
]
依据Dockerfile创建本地镜像
#需进入到Dockerfile所在目录
## docker build -t 镜像名(小写):版本号 .(小数点是指定镜像构建过程中的上下文环境的目录)
docker build
-
t refreshredis
:
0.0
.
1
.
创建镜像过程
Sending
build context to
Docker
daemon
6.656kB
Step
1
/
8
:
FROM python
:
3.5
.
2
--->
432d0c6d4d9a
Step
2
/
8
:
MAINTAINER chengxinyao
<
chengxinyao@baiwang
.
com
>
省略
Successfully
built
85b2bb03caf7
Successfully
tagged refreshredis
:
0.0
.
1
出现
Successfully
tagged
镜像名:版本号
即成功
查看镜像
docker images
屏幕显示如下
REPOSITORY TAG IMAGE ID CREATED SIZE
refreshredis
0.0
.
1
自动生成的
image_id
你的创建时间
705MB
保存镜像为压缩文件 refreshredis.tar.gz
docker save refreshredis
:
0.0
.
1
|
gzip
>
refreshredis
.
tar
.
gz
上传压缩文件到服务器
scp refreshredis
.
tar
.
gz root@
服务器:目录
登录到服务器去下载镜像
docker load
-
i refreshredis
.
tar
.
gz
服务器上查看镜像
docker images
服务器上依据该镜像执行python脚本清空redis
docker run
-
it
--
rm refreshredis
:
0.0
.
1
python
/
src
/
refresh
.
py
--
mode test
閱讀更多 猿修心 的文章