这篇文章记录了我试验将一个基于python的服务docker化并k8s部署的过程。
服务介绍
这是一个用 python 实现的程序,tornado 作为 web 服务器,mongodb 作为存储,redis 作为缓存。
Docker化
设计
- 为了方便,使用docker hub作为镜像仓库,而不是自己搭建私有库。
- 业务代码直接打包进docker image,如果修改业务代码,需要重新生成docker image。
业务代码改造
将配置文件中之前涉及到的 mongo 和 redis 的配置改为服务名称。
改造前:
{
"mongodb": {
"host":"127.0.0.1",
"port":"27017"
},
"redis": {
"host":"127.0.0.1",
"port":"6379"
}
}
改造后:
{
"mongodb": {
"host":"nebulae-redis-mongo", # 服务名称
"port":"27017"
},
"redis": {
"host":"nebulae-redis-mongo",
"port":"6379"
}
}
nebulae-redis-mongo
为一个服务的名称,下面讲 k8s 设计时会说到。
创建docker镜像
一、目录结构
nebulae
|
--- Dockerfile
|
--- code # 业务逻辑代码
|
--- nebulae
二、Dockerfile
FROM python:3.6 # 基础镜像
COPY ./code/nebulae /code/nebulae # 将代码copy进容器
WORKDIR /code/nebulae/services
RUN pip install -r requirements.txt # 安装程序依赖
EXPOSE 10001 # 容器对外暴露的端口
CMD ["python","nebulae_server.py"] # 容器执行的命令,起动python程序
创建镜像命令
- 在 nebulae 目录下运行下面命令,创建镜像
docker build -t test/nebulae:tag
- 将镜像推至 docker hub
docker push test/nebulae:tag