设为首页 收藏本站
查看: 1447|回复: 0

[经验分享] Docker-compose实战——Django+PostgreSQL

[复制链接]

尚未签到

发表于 2017-12-6 16:34:51 | 显示全部楼层 |阅读模式
  今天我们来用docker-compose 快速安装一个Django+PostgreSQL的开发环境。

Compose简介
  Compose 定位是“defining and running complex applications with Docker”,前身是 Fig,兼容 Fig 的模板文件。
  Dockerfile 可以让用户管理一个单独的应用容器;而 Compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等。
DSC0000.png

  该项目由 Python 编写,实际上调用了 Docker 提供的 API 来实现。
  安装docker-compose请戳这里,安装好后就让我们一起开始吧!

一、定义项目组件

1.1 创建一个空的项目目录



[iyunv@localhost sparks]# mkdir django_test


1.2 在你的项目目录下创建一个名为Dockerfile文件
  Docker 可以通过 Dockerfile 的内容来自动构建镜像。Dockerfile 是一个包含创建镜像所有命令的文本文件,通过docker build命令可以根据 Dockerfile 的内容构建镜像,在介绍如何构建之前先介绍下 Dockerfile 的基本语法结构。
  想要了解更多 官方文档

1.3 添加如下的内容到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命令安装该文件中的依赖包。

1.4 在你的项目目录下创建并添加如下内容至requirements.txt



Django>=1.8,<2.0
psycopg2


1.5 在你的项目目录下创建并添加如下内容至docker-compose.yml



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项目
  在这一步,用之前步骤创建的文件制作镜像并用这个镜像来创建Django项目

2.1  转至项目根目录,运行如下命令来创建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项目

2.2 在上面的命令执行完后,查看你的项目目录文件



$ 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

3.1 在你的项目目录下,编辑composeexample/settings.py文件

3.2 将文件中DATABASES = ...替换为如下内容



DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'postgres',
'USER': 'postgres',
'HOST': 'db',
'PORT': 5432,
}
}


3.3 运行命令在你的项目根目录下



$ 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的欢迎界面啦
DSC0001.png


3.4 查看正在运行的容器
  在另一个终端上,你可以通过 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容器都在后台运行中,至此我们已经大功告成啦!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421385-1-1.html 上篇帖子: Removing Docker Containers and Images 下篇帖子: docker应用-5(使用overlay 网络进行容器间跨物理主机通信)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表