Instalar ventana acoplable
Cerrar el servicio SELINUX
SELINUX es un programa de servicio de seguridad incluido con el sistema CentOS. Debido a que la política de seguridad es demasiado estricta, se recomienda construir y cerrar este servicio.
Modifique el archivo /etc/selinux/config y configure SELINUX=disabled
vim /etc/selinux/config
# 设置SELINUX=disabled
# 设置完成后重启Centos系统
reboot
Instalar ventana acoplable
yum install docker -y
# 常用命令
service docker start
service docker stop
service docker restart
¿Qué es DockerHub?
DockerHub es un almacén de imágenes públicas de Docker, que proporciona a los usuarios una gran cantidad de archivos de imágenes.Sitio
web oficial: https://hub.docker.com/
Dado que el acceso a la red doméstica a DockerHub es muy lento, podemos usar el acelerador de Docker
Configurar el acelerador de Docker
El acelerador DaoCloud adopta una tecnología de almacenamiento en caché y enrutamiento inteligente de desarrollo propio, e introduce la optimización de la capa de protocolo de efectivo, lo que mejora en gran medida la velocidad y la experiencia de extracción de imágenes.
# 在centos终端中输入下面命令
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
Luego, modifique el archivo /etc/docker/daemon.json para eliminar la coma final (si corresponde).
¿Qué es una imagen de Docker?
Para empaquetar e implementar rápidamente entornos de software, Docker presenta un mecanismo de duplicación, que es un entorno de software de capa de solo lectura configurado.
Podemos crear un espejo a través del archivo dockerfile o descargar el espejo desde DockerHub
Pasos para crear una imagen:
descargue la imagen de python desde DockerHub, cree un contenedor, instale los programas necesarios en el contenedor, convierta el contenedor en una imagen y cárguelo en DockerHub
¿Qué es un contenedor Docker?
El contenedor es una instancia virtual creada sobre la base de la imagen, y el contenido se puede leer y escribir.
Una imagen de Docker puede crear varios contenedores, y los contenedores están aislados entre sí, y los programas implementados no interferirán entre sí.
Todos los contenedores utilizan directamente el kernel, la memoria y el disco duro de Linux del host, por lo que el rendimiento del contenedor es muy parecido al del host.
Comandos relacionados con el espejo
# 下载python3.8镜像
docker pull python:3.8
# 查看已有镜像
docker images
# 查看某个镜像的详细信息
docker inspect python:3.8
# 导出镜像:适合不能联网的服务器安装镜像
# docker save 镜像名:TAG > 压缩文件
docker save python:3.8 > /root/python.tar
# 删除镜像:docker rmi 镜像名:TAG
docker rmi python:3.8
# 从压缩包导入镜像
docker load < /root/python.tar
Nota sobre los comandos relacionados con el contenedor
: después de crear un contenedor a través del comando de ejecución, el contenedor se detendrá cuando se ejecute el comando de salida, pero el contenedor no se detendrá cuando se ejecute el comando de salida para ingresar al contenedor a través del comando exec.
# 创建容器
# 用python:3.8这个镜像创建一个名为p1的容器,并进入它的bash命令界面
docker run -it --name=p1 python:3.8 bash
# 查看容器状态
docker ps -a
# 启动容器:docker start 容器名
docker start p1
# 停止容器
docker stop p1
# 暂停容器
docker pause p1
# 恢复容器运行
docker unpause p1
# 进入已经运行的容器
docker exec -it p1 bash
# 查看容器详细信息:docker inspect 容器名
docker inspect p1
# 删除容器(必须是stop状态才能删除)
docker rm p1
Tecnologías necesarias para crear contenedores python
Entorno de red Docker
De forma predeterminada, el entorno de Docker asignará una dirección IP dinámica al contenedor, lo que hará que la dirección IP cambie la próxima vez que se inicie el contenedor.
Gestión de red Docker: asigne direcciones IP fijas a contenedores
Podemos crear un segmento de red separado dentro de Docker (172.18.0.X)
# 创建网段
docker network create --subnet=172.18.0.0/16 mynet
# 查看docker环境中存在哪些网段
docker network ls
# 删除网段:注意需要将关联该网段的容器先删除了
docker network rm mynet
# 指定网段来创建容器(名为p1)
docker run -it --name=p1 --net mynet --ip 172.18.0.2 python:3.8 bash
Mapeo de puertos Docker
De forma predeterminada, el acceso remoto a los contenedores de Docker es inaccesible para cualquier host, excepto el host.
A través de la asignación de puertos, el puerto del contenedor se puede asignar al puerto del host, de modo que otros hosts puedan acceder al contenedor.
Los puertos asignados al host se pueden usar sin establecer reglas de firewall.
# -p 宿主机端口:容器端口
docker run -it -p 9500:5000 --name=p1 python:3.8 bash
docker run -it -p 9500:5000 -p 9600:3306 --name=p1 python:3.8 bash
Montaje de directorio Docker
Para guardar parte de los datos comerciales fuera del entorno de Docker, o importar los archivos de la máquina host al contenedor, es necesario montar el directorio de la máquina host en el contenedor.
Una ventaja de esto es que incluso si el contenedor no se inicia, nuestros datos no se perderán.
El entorno de Docker solo admite el montaje de directorios, no el montaje de archivos, y un contenedor puede montar varios directorios
Después de montar el directorio, monte el archivo recién creado en el directorio del contenedor, y también se puede ver en el directorio montado del host.
# -v 宿主机目录:容器目录
docker run -it -v /root/test:/root/project --name=p1 python:3.8 bash
Parámetros comunes para crear contenedores
- -debe agregar este parámetro al crear e ingresar al contenedor python
- -p asigna el puerto en el contenedor al host
- --name nombre del contenedor
- -d ejecutar en segundo plano
- -v montaje en directorio
- –net especifica el segmento de red
- –ip especifica la dirección IP
Crear un contenedor de python
Debido a que ya teníamos una imagen de python: 3.8 antes, y un segmento de red llamado mynet creado por nosotros mismos, ahora creamos directamente el contenedor de python.
# 假设我们再root目录创建项目文件
cd /root/
mkdir project
docker run -it -d --name=p1 -p 3002:5000 -v /root/project:/root/project --net mynet --ip 172.18.0.2 python:3.8 bash
Utilice pip para instalar las dependencias del proyecto
Universidad de Tsinghua: https://pypi.tuna.tsinghua.edu.cn/simple
Alibaba Cloud: https://mirrors.aliyun.com/pypi/simple/University
of Science and Technology of China https: //pypi.mirrors.ustc.edu.cn/simple/Universidad
de Ciencia y Tecnología de Huazhong: http://pypi.hustunique.com/Universidad
de Tecnología de Shandong: http://pypi.sdutlinux.org/Douban
: http: //pypi.douban.com/simple/
pip install flask -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install mysql-connector-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple
Crear contenedor mysql
Descargar imagen mysql
docker pull mysql:8.0.31
Cree un contenedor mysql: tenga cuidado de no agregar el parámetro -it
docker run --name=m1 -p 3001:3306 --net mynet --ip 172.18.0.3 -v /root/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=abc123456 -d mysql:8.0.31
Conéctese usando el visualizador de clientes
Al usar MySQL8.0 para informar el error No se permite la recuperación de clave pública
Solución:
1. Haga clic derecho para editar la conexión
2. Haga clic en las propiedades del controlador, busque allowPublicKeyRetrieval, cambie falso a verdadero
3 y finalmente reinicie
Después de solucionar el error, usemos la herramienta de visualización para crear una nueva base de datos
e importar datos.Los
resultados de la importación son los siguientes:
Error de conexión de código:
ImportError: no se puede importar el nombre 'conector' del módulo 'mysql' parcialmente inicializado (probablemente debido a una importación circular) Motivo
: el archivo .py actual tiene el mismo nombre que el paquete en la biblioteca, simplemente cambie el archivo ¡nombre!
¡Creamos un mysql.py antes y lo cambiamos a mysql_data.py!
Implementar el proyecto del matraz en la ventana acoplable
Debido a que necesitamos implementar el proyecto dentro del contenedor, la dirección IP y el puerto para conectarse a la base de datos deben cambiarse a la IP y el puerto del contenedor Docker. Después de la
modificación, empuje a github o Code Cloud
cd /root/
mkdir project
##################### 假设之前还没创建容器和按照依赖(已创建可忽略)
docker run -it -d --name=p1 -p 3002:5000 -v /root/project:/root/project --net mynet --ip 172.18.0.2 python:3.8 bash
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
pip list # 查看是否暗装成功
######################
# 拉取项目代码
git clone https://gitee.com/asong5857229/flask_docker.git
# 进入容器
docker exec -it p1 bash
# 进入挂载目录
cd /root/project/flask_docker/
# 启动程序
python app.py
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:5000
* Running on http://172.18.0.2:5000
Acceso a red externa: la red externa accede a la dirección IP 192.168.0.37 del host Linux y al puerto 3002 del mapeo de puertos del proyecto python
Como se puede ver en la figura anterior, se puede acceder con éxito al proyecto python y también se puede acceder a la base de datos con éxito.
Cuando se implementa oficialmente, debemos ejecutar app.py en el modo de inicio en segundo plano
nohup python app.py > ./flask.log 2>&1 &