zoukankan      html  css  js  c++  java
  • Docker技术入门与实战 第二版-学习笔记-9-Docker Compose 项目-3-Django项目实例

    使用 Django
    我们现在将使用 Compose 配置并运行一个 Django/PostgreSQL 应用。在此之前,
    先确保 Compose 已经安装

    1.通过编辑 Dockerfile文件来指定 Docker 容器要安装内容:

    FROM python:2.7
    ENV PYTHONUNBUFFERED 1
    RUN mkdir /code
    WORKDIR /code
    ADD requirements.txt /code/
    RUN pip install -r requirements.txt
    ADD . /code/

    以上内容指定应用将使用安装了 Python 以及必要依赖包的镜像

    2.在 requirements.txt文件里面写明需要安装的具体依赖包名:

    Django
    psycopg2

    3.构建docker-compose.yml文件将把所有的东西关联起来

    它描述了应用的 构成(一个 web 服务和一个数据库)、使用的 Docker 镜像、镜像之间的连接、挂 载到容器的卷,以及服务开放的端口:

    db:
      image: postgres //db服务使用的镜像
    web:
      build: . //即本地的Dockerfile文件
      command: python manage.py runserver 0.0.0.0:8000 //容器启动时运行的命令
      volumes:
        - .:/code //挂载的数据卷
      ports:
        - "8000:8000" //映射的端口
      links: //连接的db容器
        - db

    4.然后就可以使用 docker-compose run命令启动一个 Django 应用了

    Compose 会先使用 Dockerfile为 web 服务创建一个镜像,接着使用这个镜像在容器里运行下面的指令

    userdeMacBook-Pro:django user$ docker-compose run web django-admin.py startproject docker_composeexample .
    Starting django_db_1 ... done

     然后就会生成下面红圈圈起来的部分文件和文件夹:

     

    5.开始使用该Django:

    1)首先,我们要为应用设置好数据库的连接信息。用以下内容替换 docker_composeexample/settings.py文件中 DATABASES = ...定义的节点内容:

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

    这些信息是在 postgres Docker 镜像固定设置好的。 然后,运行 docker-compose up:

    userdeMacBook-Pro:django user$ docker-compose up
    django_db_1 is up-to-date
    Starting django_web_1 ... done
    Attaching to django_db_1, django_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".
    db_1   | 
    db_1   | Data page checksums are disabled.
    db_1   | 
    db_1   | fixing permissions on existing directory /var/lib/postgresql/data ... ok
    db_1   | creating subdirectories ... ok
    db_1   | selecting default max_connections ... 100
    db_1   | selecting default shared_buffers ... 128MB
    db_1   | selecting dynamic shared memory implementation ... posix
    db_1   | creating configuration files ... ok
    db_1   | running bootstrap script ... ok
    db_1   | performing post-bootstrap initialization ... ok
    db_1   | 
    db_1   | WARNING: enabling "trust" authentication for local connections
    db_1   | You can change this by editing pg_hba.conf or using the option -A, or
    db_1   | --auth-local and --auth-host, the next time you run initdb.
    db_1   | syncing data to disk ... ok
    db_1   | 
    db_1   | Success. You can now start the database server using:
    db_1   | 
    db_1   |     pg_ctl -D /var/lib/postgresql/data -l logfile start
    db_1   | 
    db_1   | ****************************************************
    db_1   | WARNING: No password has been set for the database.
    db_1   |          This will allow anyone with access to the
    db_1   |          Postgres port to access your database. In
    db_1   |          Docker's default configuration, this is
    db_1   |          effectively any other container on the same
    db_1   |          system.
    db_1   | 
    db_1   |          Use "-e POSTGRES_PASSWORD=password" to set
    db_1   |          it in "docker run".
    db_1   | ****************************************************
    db_1   | waiting for server to start....2018-12-17 10:29:34.186 UTC [45] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
    db_1   | 2018-12-17 10:29:34.202 UTC [46] LOG:  database system was shut down at 2018-12-17 10:29:33 UTC
    db_1   | 2018-12-17 10:29:34.207 UTC [45] LOG:  database system is ready to accept connections
    db_1   |  done
    db_1   | server started
    db_1   | 
    db_1   | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*
    db_1   | 
    db_1   | waiting for server to shut down....2018-12-17 10:29:34.279 UTC [45] LOG:  received fast shutdown request
    db_1   | 2018-12-17 10:29:34.282 UTC [45] LOG:  aborting any active transactions
    db_1   | 2018-12-17 10:29:34.284 UTC [45] LOG:  background worker "logical replication launcher" (PID 52) exited with exit code 1
    db_1   | 2018-12-17 10:29:34.285 UTC [47] LOG:  shutting down
    db_1   | 2018-12-17 10:29:34.302 UTC [45] LOG:  database system is shut down
    db_1   |  done
    db_1   | server stopped
    db_1   | 
    db_1   | PostgreSQL init process complete; ready for start up.
    db_1   | 
    db_1   | 2018-12-17 10:29:34.392 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
    db_1   | 2018-12-17 10:29:34.392 UTC [1] LOG:  listening on IPv6 address "::", port 5432
    db_1   | 2018-12-17 10:29:34.395 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
    db_1   | 2018-12-17 10:29:34.407 UTC [54] LOG:  database system was shut down at 2018-12-17 10:29:34 UTC
    db_1   | 2018-12-17 10:29:34.412 UTC [1] LOG:  database system is ready to accept connections
    web_1  | /usr/local/lib/python2.7/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
    web_1  |   """)
    web_1  | /usr/local/lib/python2.7/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
    web_1  |   """)
    web_1  | Performing system checks...
    web_1  | 
    web_1  | System check identified no issues (0 silenced).
    web_1  | 
    web_1  | You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
    web_1  | Run 'python manage.py migrate' to apply them.
    web_1  | December 17, 2018 - 11:03:22
    web_1  | Django version 1.11.17, using settings 'docker_composeexample.settings'
    web_1  | Starting development server at http://0.0.0.0:8000/
    web_1  | Quit the server with CONTROL-C.

    这个 web 应用已经开始在你的 docker 守护进程里监听着 5000 端口了(如果你有使用 boot2docker ,执行 boot2docker ip,就会看到它的地址)。

    你还可以在 Docker 上运行其它的管理命令,例如对于同步数据库结构这种事,在运行完 docker-compose up后,在另外一个终端运行以下命令即可:

    userdeMacBook-Pro:django user$ docker-compose run web python manage.py syncdb
    Starting django_db_1 ... done
    /usr/local/lib/python2.7/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
      """)
    Unknown command: 'syncdb'
    Type 'manage.py help' for usage.

    错误原因:在Django 1.9及未来的版本种使用migrate代替syscdb,所以将syscdb改为migrate即可:

    userdeMacBook-Pro:django user$ docker-compose run web python manage.py migrate
    Starting django_db_1 ... done
    /usr/local/lib/python2.7/site-packages/psycopg2/__init__.py:144: UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in order to keep installing from binary please use "pip install psycopg2-binary" instead. For details see: <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
      """)
    Operations to perform:
      Apply all migrations: admin, auth, contenttypes, sessions
    Running migrations:
      Applying contenttypes.0001_initial... OK
      Applying auth.0001_initial... OK
      Applying admin.0001_initial... OK
      Applying admin.0002_logentry_remove_auto_add... OK
      Applying contenttypes.0002_remove_content_type_name... OK
      Applying auth.0002_alter_permission_name_max_length... OK
      Applying auth.0003_alter_user_email_max_length... OK
      Applying auth.0004_alter_user_username_opts... OK
      Applying auth.0005_alter_user_last_login_null... OK
      Applying auth.0006_require_contenttypes_0002... OK
      Applying auth.0007_alter_validators_add_error_messages... OK
      Applying auth.0008_alter_user_username_max_length... OK
      Applying sessions.0001_initial... OK

     

     

     

  • 相关阅读:
    spring学习(一)IOC&AOP
    MongoDB 写入数据的安全性
    MongoDB MapReduce
    MongoDB 原子操作
    MongoDB 文档间的关系
    MongoDB Java
    MongoDB 持久化
    MongoDB 聚合函数 aggregate
    MongoDB 索引
    MongoDB 文档操作
  • 原文地址:https://www.cnblogs.com/wanghui-garcia/p/10133245.html
Copyright © 2011-2022 走看看