Esta guía de inicio rápido demuestra cómo usar Docker Compose para configurar y ejecutar una aplicación Django / PostgreSQL simple. Antes de comenzar, instale Compose.

Definir los componentes del proyecto

Para este proyecto, necesita crear un Dockerfile, un archivo de dependencias de Python y un docker-compose.yml expediente. (Puede usar un .yml o .yaml extensión para este archivo.)

  1. Cree un directorio de proyecto vacío.

    Puede nombrar el directorio con algo fácil de recordar. Este directorio es el contexto de la imagen de su aplicación. El directorio solo debe contener recursos para construir esa imagen.

  2. Crea un nuevo archivo llamado Dockerfile en el directorio de su proyecto.

    El Dockerfile define el contenido de la imagen de una aplicación a través de uno o más comandos de compilación que configuran esa imagen. Una vez construida, puede ejecutar la imagen en un contenedor. Para obtener más información sobre Dockerfile, consulte la guía del usuario de Docker y la referencia de Dockerfile.

  3. Agregue el siguiente contenido al Dockerfile.

    FROM python:3
    ENV PYTHONUNBUFFERED 1
    RUN mkdir /code
    WORKDIR /code
    COPY requirements.txt /code/
    RUN pip install -r requirements.txt
    COPY . /code/
    

    Esta Dockerfile comienza con un Imagen principal de Python 3. La imagen principal se modifica agregando una nueva code directorio. La imagen principal se modifica aún más mediante la instalación de los requisitos de Python definidos en el requirements.txt expediente.

  4. Guarde y cierre el Dockerfile.

  5. Crear un requirements.txt en el directorio de su proyecto.

    Este archivo es utilizado por el RUN pip install -r requirements.txt mando en tu Dockerfile.

  6. Agregue el software requerido en el archivo.

    Django>=2.0,<3.0
    psycopg2>=2.7,<3.0
    
  7. Guarde y cierre el requirements.txt expediente.

  8. Crea un archivo llamado docker-compose.yml en el directorio de su proyecto.

    los docker-compose.yml El archivo describe los servicios que hacen que su aplicación. En este ejemplo, esos servicios son un servidor web y una base de datos. El archivo de redacción también describe qué imágenes de Docker utilizan estos servicios, cómo se vinculan, los volúmenes que puedan necesitar montados dentro de los contenedores. Finalmente, el docker-compose.yml El archivo describe qué puertos exponen estos servicios. Ver el docker-compose.yml referencia para obtener más información sobre cómo funciona este archivo.

  9. Agregue la siguiente configuración al archivo.

    version: '3'
    
    services:
      db:
        image: postgres
      web:
        build: .
        command: python manage.py runserver 0.0.0.0:8000
        volumes:
          - .:/code
        ports:
          - "8000:8000"
        depends_on:
          - db
    

    Este archivo define dos servicios: db servicio y el web Servicio.

  10. Guarde y cierre el docker-compose.yml expediente.

Crea un proyecto de Django

En este paso, crea un proyecto de inicio de Django construyendo la imagen a partir del contexto de construcción definido en el procedimiento anterior.

  1. Cambie a la raíz del directorio de su proyecto.

  2. Cree el proyecto Django ejecutando el comando docker-compose run de la siguiente manera.

    sudo docker-compose run web django-admin startproject composeexample .
    

    Esto indica a Compose que se ejecute django-admin startproject composeexample en un recipiente, utilizando el web imagen y configuración del servicio. Porque el web La imagen aún no existe, Compose la compila desde el directorio actual, según lo especificado por el build: . en linea docker-compose.yml.

    Una vez el web La imagen del servicio está construida, Compose la ejecuta y ejecuta la django-admin startproject comando en el contenedor. Este comando le indica a Django que cree un conjunto de archivos y directorios que representan un proyecto de Django.

  3. Después de la docker-compose comando se completa, enumere el contenido de su proyecto.

    $ ls -l
    drwxr-xr-x 2 root   root   composeexample
    -rw-rw-r-- 1 user   user   docker-compose.yml
    -rw-rw-r-- 1 user   user   Dockerfile
    -rwxr-xr-x 1 root   root   manage.py
    -rw-rw-r-- 1 user   user   requirements.txt
    

    Si está ejecutando Docker en Linux, los archivos django-admin creados son propiedad de root. Esto sucede porque el contenedor se ejecuta como usuario root. Cambie la propiedad de los nuevos archivos.

    sudo chown -R $USER:$USER .
    

    Si está ejecutando Docker en Mac o Windows, ya debería tener la propiedad de todos los archivos, incluidos los generados por django-admin. Enumere los archivos solo para verificar esto.

     $ ls -l
     total 32
     -rw-r--r--  1 user  staff  145 Feb 13 23:00 Dockerfile
     drwxr-xr-x  6 user  staff  204 Feb 13 23:07 composeexample
     -rw-r--r--  1 user  staff  159 Feb 13 23:02 docker-compose.yml
     -rwxr-xr-x  1 user  staff  257 Feb 13 23:07 manage.py
     -rw-r--r--  1 user  staff   16 Feb 13 23:01 requirements.txt
    

Conecta la base de datos

En esta sección, configura la conexión de la base de datos para Django.

  1. En el directorio de su proyecto, edite el composeexample/settings.py expediente.

  2. Reemplace la DATABASES = ... con lo siguiente:

    DATABASES = 
        'default': 
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': 'postgres',
            'USER': 'postgres',
            'HOST': 'db',
            'PORT': 5432,
        
    
    

    Estos ajustes están determinados por postgres Imagen de Docker especificada en docker-compose.yml.

  3. Guarde y cierre el archivo.

  4. Ejecute el comando docker-compose up desde el directorio de nivel superior de su proyecto.

    $ docker-compose up
    djangosample_db_1 is up-to-date
    Creating djangosample_web_1 ...
    Creating djangosample_web_1 ... done
    Attaching to djangosample_db_1, djangosample_web_1
    db_1   | The files belonging to this database system will be owned by user "postgres".
    db_1   | This user must also own the server process.
    db_1   |
    db_1   | The database cluster will be initialized with locale "en_US.utf8".
    db_1   | The default database encoding has accordingly been set to "UTF8".
    db_1   | The default text search configuration will be set to "english".
    
    . . .
    
    web_1  | May 30, 2017 - 21:44:49
    web_1  | Django version 1.11.1, using settings 'composeexample.settings'
    web_1  | Starting development server at http://0.0.0.0:8000/
    web_1  | Quit the server with CONTROL-C.
    

    En este punto, su aplicación Django debería estar ejecutándose en el puerto 8000 en su host de Docker. En Docker Desktop para Mac y Docker Desktop para Windows, vaya a http://localhost:8000 en un navegador web para ver la página de bienvenida de Django. Si está utilizando Docker Machine, entonces docker-machine ip MACHINE_VM devuelve la dirección IP del host de Docker, a la que puede agregar el puerto (:8000).

    Ejemplo de Django

    Nota:

    En determinadas plataformas (Windows 10), es posible que deba editar ALLOWED_HOSTS dentro settings.py y agregue su nombre de host o dirección IP de Docker a la lista. Para fines de demostración, puede establecer el valor en:

      ALLOWED_HOSTS = ['*']
    

    Este valor es no Seguro para uso en producción. Referirse a Documentación de Django

    para más información.

  5. Enumere los contenedores en ejecución.

    En otra ventana de terminal, enumere los procesos Docker en ejecución con el docker container ls mando.

    $ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
    def85eff5f51        django_web          "python3 manage.py..."   10 minutes ago      Up 9 minutes        0.0.0.0:8000->8000/tcp   django_web_1
    678ce61c79cc        postgres            "docker-entrypoint..."   20 minutes ago      Up 9 minutes        5432/tcp                 django_db_1
    
    
  6. Cierre los servicios y limpie mediante uno de estos métodos:

    • Detenga la aplicación escribiendo Ctrl-C en el mismo caparazón donde lo empezaste:

      Gracefully stopping... (press Ctrl+C again to force)
      Killing test_web_1 ... done
      Killing test_db_1 ... done
      
    • O, para un apagado más elegante, cambie a un shell diferente y ejecute docker-compose desde el nivel superior de su directorio de proyecto de muestra de Django.

      vmb at mymachine in ~/sandbox/django
      $ docker-compose down
      Stopping django_web_1 ... done
      Stopping django_db_1 ... done
      Removing django_web_1 ... done
      Removing django_web_run_1 ... done
      Removing django_db_1 ... done
      Removing network django_default
      

Una vez que haya cerrado la aplicación, puede eliminar de forma segura el directorio del proyecto Django (por ejemplo, rm -rf django).

Más documentación de redacción

  • Guía del usuario
  • Instalación de Compose
  • Empezando
  • Empiece con Rails
  • Empiece con WordPress
  • Referencia de línea de comando
  • Redactar referencia de archivo

documentación, docs, estibador, componer, orquestación, contenedores