استخدم redis و mongo إلى جانب postgres في عامل الميناء

0

أنا أتعلم استخدام عامل الميناء في أحد مشروعي الذي يحتوي على مجموعة التكنولوجيا التالية

جانغو

إعادة

الخلية - الإنتاج

sqlite - تطوير

النمس

يمكنني تكوين عامل إرساء بسيط يغطي django و mysql ولكن ليس لدي أي فكرة عن كيفية لصق redis و mongod أيضًا. أرى طرقًا مختلفة في الإنترنت ، ولكن استنادًا إلى التكوين الذي قمت به بالفعل ، كيف ينبغي أن أناسبهم جيدًا.

هذا ما فعلته

عامل ميناء دوكر

version: '3'

services:

  db:
    image: mysql

  web:
    build:
      context: .
      dockerfile: docker/python/Dockerfile
    command: bash -c "sleep 3; python /code/manage.py migrate --noinput && python manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

ملف Dockerfile

# python image (https://hub.docker.com/_/python/)
FROM python:3.6

# Environment Variables
ENV PYTHONBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1


COPY ./requirements/requirements.txt /code/requirements.txt

RUN pip install -r /code/requirements.txt


RUN chmod ug+x /code/initialize.sh

COPY . /code/

WORKDIR /code

EXPOSE 8000

تهيئة. sh

#!/bin/bash
# This script initializes the Django project. It will be executed (from
# supervisord) every time the Docker image is run.

# If we're not in production, create a temporary dev database
if [ "$DJANGO_PRODUCTION" != "true" ]; then
    echo "DJANGO_PRODUCTION=false; creating local database..."
    # Wait until the MySQL daemon is running
    while [ "$(pgrep mysql | wc -l)" -eq 0 ] ; do
        echo "MySQL daemon not running; waiting one second..."
        sleep 1
    done
    # Wait until we can successfully connect to the MySQL daemon
    until mysql -uroot -pdevrootpass -e ";" ; do
        echo "Can't connect to MySQL; waiting one second..."
        sleep 1
    done
    echo "MySQL daemon is running; creating database..."
    mysql -uroot -e "CREATE DATABASE appDB; CREATE USER [email protected]; SET PASSWORD FOR [email protected]=PASSWORD('milan'); GRANT ALL PRIVILEGES ON appDB.* TO [email protected] IDENTIFIED BY 'milan'; FLUSH PRIVILEGES;" -pdevrootpass;
else
    echo "DJANGO_PRODUCTION=true; no local database created"
fi

# Initialize Django project
python /code/manage.py collectstatic --noinput
python /code/manage.py makemigrations
python /code/manage.py migrate --noinput

# Create a Django superuser named `root` if it doesn't yet exist
echo "Creating Django superuser named 'root'..."
if [ "$DJANGO_PRODUCTION" != "true" ]; then
    # We're in the dev environment
    if [ "$ROOT_PASSWORD" == "" ]; then
        # Root password environment variable is not set; so, load it from config.ini
        echo "from ConfigParser import SafeConfigParser; parser = SafeConfigParser(); parser.read('/code/config.ini'); from django.contrib.auth.models import User; print 'Root user already exists' if User.objects.filter(username='root') else User.objects.create_superuser('root', '[email protected]', parser.get('general', 'ROOT_PASSWORD'))" | python /code/manage.py shell
    else
        # Root password environment variable is set; so, use it
        echo "import os; from django.contrib.auth.models import User; print 'Root user already exists' if User.objects.filter(username='root') else User.objects.create_superuser('root', '[email protected]', os.environ['ROOT_PASSWORD'])" | python /code/manage.py shell
    fi
else
    # We're in production; use root password environment variable
    echo "import os; from django.contrib.auth.models import User; print 'Root user already exists' if User.objects.filter(username='root') else User.objects.create_superuser('root', '[email protected]', os.environ['ROOT_PASSWORD'])" | python /code/manage.py shell
fi

لذلك سؤالي هو كيف يمكنني الغراء redis و mongo هنا؟

PS اسمحوا لي أن أعرف إذا كنت من أفضل الممارسات.

1 إجابة

0

الممارسة الأكثر شيوعًا هي وجود عملية واحدة لكل حاوية ، أي إضافة redis و mongo إلى ملف عامل الميناء

version: '3'

services:

  db:
    image: mysql

  web:
    build:
      context: .
      dockerfile: docker/python/Dockerfile
    command: bash -c "sleep 3; python /code/manage.py migrate --noinput && python manage.py runserver 0.0.0.0:8000"
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

  redis:
    image: "redis:2.8"

  mongodb:
    image: mongo:latest

بخصوص sqlite ، يمكنك استخدام وحدة تخزين مشتركة مع الكمبيوتر / المثيل لملف db نفسه.

:مؤلف

أسئلة ذات صلة

فوق
قائمة طعام