zoukankan      html  css  js  c++  java
  • Docker-compose实战——Django+PostgreSQL

    今天我们来用docker-compose 快速安装一个Django+PostgreSQL的开发环境。

    Compose简介

    Compose 定位是“defining and running complex applications with Docker”,前身是 Fig,兼容 Fig 的模板文件。

    Dockerfile 可以让用户管理一个单独的应用容器;而 Compose 则允许用户在一个模板(YAML 格式)中定义一组相关联的应用容器(被称为一个 project,即项目),例如一个 Web 服务容器再加上后端的数据库服务容器等。

    该项目由 Python 编写,实际上调用了 Docker 提供的 API 来实现。

    安装docker-compose请戳这里,安装好后就让我们一起开始吧!

    一、定义项目组件

    1.1 创建一个空的项目目录

    [root@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的欢迎界面啦

    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容器都在后台运行中,至此我们已经大功告成啦!

      

  • 相关阅读:
    leetcode931
    leetcode1289
    leetcode1286
    poj Meteor Shower
    noip杂题题解
    noip2007部分题
    NOIP Mayan游戏
    某模拟题题解
    codevs 1423 骑士
    noip 邮票面值设计
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/6963779.html
Copyright © 2011-2022 走看看