Introducción a Docker y despliegue de proyectos

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.

inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
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.
inserte la descripción de la imagen aquí

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.
inserte la descripción de la imagen aquí

# -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
inserte la descripción de la imagen aquí
Solución:
1. Haga clic derecho para editar la conexión
inserte la descripción de la imagen aquí
2. Haga clic en las propiedades del controlador, busque allowPublicKeyRetrieval, cambie falso a verdadero
inserte la descripción de la imagen aquí
3 y finalmente reinicie

Después de solucionar el error, usemos la herramienta de visualización para crear una nueva base de datos
inserte la descripción de la imagen aquí
e importar datos.Los
inserte la descripción de la imagen aquí
resultados de la importación son los siguientes:
inserte la descripción de la imagen aquí

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
inserte la descripción de la imagen aquí
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
inserte la descripción de la imagen aquí

inserte la descripción de la imagen aquí
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 & 

Supongo que te gusta

Origin blog.csdn.net/qq_34184505/article/details/128224343
Recomendado
Clasificación