Buscamos en internet y así traerte la respuesta a tu problema, si tienes alguna difcultad puedes dejarnos tu pregunta y te contestaremos con mucho gusto.
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.)
-
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.
-
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. -
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 nuevacode
directorio. La imagen principal se modifica aún más mediante la instalación de los requisitos de Python definidos en elrequirements.txt
expediente. -
Guarde y cierre el
Dockerfile
. -
Crear un
requirements.txt
en el directorio de su proyecto.Este archivo es utilizado por el
RUN pip install -r requirements.txt
mando en tuDockerfile
. -
Agregue el software requerido en el archivo.
Django>=2.0,<3.0 psycopg2>=2.7,<3.0
-
Guarde y cierre el
requirements.txt
expediente. -
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, eldocker-compose.yml
El archivo describe qué puertos exponen estos servicios. Ver eldocker-compose.yml
referencia para obtener más información sobre cómo funciona este archivo. -
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 elweb
Servicio. -
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.
-
Cambie a la raíz del directorio de su proyecto.
-
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 elweb
imagen y configuración del servicio. Porque elweb
La imagen aún no existe, Compose la compila desde el directorio actual, según lo especificado por elbuild: .
en lineadocker-compose.yml
.Una vez el
web
La imagen del servicio está construida, Compose la ejecuta y ejecuta ladjango-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. -
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.
-
En el directorio de su proyecto, edite el
composeexample/settings.py
expediente. -
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
. -
Guarde y cierre el archivo.
-
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 ahttp://localhost:8000
en un navegador web para ver la página de bienvenida de Django. Si está utilizando Docker Machine, entoncesdocker-machine ip MACHINE_VM
devuelve la dirección IP del host de Docker, a la que puede agregar el puerto (
).:8000 Nota:
En determinadas plataformas (Windows 10), es posible que deba editar
ALLOWED_HOSTS
dentrosettings.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
-
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
-
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