1. 目录结构
- django-devops-uwsgi 目录是打包 uWSGI 和 Django 的镜像编译文件。在镜像中安装 uWSGI、pip、virtualenv等必要的程序包。在使用镜像创建容器时,执行 start.sh 脚本, 创建 Python 虚拟运行环境,从 Django 的 requirements.txt 安装依赖包,最后启动 uWSGI 监听端口,等待请求。
- django-devops-compose/www/app 目录,用于放置 Django 的代码。需要说明的是:为了减少工程的目录层级,通过改造,将 url、settings 等与工程全局相关的文件移动到了根目录。
- django-devops-compose/www/conf 目录,用于存放 uWSGI 配置和环境变量。这里的环境变量有 pip 源地址等。
- django-devops-compose/www/env 目录用于存放 virtualenv 创建的 Python 虚拟环境。这是为了避免,每次启动容器时,都需要重新安装依赖包,加快容器启动时间。
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | | 17 | | 18 | | 19 | | 20 |
|
| └── django-devops-uwsgi | | │ ├── Dockerfile | | │ └── start.sh | | ├── django-devops-compose | | │ ├── docker-compose.yml | | │ └── www | | │ ├── app | | │ │ ├── manage.py | | │ │ ├── requirements.txt | | │ │ ├── settings.py | | │ │ ├── static | | │ │ ├── urls.py | | │ │ ├── wsgi.py | | │ ├── conf | | │ │ ├── common.env | | │ │ ├── uwsgi.ini | | │ ├── env | | │ ├── log | | │ │ ├── mysql | | │ │ └── uwsgi |
|
2. Dockerfile
镜像文件:django-devops-uwsgi/Dockerfile
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | | 17 | | 18 | | 19 | | 20 | | 21 | | 22 | | 23 | | 24 | | 25 |
|
| FROM centos:7 | | | | RUN yum -y install epel-release | | | | RUN yum -y install gcc | | | | RUN yum -y install python-devel python-pip mysql-devel | | | | RUN pip install | | | | RUN pip install virtualenv | | | | RUN yum -y install pcre pcre-devel pcre-static | | | | RUN yum -y clean all | | | | RUN mkdir /var/www | | | | COPY ./start.sh / | | | | RUN chmod +x /start.sh | | | | CMD ["/start.sh"] | | | | EXPOSE 8000 |
|
启动脚本文件:django-devops-uwsgi/start.sh
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | | 17 | | 18 | | 19 | | 20 | | 21 | | 22 | | 23 | | 24 | | 25 | | 26 | | 27 | | 28 |
|
| #!/usr/bin/bash | | | | echo "python virtual env ------ start" | | cd /var/www | | | | virtualenv ./env | | source ./env/bin/activate | | pip install uwsgi --index=http://${PYPI_SOURCE} --trusted-host ${PYPI_SOURCE%%/*} | | echo "python virtual env ------ end" | | | | echo "install requirements.txt ------ start" | | echo "pypi source, ${PYPI_SOURCE}" | | /var/www/env/bin/pip install -r /var/www/app/requirements.txt --index=http://${PYPI_SOURCE} --trusted-host ${PYPI_SOURCE%%/*} | | echo "install requirements.txt ------ end" | | | | cd /var/www/app | | | | echo "syncdb ------ start" | | python manage.py syncdb | | echo "syncdb ------ end" | | | | echo "migrate ------ start" | | python manage.py migrate | | echo "migrate ------ end" | | | | echo "uwsgi ------ start" | | uwsgi --master --ini /var/www/conf/uwsgi.ini | | echo "uwsgi ------ end" |
|
docker-compose.yml 配置文件:django-devops-compose/docker-compose.yml
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | | 17 | | 18 | | 19 | | 20 | | 21 | | 22 | | 23 | | 24 | | 25 | | 26 | | 27 | | 28 | | 29 | | 30 | | 31 | | 32 | | 33 | | 34 | | 35 | | 36 | | 37 | | 38 | | 39 | | 40 | | 41 | | 42 | | 43 | | 44 | | 45 | | 46 | | 47 | | 48 |
|
| version: '2' | | | | services: | | | | nginx: | | build: ../django-devops-nginx/ | | volumes: | | - ./www/:/var/www/ | | links: | | - uwsgi | | ports: | | - "80:80" | | expose: | | - "80" | | | | uwsgi: | | | | build: ../django-devops-uwsgi/ | | privileged: true | | env_file: | | - ./www/conf/common.env | | volumes: | | - ./www/:/var/www/ | | depends_on: | | - mysql | | | | | | links: | | - mysql | | | | | | ports: | | - "8000:8000" | | expose: | | - "8000" | | | | mysql: | | image: mariadb | | restart: always | | ports: | | - "3306:3306" | | expose: | | - "3306" | | volumes: | | - ./www/mysql/:/var/lib/mysql/ | | environment: | | - MYSQL_ROOT_PASSWORD=root | | - MYSQL_DATABASE=app |
|
环境变量文件:django-devops-compose/www/conf/common.env
|
| | | | | | | | | | | PYPI_SOURCE=mirrors.aliyun.com/pypi/simple | | |
|
uSWGI 配置文件:django-devops-compose/www/conf/uwsgi.ini
|
| [uwsgi] | | chmod-socket=666 | | socket = uwsgi:8000 | | chdir = /var/www/app/ | | logto = /var/www/log/uwsgi/uwsgi.log | | module = wsgi:application | | py-autoreload = 1 | | master = 1 | | processes = 2 | | threads = 2 |
|
3. 常用的一些命令
启动容器,Console 推出时,容器停止。
1
|
docker run -p 800:80 imagename
|
后台启动容器,不占用 Console,后台运行。
1
|
docker run -d -p 800:80 imagename
|
启动容器,并通过 ssh 登陆
1
|
docker run -it --rm imagename /bin/bash
|
批量停止容器
1
|
docker stop $(docker ps -q)
|
批量重启容器
1
|
docker restart $(docker ps -q)
|
批量删除容器
1
|
docker rm $(docker ps -a -q)
|
批量删除 :镜像
1
|
docker rmi $(docker images -f "dangling=true" -q)
|
批量删除镜像
1
|
docker rmi $(docker images -q)
|