RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 986827
Accepted
Александр Филатов
Александр Филатов
Asked:2020-05-29 14:49:55 +0000 UTC2020-05-29 14:49:55 +0000 UTC 2020-05-29 14:49:55 +0000 UTC

使用 Docker (docker-compose) 开发一个简单的示例 Django Web 应用程序

  • 772

我想通过构建一个随着技术进步而增长的小型应用程序来练习 Django 和 Docker——可以说是颠簸的训练场。现在,我计划为 Postgres 和 Django 构建一个包含两个 docker 容器(docker-compose)的简单系统。稍后,例如将前端迁移到 Angular(使用单独的容器)。

随着项目的发展,我可能会遇到什么问题(我已经在 Docker 中运行了 Django-Postgres 测试包)?当向 docker-compose 添加新服务等时,数据库中的数据是否会丢失(尽管充满了“鱼”)。是否有任何明显的陷阱?

这个问题有点抽象,可以被踢,但我想在解决出现的具体问题之前先了解大局。

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    AfsmNGhr
    2020-05-30T04:34:40Z2020-05-30T04:34:40Z

    我看到这样一个学习过程,考虑到:

    我已经在 Docker 中运行了 Django-Postgres 测试包)

    尝试使用基于高山的图像

    FROM python:3.7.0-alpine3.8
    
    COPY requirements.txt /
    RUN apk --update add --virtual .base build-base git && \
        apk add --no-cache postgresql-dev && \
        pip install -r requirements.txt && \
        rm requirements.txt && \
        apk del .base && \
        addgroup -g 1001 -S example && \
        adduser -D -S -u 1000 -G example -h /home/example \
          example && \
        rm -rf /tmp/* /var/tmp/* /usr/share/man /tmp/* /var/tmp/* \
            /var/cache/apk/* /var/log/* ~/.cache
    
    COPY . /home/example/
    RUN chown -R example:example /home/example
    
    USER example
    WORKDIR /home/example
    
    CMD python server.py
    

    将项目挂载在/home/*其中将为开发带来优势,例如python的历史,sh,它将位于项目的根目录(我们将它们添加到.dockerignore,.gitignore)

    version: '3.4'
    services:
      example
        image: example-development
        command: sh -c './wait-for pg.example_net:5432 -- python server.py'
        build:
          context: .
          dockerfile: Dockerfile.development
        networks:
          - net
        volumes:
          - .:/home/example
        ports:
          - '5000:5000'
        stdin_open: true
        tty: true
        depends_on:
          - pg
          - example__migrator
        environment:
          DEBUG: 'true'
    

    仅使用需要的文件构建c.dockeringore

    *
    !src
    

    添加反向代理(nginx)并了解它们是如何工作的bridge

    即使没有angular,静力学的回报也会有利润。

    添加时,angular通过多阶段构建。

    FROM node:8.15.0-alpine
    
    WORKDIR /app
    
    COPY package.json /app/
    RUN npm install
    
    COPY . /app/
    RUN npm build
    
    FROM nginx:1.15.8-alpine
    RUN rm -rf /usr/share/nginx/html/*
    
    COPY config/default.conf /etc/nginx/conf.d/
    COPY --from=0 /app/build /usr/share/nginx/html
    
    CMD ["nginx", "-g", "daemon off;"]
    

    数据是否会从数据库中消失(尽管充满了“鱼”)

    使用 泊坞窗卷。

    pg:
      image: postgres:10.0-alpine
      environment:
        PGDATA: /var/lib/postgresql/data/pg_data
      volumes:
        - pg_data:/var/lib/postgresql/data/pg_data
      networks:
        - net
    

    我建议您在单独的容器“__migrator”中进行迁移(docker-swarm 的 ps 部署选项)

    example__migrator:
      command: sh -c './wait-for pg:5432 -- python manage.py migrate'
      deploy:
        mode: replicated
        restart_policy:
          condition: none
    

    很少画development环境。只要您需要部署应用程序并添加支持docker-swarm(理想情况下适用于单个服务器,或者如果可能,您可以扩展到集群)。

    已经有很多陷阱了。你可以看到我的部署自动化项目。

    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    根据浏览器窗口的大小调整背景图案的大小

    • 2 个回答
  • Marko Smith

    理解for循环的执行逻辑

    • 1 个回答
  • Marko Smith

    复制动态数组时出错(C++)

    • 1 个回答
  • Marko Smith

    Or and If,elif,else 构造[重复]

    • 1 个回答
  • Marko Smith

    如何构建支持 x64 的 APK

    • 1 个回答
  • Marko Smith

    如何使按钮的输入宽度?

    • 2 个回答
  • Marko Smith

    如何显示对象变量的名称?

    • 3 个回答
  • Marko Smith

    如何循环一个函数?

    • 1 个回答
  • Marko Smith

    LOWORD 宏有什么作用?

    • 2 个回答
  • Marko Smith

    从字符串的开头删除直到并包括一个字符

    • 2 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5