您的位置:首页 > 运维架构 > Docker

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

2018-01-16 15:34 435 查看
项目目录:






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

# Th
4000
is 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 devuser@localhost; SET PASSWORD FOR devuser@localhost=PASSWORD('devpass'); GRANT ALL PRIVILEGES ON devdb.* TO devuser@localhost 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',
'admin@example.com', 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', 'admin@example.com', 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', 'admin@example.com', 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: