项目目录:

docker 一个镜像 所有容器的 dockerfile 搭建

dockerfile:

FROM ubuntu:14.04


# Enable production settings by default; for development, this can be set to 
# `false` in `docker run --env`
ENV DJANGO_PRODUCTION=true


# Set terminal to be noninteractive
ENV DEBIAN_FRONTEND noninteractive


# Enable MySQL root user creation without interactive input
RUN echo 'mysql-server mysql-server/root_password password devrootpass' | debconf-set-selections
RUN echo 'mysql-server mysql-server/root_password_again password devrootpass' | debconf-set-selections


# Install packages
RUN apt-get update && apt-get install -y \
    git \
    libmysqlclient-dev \
    mysql-server \
    nginx \
    python-dev \
    python-mysqldb \
    python-setuptools \
    supervisor \
    vim
RUN easy_install pip


# Handle urllib3 InsecurePlatformWarning
RUN apt-get install -y libffi-dev libssl-dev libpython2.7-dev
RUN pip install urllib3[security] requests[security] ndg-httpsclient pyasn1


# Configure Django project
ADD . /code
RUN mkdir /djangomedia
RUN mkdir /static
RUN mkdir /logs
RUN mkdir /logs/nginx
RUN mkdir /logs/django
WORKDIR /code
RUN pip install -r requirements.txt
RUN chmod ug+x /code/initialize.sh


# Expose ports
# 80 = Nginx
# 8000 = django
# 3306 = MySQL
EXPOSE 80 8000 3306


# Configure Nginx
RUN ln -s /code/nginx.conf /etc/nginx/sites-enabled/django_docker.conf
RUN rm /etc/nginx/sites-enabled/default

z
# Run Supervisor (i.e., start MySQL, Nginx, and django)
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
CMD ["/usr/bin/supervisord"]

数据库:

initialize.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 devdb; CREATE USER [email protected]; SET PASSWORD FOR [email protected]=PASSWORD('devpass'); GRANT ALL PRIVILEGES ON devdb.* TO [email protected] IDENTIFIED BY 'devpass'; FLUSH PRIVILEGES;" -pdevrootpass;
mysql -uroot -pdevrootpass devdb < /code/iot10.sql;
else
    echo "DJANGO_PRODUCTION=true; no local database created"        
fi


# Initialize Django project
python /code/mmcsite/manage.py collectstatic --noinput
#python /code/django_docker/manage.py syncdb --noinput
#python /code/django_docker/manage.py makemigrations
#python /code/django_docker/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/mmcsite/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/mmcsite/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/mmcsite/manage.py shell
fi


config.ini:

[general]
DOCKER_IMAGE_NAME = mysite/mmcsite
ROOT_PASSWORD = root


[production]
SECRET_KEY = putsomethingreallylonghere
HOST =  0.0.0.0                 ; IP address of your production server
USE_PASSWORD = false            ; false = use SSH key authentication; true = use password
USERNAME = root
PASSWORD = (empty)
PUBLIC_KEY = ~/.ssh/id_dsa.pub  ; Your public SSH key
DATABASE_HOST = 0.0.0.0         ; IP address of your database server
DATABASE_USERNAME = root
DATABASE_PASSWORD = rootpassword
DATABASE_NAME = django


Nginx :

nginx.conf:

server {
    listen 80 default_server;
    access_log /dev/null;
    error_log /logs/nginx/nginx.error.log;


    location /static/ {
        root /;
    }


    # TODO add media directory


    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://127.0.0.1:8000/;
    }
}

搭建好之后:

docker build -t mysite/mmcsite .
docker run -d -p 80:80 -v $(pwd):/code --env DJANGO_PRODUCTION=false mysite/mmcsite
docker ps -a


项目详细地址:https://github.com/wangguanfu/docker-django

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-10-24
  • 2022-02-19
  • 2021-05-11
  • 2021-05-19
猜你喜欢
  • 2022-12-23
  • 2021-08-14
  • 2022-12-23
  • 2021-07-17
  • 2021-05-19
相关资源
相似解决方案