我之前部署我的博客项目(Django应用),没用Docker,直接借助的宝塔Linux服务器面板在服务器上部署的,部署起来也是十分的方便,使用了Django+Nginx+Supervisor+Gunicorn部署,可查看我写过的一片博客:Centos安装python3并使用Nginx+Gunicorn+virtualenv+supervisor来部署django项目。
这段时间了解了Docker,为其“Build,Ship and Run Any App,Anywhere”的思想所折服!
Docker 部署 Django 应用可以通过两种方式来完成:迭代构建和容器互联。
我的博客是使用了容器互联的方式搭建 Django 容器栈。
.
├── db
│ ├── Dockerfile
│ └── mysql.cnf ---数据库配置
├── djangoblog
│ ├── DjangoBlog
│ └── Dockerfile
├── docker-compose.yml
├── memcached
│ └── Dockerfile
├── nginx
│ ├── Dockerfile
│ ├── fkomm.cn
│ └── nginx
└── run.sh
db里面是我mysql的配置,内有Dockfile文件;djangoblog里面是我的django应用的源码,内也有Dockfile文件;nginx文件里还有一个Dockfile。db、djangoblog、memcached、nginx都分别是一个service,我们通过docker-compose.yml文件的配置来创建镜像和容器。也就是说你必须要做几件事:
FROM mysql:5.7
RUN mkdir -p /var/lib/mysql/ && mkdir -p /var/log/mysql/ && chown -R mysql:root /var/lib/mysql/ && \
chown -R mysql:mysql /var/lib/mysql/ && \
chown -R mysql:mysql /var/log/mysql/ && \
chown -R mysql /var/lib/mysql && \
chgrp -R mysql /var/lib/mysql && \
chown -R mysql:root /var/lib/mysql/
ADD ./mysql.cnf /etc/mysql/conf.d/mysql.cnf
CMD ["mysqld"]
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir -p /code/DjangoBlog/ && mkdir -p /var/www/resource/
ADD ./DjangoBlog/requirements.txt /requirements.txt
RUN pip install -Ur /requirements.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com && \
pip install gunicorn -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
FROM memcached:latest
CMD ["memcached"]
EXPOSE 11211
FROM nginx:1.15
RUN mkdir -p /etc/letsencrypt/live/
ADD fkomm.cn /etc/letsencrypt/live/fkomm.cn/ ---小绿锁证书配置
RUN rm -rf /etc/nginx
COPY ./nginx/ /etc/nginx
version: '2'
services:
db:
build: ./db
restart: always
mem_limit: 500m
env_file:
- ".env"
environment:
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
volumes:
- ./date/mysql/:/var/lib/mysql
depends_on:
- memcached
container_name: db
djangoblog:
build: ./djangoblog
restart: always
mem_limit: 500m
env_file:
- ".env"
command: bash -c 'sh /code/DjangoBlog/bin/docker_start.sh'
volumes:
- ./djangoblog/DjangoBlog/:/code/DjangoBlog
links:
- db
depends_on:
- db
container_name: djangoblog
nginx:
restart: always
build: ./nginx
ports:
- "80:80"
- "443:443"
volumes_from:
- djangoblog
links:
- djangoblog:djangoblog
container_name: nginx
memcached:
build: ./memcached
container_name: memcached
/date/mysql
是主机目录,/var/lib/mysql
是MySQL容器内目录;在DjangoBlog应用的settings.py里也要写成相应的配置,具体如下:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'djangoblog',
'USER': 'root',
'PASSWORD':'admin',
'PORT':3306,
'HOST':'db',
}
}
因为不需要重新配置,直接用仓库中的镜像即可!
#清理临时镜像
docker rmi $(docker images -q -f dangling=true) -f
#清理所有容器
docker rm $(docker ps -a -q) -f
docker-compose build
docker-compose up
接着在浏览器里面输入https://www.fkomm.cn 就可以进入梦寐以求的网站啦!!!!