diff --git a/Dockerfile b/Dockerfile
index 2e9631c6a..57b2033b3 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,13 +1,20 @@
-FROM jumpserver/base-env-alpine:latest
-MAINTAINER Jumpserver Team <ibuler@qq.com>
+FROM jumpserver/alpine-py3:v3.4
+LABEL MAINTAINER Jumpserver Team <ibuler@qq.com>
 
-#RUN apk add --update python gcc python-dev py-pip musl-dev linux-headers \
-#        libffi-dev openssl-dev jpeg-dev redis  && rm -rf /var/cache/apk/*
 COPY . /opt/jumpserver
+COPY config_docker.py /opt/jumpserver/config.py
 WORKDIR /opt/jumpserver
+RUN rm -r .git
+RUN rm -f config.py
 
-RUN cp config_example.py config.py
-#RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simple
-RUN rm -f db.sqlite3 && cd utils && sh make_migrations.sh && sh init_db.sh
+VOLUME /opt/jumpserver/data
+VOLUME /opt/jumpserver/logs
+
+RUN ln -s /usr/bin/pip3 /usr/bin/pip
+RUN ln -s /usr/bin/python3 /usr/bin/python
+RUN cp config_docker.py config.py
+
+RUN pip install -r requirements/requirements.txt
+RUN cd utils && sh make_migrations.sh && sh init_db.sh
 EXPOSE 8080
-CMD redis-server utils/redis.conf && python run_server.py
+CMD python run_server.py
diff --git a/Dockerfile-alpine-py3 b/Dockerfile-alpine-py3
new file mode 100644
index 000000000..4d4bbcd94
--- /dev/null
+++ b/Dockerfile-alpine-py3
@@ -0,0 +1,5 @@
+FROM alpine:3.4
+LABEL MAINTAINER Jumpserver Team <ibuler@qq.com>
+
+RUN apk add --update python3 gcc python3-dev musl-dev linux-headers \
+        libffi-dev openssl-dev jpeg-dev freetype-dev && rm -rf /var/cache/apk/*
diff --git a/Dockerfile-base-env-alpine b/Dockerfile-base-env-alpine
deleted file mode 100644
index 7fb4f8a7e..000000000
--- a/Dockerfile-base-env-alpine
+++ /dev/null
@@ -1,9 +0,0 @@
-FROM alpine:3.4
-MAINTAINER Jumpserver Team <ibuler@qq.com>
-
-RUN apk add --update python gcc python-dev py-pip musl-dev linux-headers \
-        libffi-dev openssl-dev jpeg-dev freetype-dev redis  && rm -rf /var/cache/apk/*
-COPY ./requirements.txt /tmp
-WORKDIR /tmp
-
-RUN pip install -r requirements.txt -i https://pypi.doubanio.com/simple
\ No newline at end of file
diff --git a/apps/jumpserver/settings.py b/apps/jumpserver/settings.py
index a81ab5ab0..f5016f3e3 100644
--- a/apps/jumpserver/settings.py
+++ b/apps/jumpserver/settings.py
@@ -121,7 +121,7 @@ if CONFIG.DB_ENGINE == 'sqlite':
     DATABASES = {
         'default': {
             'ENGINE': 'django.db.backends.sqlite3',
-            'NAME': CONFIG.DB_NAME or os.path.join(BASE_DIR, 'db.sqlite3'),
+            'NAME': CONFIG.DB_NAME or os.path.join(BASE_DIR, 'data', 'db.sqlite3'),
         }
     }
 else:
diff --git a/config_docker.py b/config_docker.py
new file mode 100644
index 000000000..2600e595a
--- /dev/null
+++ b/config_docker.py
@@ -0,0 +1,149 @@
+"""
+    jumpserver.config
+    ~~~~~~~~~~~~~~~~~
+
+    Jumpserver project setting file
+
+    :copyright: (c) 2014-2016 by Jumpserver Team.
+    :license: GPL v2, see LICENSE for more details.
+"""
+import os
+
+BASE_DIR = os.path.dirname(os.path.abspath(__file__))
+LOG_DIR = os.path.join(BASE_DIR, 'logs')
+
+
+class Config:
+    # Use it to encrypt or decrypt data
+    # SECURITY WARNING: keep the secret key used in production secret!
+    SECRET_KEY = os.environ.get('SECRET_KEY') or '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%x'
+
+    # How many line display every page, default 25
+    DISPLAY_PER_PAGE = 25
+
+    # It's used to identify your site, When we send a create mail to user, we only know login url is /login/
+    # But we should know the absolute url like: http://jms.jumpserver.org/login/, so SITE_URL is
+    # HTTP_PROTOCOL://HOST[:PORT]
+    SITE_URL = 'http://localhost'
+
+    # Domain name, If set app email will set as it
+    DOMAIN_NAME = 'jumpserver.org'
+
+    # Django security setting, if your disable debug model, you should setting that
+    ALLOWED_HOSTS = ['*']
+
+    # Development env open this, when error occur display the full process track, Production disable it
+    DEBUG = True
+
+    # DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/
+    LOG_LEVEL = 'DEBUG'
+
+    # Database setting, Support sqlite3, mysql, postgres ....
+    # See https://docs.djangoproject.com/en/1.10/ref/settings/#databases
+
+    # Sqlite setting:
+    DB_ENGINE = 'sqlite3'
+    DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3')
+
+    # Mysql or postgres setting like:
+    # DB_ENGINE = 'mysql'
+    # DB_HOST = '127.0.0.1'
+    # DB_PORT = 3306
+    # DB_USER = 'root'
+    # DB_PASSWORD = ''
+    # DB_NAME = 'jumpserver'
+
+    # When Django start it will bind this host and port
+    # ./manage.py runserver 127.0.0.1:8080
+    # Todo: Gunicorn or uwsgi run may be use it
+    HTTP_BIND_HOST = '0.0.0.0'
+    HTTP_LISTEN_PORT = 8080
+
+    # Use Redis as broker for celery and web socket
+    REDIS_HOST = '127.0.0.1'
+    REDIS_PORT = 6379
+    REDIS_PASSWORD = ''
+    BROKER_URL = 'redis://%(password)s%(host)s:%(port)s/3' % {
+        'password': REDIS_PASSWORD,
+        'host': REDIS_HOST,
+        'port': REDIS_PORT,
+    }
+
+    # Api token expiration when create
+    TOKEN_EXPIRATION = 3600
+
+    # Session and csrf domain settings, If you deploy jumpserver,coco,luna standby,
+    # So than share cookie, and you need use a same top-level domain name
+
+    # SESSION_COOKIE_DOMAIN = '.jms.com'
+    # CSRF_COOKIE_DOMAIN = '.jms.com'
+    SESSION_COOKIE_AGE = 3600*24
+
+    # Email SMTP setting, we only support smtp send mail
+    # EMAIL_HOST = 'smtp.qq.com'
+    # EMAIL_PORT = 25
+    # EMAIL_HOST_USER = ''
+    # EMAIL_HOST_PASSWORD = ''
+    # EMAIL_USE_SSL = False  # If port is 465, set True
+    # EMAIL_USE_TLS = False  # If port is 587, set True
+    # EMAIL_SUBJECT_PREFIX = '[Jumpserver] '
+
+    CAPTCHA_TEST_MODE = False
+
+    # You can set jumpserver usage url here, that when user submit wizard redirect to
+    USER_GUIDE_URL = ''
+
+    def __init__(self):
+        pass
+
+    def __getattr__(self, item):
+        return None
+
+
+class DevelopmentConfig(Config):
+    DEBUG = True
+    DISPLAY_PER_PAGE = 20
+    DB_ENGINE = 'sqlite'
+    DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3')
+    EMAIL_HOST = 'smtp.exmail.qq.com'
+    EMAIL_PORT = 465
+    EMAIL_HOST_USER = 'a@jumpserver.org'
+    EMAIL_HOST_PASSWORD = 'somepasswrd'
+    EMAIL_USE_SSL = True
+    EMAIL_USE_TLS = False
+    EMAIL_SUBJECT_PREFIX = '[Jumpserver] '
+    SITE_URL = 'http://localhost:8080'
+
+
+class ProductionConfig(Config):
+    DEBUG = False
+    DB_ENGINE = 'mysql'
+    DB_HOST = '127.0.0.1'
+    DB_PORT = 3306
+    DB_USER = 'root'
+    DB_PASSWORD = ''
+    DB_NAME = 'jumpserver'
+
+
+class DockerConfig(Config):
+    DB_ENGINE = 'sqlite'
+    DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3')
+    REDIS_HOST = os.environ.get('REDIS_HOST') or 'redis'
+    EMAIL_HOST = os.environ.get('EMAIL_HOST') or 'smtp.qq.com'
+    EMAIL_PORT = int(os.environ.get('EMAIL_PORT', 465))
+    EMAIL_HOST_USER = os.environ.get('EMAIL_HOST_USER') or 'admin'
+    EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD') or 'somepasswrd'
+    EMAIL_USE_SSL = True if EMAIL_PORT == 465 else False
+    EMAIL_USE_TLS = True if EMAIL_PORT == 587 else False
+    EMAIL_SUBJECT_PREFIX = os.environ.get('EMAIL_SUBJECT_PREFIX') or '[Jumpserver] '
+    SITE_URL = os.environ.get('SITE_URL') or 'http://localhost:8080'
+
+
+config = {
+    'development': DevelopmentConfig,
+    'production': ProductionConfig,
+    'default': DevelopmentConfig,
+    'docker': DockerConfig,
+}
+
+env = 'docker'
diff --git a/config_example.py b/config_example.py
index 770762f35..aa3bd5883 100644
--- a/config_example.py
+++ b/config_example.py
@@ -43,7 +43,7 @@ class Config:
 
     # Sqlite setting:
     DATABASE_ENGINE = 'sqlite3'
-    DB_NAME = os.path.join(BASE_DIR, 'db.sqlite3')
+    DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3')
 
     # Mysql or postgres setting like:
     # DB_ENGINE = 'mysql'
@@ -104,7 +104,7 @@ class DevelopmentConfig(Config):
     DEBUG = True
     DISPLAY_PER_PAGE = 20
     DB_ENGINE = 'sqlite'
-    DB_NAME = os.path.join(BASE_DIR, 'db.sqlite3')
+    DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3')
     EMAIL_HOST = 'smtp.exmail.qq.com'
     EMAIL_PORT = 465
     EMAIL_HOST_USER = 'a@jumpserver.org'
diff --git a/data/.gitkeep b/data/.gitkeep
new file mode 100644
index 000000000..e69de29bb
diff --git a/requirements/requirements.txt b/requirements/requirements.txt
index e6158a949..9f230656c 100644
--- a/requirements/requirements.txt
+++ b/requirements/requirements.txt
@@ -3,7 +3,7 @@ django-bootstrap3>=8.2.2
 Pillow>=4.1.0
 djangorestframework>=3.6.2
 ForgeryPy
-openpyxl>=2.4.0
+#openpyxl>=2.4.0
 celery>=4.0.2
 paramiko>=2.1.2
 ansible>=2.2.2.0