使用Docker部署Python开发调试运行环境

郭群 2020年07月07日 记录于此
# 一、背景
Python2已经寿终正寝了,对Python3没有需求的项目,可以继续用Python2维护,有Python3使用需求的项目,势必要迁移到Python3了。 但服务器目前自带的Python大多数还是Python2版本,少数有Python3的,也是Python3.5居多,想使用指定版本的Python3,有点难:
- 因为我们内网环境,离线安装,编译,各种碰壁;
- 而且直接升级服务器的Python版本,可能会给其他使用服务器的同学带来一定的麻烦;
为了环境的隔离和可迁移,我们应该使用Docker来解决这种问题。本文抛砖引玉,提供一个样例给大家参考。如有不当,欢迎指正。
# 二、思路
使用Python3的项目,多数是人工智能、数据分析治理相关的项目,为了更好的生态体验,我选择使用Debian10(buster)系统的Python; 比较新且相对稳定的Python版本为Python3.7,我选择Python3.7.7版本。
确立了镜像,接下来要考虑为镜像定制什么内容。
使用容器,我们期望每个容器的功能是单一的,这也是符合Docker的理念。因此我们的镜像定制原则为能少则少,一切从简。 为了能够方便使用,我们只增加两个程序:
- sshd(更方便灵活的连接操作容器,比如使用PyCharm的远程调试功能等)
- vim (便于直接修改容器内的文件,便于调试)
# 三、实现过程
提醒!!!提醒!!!提醒!!!
第(三)~(六)章为镜像构建的过程,有兴趣的可以了解下,需要自己定制镜像的可以参考下;
若仅需使用Python3.7.7的Python镜像,直接阅读第(七)~(九)章即可。
# (一)、选定Docker镜像版本
Python3.7.7,基于debian10的镜像python:3.7.7-buster
# (二)、下载docker镜像
docker pull python:3.7.7-buster
# (三)、启动Docker镜像
docker run --name py3.7.7env --rm -it -v xxxxxx:yyyyy python:3.7.7-buster /bin/bash
测试Python是否正确,pip命令是否可用

# (四)、配置apt源
由于原生镜像是精简化配置,没有vim,不便于操作,需要安装,安装前先配置apt源,加快安装速度,磨刀不误砍柴工。
配置网易源:
# 1、拷贝apt配置文件到本地
docker cp py3.7.7env:/etc/apt/sources.list .
# 2、编辑配置

# 3、备份容器内的配置

# 4、拷贝网易apt配置到容器内

# 5、检测配置是否拷贝成功

# 6、更新源

# (五)、安装常用服务
# 1、安装vim

# 2、安装、配置sshd服务

# (1)、配置/etc/ssh/sshd_config
PasswordAuthentication yes
PermitRootLogin yes
2
# (2)、启动

# (3)、修改密码

# (六)、保存定制好的镜像,导入内网



下一步,光闸传入内网,导入镜像。

# (七)、使用定制的镜像启动容器
启动容器,开放22端口供ssh连接,挂载代码和相关用到的目录
docker run --name py3.7.7env -it --rm -v /etc/localtime:/etc/localtime:ro -v /home/qguo/AITestDBManager:/home/AITestDBManager qguo/py_env:3.7.7-buster_v1 /bin/bash
或者使用docker-compose启动
docker-compose.yml配置如下
version: "3"
services:
py_env:
image: qguo/py_env:3.7.7-buster_v1
container_name: py3.7.7env_AITestDBManager
stdin_open: true
tty: true
restart: unless-stopped
networks:
ait_net:
ipv4_address: 192.147.1.2
ports:
- "2333:22"
volumes:
- /etc/localtime:/etc/localtime:ro
- /home/qguo/AITestDBManager:/home/AITestDBManager
networks:
ait_net:
driver: bridge
ipam:
config:
- subnet: 192.147.1.0/16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
使用docker-compose启动下

# (八)、测试ssh登录
记得先在容器内启动
ssh服务,service ssh start。

ssh使用配置的2333端口登陆

# (九)、在容器内安装所需的python包
烽火内网安装Python第三方包,请认准PyPiManger。
PyPiManger闪亮登场:http://172.16.111.6:8897/


配置PyPiManger的pip config

安装下试试,丝般顺滑。

运行一下试试看:

# 总结和思考
虽然我们可以通过这种容器化的方式,为每个人提供一个独立的Python开发调试和运行环境,但还是有一定的不便之处。 后续我们可以考虑通过开源平台应用,定制模板,快速创建容器,通过WEB方式创建Docker容器,管理Docker容器,有空我会在下一篇文章中介绍下如何实现。
# 附件
| 镜像类型 | 镜像名称 | 下载地址 | MD5校验码 |
|---|---|---|---|
| 官方Docker镜像 Python3.7.7 | python:3.7.7-buster | http://172.16.111.6:40000/share/0FhgL5dY | a13dd3343a4377cbed388dd3916697b6 |
| 定制的Docker镜像镜 Python3.7.7 | qguo/py_env:3.7.7-buster_v1.tar | http://172.16.111.6:40000/share/JSCqHe1_ | 8610ae6ab91a6384bd59ab56522aa254 |