Directorio de artículos
Use Docker para construir un entorno python
1. Ideas de implementación
El sistema de gestión de la universidad se utiliza principalmente para aprender y realizar proyectos de prueba de interfaz.
Este proyecto proviene de "Cuenta oficial: Test Qi Tan", puede ir a la cuenta oficial para responder [Proyecto de prueba de interfaz]
Observaciones: el autor de la cuenta oficial utiliza principalmente este sistema de gestión universitaria para pruebas de interfaz
2. Preparación ambiental
-
Un servidor Linux (el mío es CentOS7)
-
Preparación del proyecto: sistema de gestión universitaria
3. Ideas de implementación
- Instalar docker en servidor linux
pyhon
Cree imágenes basadas en las dependencias del proyecto- Ejecute el nuevo
python
contenedor, ejecute el proyecto
4. Construya el servicio de python
1. Use Dockerfile para construir una imagen de python
1.1 Extraer imagen de python
Nota: el proyecto de gestión universitaria solo puede usar python3.7
docker pull python:3.7.16-alpine3.17
1.2 Redacción Dockerfile
de documentación
-
Exporte el paquete de dependencia del proyecto al archivo requirements.txt, el nombre del archivo txt se puede escribir libremente
pip freeze > requirements.txt
Dado que los requisitos.txt ya existen en nuestro proyecto, no se realizará ninguna operación aquí.
-
Cree un nuevo directorio en la máquina host (la máquina donde está instalado Docker) (mi directorio está en /app) y copie el archivo requirements.txt en él
mkdir -p app cp student_env/requirements.txt app/
-
Cree un archivo Dockerfile en el directorio de la aplicación (el nombre del archivo debe ser Dockerfile, sin sufijo)
FROM python:python:3.7.16-alpine3.17 WORKDIR /app ADD requirements.txt /app RUN pip install -r requirements.txt CMD["python","run_server.py"]
- El contenido del archivo requirements.txt es el siguiente
-
El contenido y la explicación de Dockerfile son los siguientes
FROM python:3.7.16-slim # 基于python:3.7.16-slim这个基础镜像构建镜像 WORKDIR /app #切换换工作空间 ADD equirements.txt /app # 将python项目依赖包添加到镜像 RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple# 安装依赖包 CMD ["python","run_server.py"]# 设置容器执行后自动执行的命令,这里的“run_server.py”是项目的执行入口
-
Ejecute el comando de creación de imágenes en el directorio de la aplicación
docker build -t python3.7:student_env .
- -t: nombre de la imagen
- El punto (.) indica el directorio donde se encuentra el archivo Dockerfile
-
Después de que la compilación sea exitosa, verá una nueva imagen (imágenes acoplables)
-
Cree un contenedor de python y verifique si los paquetes dependientes se instalaron correctamente
test_env
contenedor de construccióndocker run -id --name=test_env python3.7:student_env /bin/sh
Ingrese
test_env
al contenedor y vea el paquete de instalacióndocker exec -it -u 0 test_env /bin/sh
Si hay paquetes dependientes que no están instalados, pueden
student_env
instalarse en el contenedor por sí mismospip install 依赖包==版本 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
2. Asigne el código del proyecto en el contenedor de python
-
Asigne la ubicación del código del proyecto al contenedor
Explicación: Aquí creé otro
env
contenedordocker run -id -v /root/student_env:/app -p 8099:8099 -u=root --name=env python3.7:student_env
参数说明: -i:表示运行容器 -t:表示容器启动后会进入其命令行 -d:守护式方式创建容器在后台运行 --name:容器名称 -p 8099:8099:端口映射,宿主机端口:python服务端口(8099) -u=root:指定容器用户为root用户 -v /root/student_env:/app:将项目代码映射到python容器中
-
Verifique que el proyecto python pueda ejecutarse
python run_server.py
Si se informa el siguiente error al ejecutar (causado por la compatibilidad de la versión de Django)
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x0000024D934BDD08> Traceback (most recent call last): …… File "C:\Python37\lib\site-packages\django\contrib\admin\widgets.py", line 152 '%s=%s' % (k, v) for k, v in params.items(), ^ SyntaxError: Generator expression must be parenthesized
Debe saltar a la ruta de informe de errores, eliminar la coma y luego volver a ingresar
python run_server.py
el comando para iniciar el proyecto.Es más simple, no te molestes, úsalo directamente
vim
para modificar, de hecho, es mejor usar mapeo (pero esto no es muy bueno)VIM
No sé por qué no puedo instalarlo en el contenedor.docker cp
Use copiar para modificar primero#将容器中的文件拷贝出来 docker cp 0e49a9fb637d:/usr/local/lib/python3.7/site-packages/django/contrib/admin/widgets.py . #将容器中的文件拷贝回去 docker cp widgets.py 0e49a9fb637d:/usr/local/lib/python3.7/site-packages/django/contrib/admin/widgets.py
-
verificar
Indicará que el puerto 8099 estará ocupado, porque ya ejecuté el contenedor dokcer cuando lo inicié.
run_server.py
ip:8099/api/departments/
Ingresamos en el navegador:Si aparece la siguiente imagen, se permite que sea correcta
-