docker部署python程序清空redis数据

docker部署python程序清空redis数据

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

print
(
'成功删除{}条数据\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


分享到:


相關文章: