docker componer construir proceso de aprendizaje

estructura gramatical basica

version: "3.8"

services: # 容器
  servicename: # 服务名字,这个名字也是内部 bridge网络可以使用的 DNS name
    image: # 镜像的名字
    command: # 可选,如果设置,则会覆盖默认镜像里的 CMD命令
    environment: # 可选,相当于 docker run里的 --env
    volumes: # 可选,相当于docker run里的 -v
    networks: # 可选,相当于 docker run里的 --network
    ports: # 可选,相当于 docker run里的 -p
  servicename2:

volumes: # 可选,相当于 docker volume create

networks: # 可选,相当于 docker network create

Tome el ejercicio Python Flask + Redis: como ejemplo, transfórmelo en un archivo docker-compose

Cree una nueva carpeta de matraz-redis con app.py, Dockerfile

#app.py文件


from flask import Flask
from redis import Redis
import os
import socket

app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', '127.0.0.1'), port=6379)


@app.route('/')
def hello():
    redis.incr('hits')
    return f"Hello Container World! I have been seen {redis.get('hits').decode('utf-8')} times and my hostname is {socket.gethostname()}.\n"

#Dockerfile文件

FROM python:3.9.5-slim

RUN pip install flask redis && \
    groupadd -r flask && useradd -r -g flask flask && \
    mkdir /src && \
    chown -R flask:flask /src

USER flask

COPY app.py /src/app.py

WORKDIR /src

ENV FLASK_APP=app.py REDIS_HOST=redis

EXPOSE 5000

CMD ["flask", "run", "-h", "0.0.0.0"]

1. Tire de la imagen redis

docker image pull redis

 2. Tire de la imagen de Python

docker pull python:3.9.5-slim

3. Ingrese a la carpeta actual de matraz-redis y ejecute

docker image build -t flask-redis .

4. Ingrese la imagen acoplable ls, hay 3 imágenes

 5. Crea una red

docker network create -d bridge demo-network

 6. Crea el contenedor

docker container run -d --name redis-server --network demo-network redis
docker container run -d --network demo-network --name flask-demo --env REDIS_HOST=redis-server -p 5000:5000 flask-demo

 Una vez que se haya familiarizado con este capítulo, primero creará dos imágenes de Flass-Redis y Redis, y luego ejecutará dos contenedores. Pero el contenido del archivo docker-compose.yml no se usa.

Cree un nuevo archivo docker-compose.yml

#docker-compose.yml文件

version: "3.8"

services:
  flask-redis:
    container_name: flask-redis
    image: flask-redis:latest
    environment:
      - REDIS_HOST=redis-server
    networks:
      - demo-network
    ports:
      - 8080:5000

  redis-server:
    container_name: redis-latest
    image: redis:latest
    networks:
      - demo-network

networks:
  demo-network:

Luego, ejecute el comando docker-compose up -d para ejecutar dos contenedores al mismo tiempo, es decir, para completar la creación de imágenes y la operación del contenedor directamente a través del comando docker-compose, que se implementa en un solo paso.

 6. Utilice el comando docker container rm xxx xxx para eliminar los dos contenedores creados anteriormente y conservar el archivo de imagen anterior.

7. Ejecute docker-compose

docker-compose up

 Este comando es para crear dos contenedores e iniciarlos normalmente después de tener la imagen del matraz-redis

 Presione ctrl+c para salir y detenerse.

Ingrese para ver el contenedor, y puede ver que se crean automáticamente dos contenedores cuyo estado es salir.

docker container ls -a

Use el comando -d para ejecutar en segundo plano en su lugar

docker-compose up -d

Pero compré este servidor Ali, pero no se puede abrir normalmente a través de la dirección IP + número de puerto.

Más tarde, descubrí que el servidor de Alibaba Cloud que compré se debió a que el puerto no se abrió.

También puede verlo ejecutando el comando docker-compose ps

docker-compose ps

 Lo principal es que el comando docker-compose ps debe ejecutarse en el directorio actual.

Ejecute docker-compose stop para detener la ejecución

docker-compose stop

 Capacidad para ver contenedores detenidos

 Ejecutar eliminar, todo será eliminado

docker-compose rm

También necesita crear la red en este momento, docker-compose no la eliminará por usted, debe eliminarla manualmente usted mismo. 

Solo para referencia de aprendizaje. 

Lo anterior se basa en la premisa de construir una imagen de matraz-redis por adelantado, para docker-compose

¿Qué pasa si no tenemos esta imagen especular? A continuación, al modificar el archivo docker-compose.yml, la imagen del matraz-redis se crea automáticamente y se crean y ejecutan normalmente dos contenedores.

Por ejemplo, tengo una carpeta de matraz-py, una carpeta de matraz y docker-compose.yml. Estos dos están al mismo nivel.

version: "3.8"

services:
  #flask是容器名称
  flask:
    #通过build构建镜像
    build:
      context: ./flask  #构建的文件夹./flask  context意思是要的build的目录
      dockerfile: Dockerfile  # Dockerfile的名字
    image: flask:latest  #镜像的名称
    environment:
      - REDIS_HOST=redis-server
    networks:
      - demo-network
    ports:
      - 8080:5000

  redis-server:
    container_name: redis-latest
    image: redis:latest
    networks:
      - demo-network

networks:
  demo-network:

 Luego, elimine la imagen del matraz-redis creada antes, la imagen acoplable rm xxx (id)

Luego cargue la carpeta del matraz-py, y luego cd en ella

Ejecutar una orden

docker-compose build

 Pero aquí solo construyó un espejo para mí, sin los dos contenedores y redes que se crearon automáticamente.

 ¿Eso significa que la compilación de docker-compose falló?

Entonces es imposible construir directamente.

Elimine la imagen construida primero. Ejecute el comando pull para extraer la imagen de matraz-redis, que creará automáticamente la imagen.

docker-compose pull

 Entonces up -d comienza en segundo plano,

docker-compose up -d

Finalmente docker-compose ps

       imagen acoplable ls

      contenedor acoplable ls -a

     red acoplable ls

puede ver los datos.

 

 Finalmente ejecutar eliminar todo lo recién creado

docker system prune -f

 

referencia

Componer la estructura y la versión del archivo - Docker Tips

Supongo que te gusta

Origin blog.csdn.net/deng_zhihao692817/article/details/129539424
Recomendado
Clasificación