概述
传统的一些服务器程序,通常是通过读配置文件的方式来读入参数, 如果要把程序容器化,通过配置文件读参就存在不方便的情况。现在以debian-python27为基础镜像, 以一个脚本程序为例来进行程序容器化改造! 改造前后的目录结构如下所示:
linux:/app # tree . ├── original # 初始代码目录, 模拟老的服务器程序, 日志文件位于log/server.log │ ├── server # 服务端, 通过Dockerfile打包的镜像名称: original/server:v0.1 │ │ ├── Dockerfile # server程序打包Dockerfile │ │ ├── config.py # 读取配置文件的辅助模块 │ │ ├── ini │ │ │ └── config.ini # 配置文件 │ │ └── server.py # 监听并回送客户端发送的字符串! 需从ini/config.ini读取监听端口 │ └── worker # 客户端, 日志文件位于log/worker.log, 对应镜像: original/worker:v0.1 │ ├── Dockerfile │ ├── config.py # 读取配置文件的辅助模块, 和server/config.py相同 │ ├── ini │ │ └── config.ini # 配置文件, 包含连接ip,port等 │ └── worker.py # 客户端程序, 读取ini/config.ini连接到server, 发送"hello, docker!"给server └── update # 经过改造的程序目录, 删除了读取配置文件, 其它文件和original目录下一致 ├── server # 改造后对应镜像: update/server:v0.1 │ ├── Dockerfile │ └── server.py └── worker # 改造后对应镜像: update/worker:v0.1 ├── Dockerfile └── worker.py 8 directories, 12 files linux:/app #
初始程序代码如下:
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 4 import os 5 import sys 6 import ConfigParser 7 8 class Config: 9 def __init__(self, ini_path): 10 self.config_ = ConfigParser.ConfigParser() 11 self.config_.read(ini_path) 12 13 def get_string(self, section, key, default_string_value): 14 try: 15 return self.config_.get(section, key) 16 except Exception, e: 17 return default_string_value 18 19 def get_int(self, section, key, default_int_value): 20 try: 21 return int(self.config_.get(section, key)) 22 except Exception, e: 23 return default_int_value