所以,我在某种特定情况下,并试图找到一个干净的解决方案。
目前我们有18个不同的回购,所有的python部署实用程序都复制并粘贴18次与venv ...对我来说这很恶心。
我想将这些实用程序烘焙成某种"工具" docker image,只需在我需要的地方执行它们,而不必让每个文件夹安装所有依赖项18次。
/devtools/venv
/user-service/code
/data-service/code
/proxy-service/code
/admin-service/code
最终我想将CD转换为用户服务,并运行类似于docker run tools version_update.py
的命令 - 并让docker镜像挂载用户服务的代码并针对它运行脚本。
我如何做到这一点,是否有更好的方式我没有看到?
答案 0 :(得分:1)
为什么要使用docker?
我建议将您的脚本放在服务旁边的“工具”目录中(或者您认为合适的地方),然后您可以进入某个服务目录并运行python ../tools/version_update.py
。
答案 1 :(得分:0)
这取决于您的码头图片,但这是基本概念。
在您的docker镜像中,假设我们有一个export default class Page extends Component {
async getUser() {
// get from AsyncStorage
this.setState({user});
}
componentWillMount() {
this.getUser();
}
}
export default class Home extends Page {
async foo(user_id) {
this.setState({something});
}
componentWillMount() {
this.foo(this.state.user);
}
render() {
return <Text>{this.state.something}</Text>;
}
}
目录,我们将安装我们想要处理的源代码,以及一个包含所有脚本的/code
目录。
然后我们可以将所需的任何目录挂载到docker镜像中的/tools
目录中,并运行我们想要的脚本。容器内的工作目录将设置为/code
,路径中也会有/code
。因此,使用您的示例,docker run命令将如下所示。
/tools
这将运行docker run -v /user-service/code:/code tools version_update.py
docker镜像,将本地tools
目录挂载到容器中的/user-service/code
目录,然后在该代码上运行/code
脚本。然后退出。
同样的图像也可用于所有其他项目,只需更改安装点即可。 (假设它们都具有相同的结构)
version_update.py
如果您想运行其他工具,只需更改传入的命令即可。
docker run -v /data-service/code:/code tools version_update.py
docker run -v /proxy-service/code:/code tools version_update.py
docker run -v /admin-service/code:/code tools version_update.py