标签:zed bin engine 端口 权限 starting 调用 date entry
今天我们来用docker-compose 快速安装一个Django+PostgreSQL的开发环境。
Compose 定位是“defining and running complex applications with Docker”,前身是 Fig,兼容 Fig 的模板文件。
Dockerfile 可以让用户管理一个单独的应用容器;而 Compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project
,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等。
该项目由 Python 编写,实际上调用了 Docker 提供的 API 来实现。
安装docker-compose请戳这里,安装好后就让我们一起开始吧!
[root@localhost sparks]# mkdir django_test
Docker 可以通过 Dockerfile 的内容来自动构建镜像。Dockerfile 是一个包含创建镜像所有命令的文本文件,通过docker build命令可以根据 Dockerfile 的内容构建镜像,在介绍如何构建之前先介绍下 Dockerfile 的基本语法结构。
想要了解更多 官方文档
FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/
这个dockerfile文件开始于python3基础镜像,创建并移动工作目录至code目录,将requirements.txt添加到code目录中,并用pip命令安装该文件中的依赖包。
Django>=1.8,<2.0 psycopg2
version: ‘3‘ services: db: image: postgres web: build: . command: python3 manage.py runserver 0.0.0.0:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db
这个文件定义了两个服务,数据库(db)服务和web服务, 想要了解更多请点击这里
在这一步,用之前步骤创建的文件制作镜像并用这个镜像来创建Django项目
sudo docker-compose run web django-admin.py startproject composeexample .
这里django-admin.py startproject composeexample需要使用web服务的镜像和配置,但是web镜像目前并不存在,所以compose自动在当前目录下寻找和创建该服务,
具体可以参见docker-compose.yml中 build: . 这一行。
一旦web服务镜像被创建,就在该容器中运行django-admin.py startproject 来创建Django项目
$ ls -l drwxr-xr-x 2 root root composeexample -rw-rw-r-- 1 user user docker-compose.yml -rw-rw-r-- 1 user user Dockerfile -rwxr-xr-x 1 root root manage.py -rw-rw-r-- 1 user user requirements.txt
如果你是在linux上运行docker,manage.py文件属于root创建,因为在容器内运行都是用root用户,可以通过如下命令改变权限
sudo chown -R $USER:$USER .
在这一部分,我们将创建数据库并连接Django
DATABASES = { ‘default‘: { ‘ENGINE‘: ‘django.db.backends.postgresql‘, ‘NAME‘: ‘postgres‘, ‘USER‘: ‘postgres‘, ‘HOST‘: ‘db‘, ‘PORT‘: 5432, } }
$ docker-compose up djangosample_db_1 is up-to-date Creating djangosample_web_1 ... Creating djangosample_web_1 ... done Attaching to djangosample_db_1, djangosample_web_1 db_1 | The files belonging to this database system will be owned by user "postgres". db_1 | This user must also own the server process. db_1 | db_1 | The database cluster will be initialized with locale "en_US.utf8". db_1 | The default database encoding has accordingly been set to "UTF8". db_1 | The default text search configuration will be set to "english". . . . web_1 | May 30, 2017 - 21:44:49 web_1 | Django version 1.11.1, using settings ‘composeexample.settings‘ web_1 | Starting development server at http://0.0.0.0:8000/ web_1 | Quit the server with CONTROL-C.
到了这里,你的Django应用已经运行在docker主机的8000端口上啦,使用浏览器输入http://localhost:8000就可以看到Django的欢迎界面啦
在另一个终端上,你可以通过 docker ps 命令查看正在运行的容器
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES def85eff5f51 django_web "python3 manage.py..." 10 minutes ago Up 9 minutes 0.0.0.0:8000->8000/tcp django_web_1 678ce61c79cc postgres "docker-entrypoint..." 20 minutes ago Up 9 minutes 5432/tcp django_db_1
一个web容器,一个postgre容器都在后台运行中,至此我们已经大功告成啦!
Docker-compose实战——Django+PostgreSQL
标签:zed bin engine 端口 权限 starting 调用 date entry
原文地址:http://www.cnblogs.com/LiCheng-/p/6963779.html