1. 程式人生 > >docker 一個映象 所有容器的 dockerfile 搭建

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

相關推薦

docker 一個映象 所有容器dockerfile 搭建

專案目錄: dockerfile: FROM ubuntu:14.04 # Enable production settings by default; for development, this can be set to  # `false` in `docker r

Docker操作刪除所有容器映象

借鑑部落格:https://www.cnblogs.com/yanyouqiang/p/8301856.html https://blog.csdn.net/wy_97/article/details/79561813   這個部落格裡面只有停用,刪除容器,沒有刪除映象的命令 &nbs

docker一個映象建立多例項啟動多個容器分配不同的埠號,達到高可用的目的

   利用一個映象去建立多個微服務例項,實現擴充套件服務的目的,主要難點是利用配置檔案分別啟動不同的例項,剛開始沒有搞清楚配置檔案和容器啟動的關係,被坑了很長時間程式碼其實很簡單,就是一個註冊服務中心,以開發環境配置檔案建立服務註冊中心,以測試環境配置服務註冊中心,使兩個服務

s3 Docker映象容器

Docker技術裡最為基礎的兩大概念:映象和容器。映象的 獲取方式:從 re gistry拉取,從Dockerfile構建;容器的基本操作 1 Docker架構和底層技術簡介 Docker Platform Docker提供了一個開發,打包,執行app的平臺

docker刪除映象容器,安裝,配置

1.停止所有的container,這樣才能夠刪除其中的images: docker stop $(docker ps -a -q) 如果想要刪除所有container的話再加一個指令: docker rm $(docker ps -a -q) 2.檢視當前有些什麼images d

docker(二)映象容器常用命令

  一、映象操作 1.搜尋映象 可以直接在Docker Hub 直接搜尋映象,當然也可以使用命令來搜尋。  docker search 名稱 docker search tomcat 2.拉取映象 docker pull 映象名 #拉取redis3

1.03 docker映象容器

1.docker的底層技術實現架構 docker提供了一個開發、打包、執行app的平臺 把app和底層infrastructure(基礎設施)隔離開 2.docker engine docker engine是核心,裡面有後臺程序,叫docker

修改Docker本地映象容器的儲存位置的方法

軟連結 預設 Docker 的存放位置為:/var/lib/docker 命令檢視具體位置 docker info | grep "Docker Root Dir" 最簡單方法是掛載分割槽到這個目錄,因資料盤內有資料,採用修改映象和容器的存放路徑的方式達到目的。通過軟連線來實現。 停掉Do

Docker實戰-映象容器的儲存結構

一、映象、容器和儲存驅動的關係     前面也已經講過說,映象是程式和檔案的集合,容器是映象的執行例項。     Docker為了節約儲存空間共享資料會對映象和容器進行分層,不同映象可以共享相同資料,並且在映象上為容器分配一個RW層來加快容器的啟動順序 1

Docker映象容器的區別

一、Docker映象 要理解Docker映象和Docker容器之間的區別,確實不容易。 假設Linux核心是第0層,那麼無論怎麼執行Docker,他都是運行於核心層之上的。這個Docker映象,是一個只讀的映象,位於第一層,他不能被修改或不能儲存狀態。 一

【後臺技術開發】Docker映象容器的區別(10張圖讓你深入理解Docke的r容器映象

這篇文章希望能夠幫助讀者深入理解Docker的命令,還有容器(container)和映象(image)之間的區別,並深入探討容器和執行中的容器之間的區別。 當我對Docker技術還是一知半解的時候,我發現理解Docker的命令非常困難。於是,我花了幾周的時間來學習Docker的工作原理,更確切地說,是關於

自定義docker nginx映象容器日誌輸出

剛好自己因為工作環境需要自己定製一個nginx映象,生成之後,發現容器沒有相關nginx日誌輸出 FROM env_centos:latest COPY nginx.repo /etc/yum.repos.d/ # 注意,日誌要重定向輸出到stdout,否則無法看到容器日誌輸出 RUN \ yu

docker 修改映象容器的存放路徑

將路徑修改至掛載磁碟中 前提:磁碟已掛載成功 1、停止docker 服務 service docker stop 2、備份資料到新的存放路徑 cp -r /var/lib/docker/* /mnt/docker 3、修改備份 /var/l

兩個修改Docker本地映象容器的儲存位置的方法

1、軟連線方式 檢視docker資訊 預設情況下Docker的存放位置為:/var/lib/docker 可以通過下面命令檢視具體位置: sudo docker info | grep "Docker Root Dir" 解決這個問題,最直接的方法當然是掛載分割槽到這個目錄

Docker映象管理及Dockerfile

目錄 映象:   1. 一個分層儲存的檔案:     優點:易於擴充套件、優化儲存空間   2. 一個軟體的環境   3. 一個映象可以用於建立多個容器   4. 一種標準化的交付 一、映象工作原理 映象不是一個單一的檔案,而是有多層構成。

Docker入門-映象容器、倉庫簡單命令

映象 1.獲取映象 docker pull dl.dockerpool.com:5000/ubuntu:14.04(dl.dockerpool.com為註冊伺服器,5000為埠號,ubuntu為倉庫

Docker 企業級映象倉庫 Harbor 的搭建與維護

目錄 一、什麼是 Harbor 二、Harbor 安裝 2.1、Harbor 安裝環境 2.2、Harbor安裝 2.3 配置HTTPS 三、Harbor 的

Docker入門學習(4)----Dockerfile製作第一個映象容器中的第一個javaweb應用

我們可以通過編寫Dockerfile來製作自己的映象,下面先動手來操作一下,製作一個映象,然後基於該映象執行一個容器,在容器裡執行我們自己的javaweb應用。 <1>拉取tomcat映象 docker pull tomcat 檢視映象: roo

bat 操作docker 刪除所有 容器 映象 資料庫 network

rem 以下,按需求開啟,以下內容可以複製到bat檔案中執行 echo 根據當前日期時間,生成檔名稱,...... set YYYYmmdd=%date:~0,4%%date:~5,2%%date:~8,2% set hhmiss=%time:~0,2%%time:~3,

Centos下Docker使用映象DockerFile方式搭建JAVA Web 開發環境

1、環境1、1先決條件1.必須是64位CPU架構的計算機,Docker目前不支援32位CPU;2.執行Linux3.8或更高版本核心,CentOS時核心必不小於3.10;3.核心必須支援一種合適的儲存驅動,可以是Device Manager、AUFS、vfs、btrfs、以及