宿主机 运行docker、docker-compose
两个容器 一个运行mysql 一个运行django+uwsgi+nginx
[root@dockerhost blog]# docker-compose ps
Name Command State Ports
----------------------------------------------------------------------
blog_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
blog_web_1 supervisord -n Up 0.0.0.0:80->80/tcp
代码目录情况
[root@dockerhost /]# tree -L 2 /blog
/blog
├── conf.d
│ └── my.cnf
├── db_data
│ ├── auto.cnf
│ ├── binlog.000001
│ ├── binlog.000002
│ ├── binlog.000003
│ ├── binlog.000004
│ ├── binlog.000005
│ ├── binlog.000006
│ ├── binlog.000007
│ ├── binlog.000008
│ ├── binlog.000009
│ ├── binlog.000010
│ ├── binlog.000011
│ ├── binlog.000012
│ ├── binlog.000013
│ ├── binlog.000014
│ ├── binlog.000015
│ ├── binlog.000016
│ ├── binlog.000017
│ ├── binlog.000018
│ ├── binlog.000019
│ ├── binlog.000020
│ ├── binlog.000021
│ ├── binlog.000022
│ ├── binlog.000023
│ ├── binlog.000024
│ ├── binlog.000025
│ ├── binlog.index
│ ├── ca-key.pem
│ ├── ca.pem
│ ├── client-cert.pem
│ ├── client-key.pem
│ ├── ib_buffer_pool
│ ├── ibdata1
│ ├── ib_logfile0
│ ├── ib_logfile1
│ ├── ibtmp1
│ ├── #innodb_temp
│ ├── mysql
│ ├── mysql.ibd
│ ├── performance_schema
│ ├── private_key.pem
│ ├── public_key.pem
│ ├── religionblog
│ ├── server-cert.pem
│ ├── server-key.pem
│ ├── sys
│ ├── undo_001
│ └── undo_002
├── docker-compose.yml
├── Dockerfile
├── religionblog
│ ├── manage.py
│ ├── religionblog
│ ├── religionblog.sock
│ ├── static
│ ├── templates
│ ├── theology
│ └── uwsgi.ini
└── uwsgi_params
12 directories, 51 files
supervisord配置文件目录情况
[root@dockerhost religionblog]# tree /supervisor.conf.d/
/supervisor.conf.d/
└── supervisor-blog.conf
0 directories, 1 file
nginx配置文件目录情况
[root@dockerhost religionblog]# tree /nginx.conf.d/
/nginx.conf.d/
└── default
0 directories, 1 file
Dockerfile文件内容
[root@dockerhost blog]# cat Dockerfile
FROM python:2.7-slim
ENV DJANGO_VERSION 1.10.4
RUN apt-get update && apt-get install -y \
gcc \
gettext \
mysql-client default-libmysqlclient-dev \
libpq-dev \
sqlite3 \
supervisor\
nginx\
procps\
net-tools\
--no-install-recommends && rm -rf /var/lib/apt/lists/* && \
pip install mysqlclient uwsgi psycopg2 pillow django=="$DJANGO_VERSION" \
&& mkdir /code \
&& echo "daemon off;" >> /etc/nginx/nginx.conf
WORKDIR /code
compose配置文件内容
[root@dockerhost blog]# cat docker-compose.yml
version: "3"
services:
db:
image: mysql
environment:
MYSQL_DATABASE: "religionblog"
MYSQL_USER: "root"
MYSQL_PASSWORD: "111111"
MYSQL_ROOT_PASSWORD: "111111"
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
volumes:
- /blog/db_data:/var/lib/mysql
- /blog/conf.d:/etc/mysql/conf.d
restart: always
web:
build: .
command: supervisord -n
ports:
- "80:80"
links:
- db
volumes:
- .:/code
- /nginx.conf.d/:/etc/nginx/sites-available
- /supervisor.conf.d/:/etc/supervisor/conf.d/
my.cnf配置文件内容
[root@dockerhost ~]# cat /blog/conf.d/my.cnf
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
performance_schema = OFF
[mysql]
no-auto-rehash
default-character-set=utf8
uwsgi配置文件内容
[root@dockerhost blog]# cat religionblog/uwsgi.ini
[uwsgi]
# Django-related settings
socket = %dreligionblog.sock
http = :8081
# the base directory (project full path)
chdir = /code/religionblog
# process-related settings
# master
master = true
# maximum number of worker processes
processes = 4
threads = 2
chmod-socket=666
wsgi-file=./religionblog/wsgi.py
[root@dockerhost blog]# cat uwsgi_params
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
nginx配置文件内容
[root@dockerhost blog]# cat /nginx.conf.d/default
upstream django {
server unix:/code/religionblog/religionblog.sock;
}
server {
listen 80 default_server;
server_name www;
charset utf-8;
client_max_body_size 75M;
location /static {
alias /code/religionblog/static/;
}
location / {
uwsgi_pass django;
include /code/uwsgi_params;
}
}
supervisord配置文件内容
[root@dockerhost blog]# cat /supervisor.conf.d/supervisor-blog.conf
[program:uwsgi]
command = /usr/local/bin/uwsgi --ini /code/religionblog/uwsgi.ini
[program:nginx]
command = /usr/sbin/nginx
docker-compose build后运行docker-compose run web python /code/religionblog/manage.py migrate同步数据库,之后启动容器:docker-compose up -d。访问http://宿主机ip:80/。