Docker DockerFile和Django最佳实践

饭宝  金牌会员 | 2025-3-21 15:23:06 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 995|帖子 995|积分 2985

Dockerfile 常见编写方法


  • 底子镜像选择:选择一个合适的底子镜像作为出发点。
  • 工作目录设置:利用 WORKDIR 指令设置工作目录。
  • 依赖安装:利用 RUN 指令安装必要的依赖。
  • 文件复制:利用 COPY 或 ADD 指令将本地文件复制到镜像中。
  • 环境变量设置:利用 ENV 指令设置环境变量。
  • 袒露端口:利用 EXPOSE 指令声明容器运行时需要监听的端口。
  • 启动下令:利用 CMD 或 ENTRYPOINT 指令指定容器启动时要运行的下令。
常用指令


  • FROM

    • 用途:指定底子镜像。
    • 示例:FROM python:3.9-slim

  • WORKDIR

    • 用途:设置工作目录。
    • 示例:WORKDIR /app

  • RUN

    • 用途:执行下令并创建新的镜像层。
    • 示例:RUN pip install -r requirements.txt

  • COPY

    • 用途:将文件或目录从主机复制到镜像中的指定位置。
    • 示例:COPY . /app

  • ADD

    • 用途:类似于 COPY,但支持自动解压压缩文件。
    • 示例:ADD myapp.tar.gz /app

  • ENV

    • 用途:设置环境变量。
    • 示例:ENV MY_ENV_VAR=my_value

  • EXPOSE

    • 用途:声明容器运行时需要监听的端口。
    • 示例:EXPOSE 8000

  • CMD

    • 用途:指定容器启动时要运行的默认下令。
    • 示例:CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

  • ENTRYPOINT

    • 用途:指定容器启动时要运行的下令,通常与 CMD 联合利用。
    • 示例:ENTRYPOINT ["uwsgi", "--ini", "uwsgi.ini"]

  • VOLUME

    • 用途:创建挂载点,用于数据长期化。
    • 示例:VOLUME /data

Django + uWSGI 的最佳实践

假设你的项目结构如下:
  1. my-django-app/
  2. ├── docker-compose.yml
  3. ├── Dockerfile
  4. ├── requirements.txt
  5. ├── uwsgi.ini
  6. └── src/
  7.     └── manage.py
  8.     └── my_django_app/
  9.         └── settings.py
  10.         └── wsgi.py
复制代码
Dockerfile 文件

  1. # 使用官方Python基础镜像
  2. FROM python:3.9-slim
  3. # 设置工作目录
  4. WORKDIR /app
  5. # 复制依赖文件
  6. COPY requirements.txt .
  7. # 安装依赖
  8. RUN pip install --no-cache-dir -r requirements.txt
  9. # 复制项目代码
  10. COPY . .
  11. # 安装uWSGI
  12. RUN pip install uwsgi
  13. # 创建日志目录
  14. RUN mkdir -p /var/log/uwsgi
  15. # 设置环境变量
  16. ENV DJANGO_SETTINGS_MODULE=my_django_app.settings
  17. # 暴露端口
  18. EXPOSE 8000
  19. # 默认命令
  20. CMD ["uwsgi", "--ini", "uwsgi.ini"]
复制代码
requirements.txt 文件

确保你的 requirements.txt 文件包含所有必要的依赖项,例如:
  1. Django==3.2.12
  2. uwsgi==2.0.20
  3. mysqlclient==2.0.3
  4. redis==3.5.3
复制代码
uwsgi.ini 文件

以下是一个简单的 uWSGI 配置文件示例:
  1. [uwsgi]
  2. module = my_django_app.wsgi:application
  3. master = true
  4. processes = 4
  5. socket = :8000
  6. chmod-socket = 660
  7. vacuum = true
  8. die-on-term = true
  9. logto = /var/log/uwsgi/uwsgi.log
复制代码
docker-compose.yml 文件

为了方便管理和摆设,可以利用 docker-compose.yml 文件来界说服务:
  1. version: '3.8'
  2. services:
  3.   db:
  4.     image: mysql:5.7
  5.     container_name: django_db
  6.     environment:
  7.       MYSQL_ROOT_PASSWORD: example_root_password
  8.       MYSQL_DATABASE: django_db
  9.       MYSQL_USER: django_user
  10.       MYSQL_PASSWORD: example_django_password
  11.     volumes:
  12.       - db_data:/var/lib/mysql
  13.     networks:
  14.       - django-net
  15.     healthcheck:
  16.       test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
  17.       interval: 10s
  18.       timeout: 5s
  19.       retries: 3
  20.       start_period: 10s
  21.     restart: unless-stopped
  22.   redis:
  23.     image: redis:alpine
  24.     container_name: django_redis
  25.     networks:
  26.       - django-net
  27.     restart: unless-stopped
  28.   web:
  29.     build: .
  30.     container_name: django_web
  31.     ports:
  32.       - "8000:8000"
  33.     environment:
  34.       DJANGO_DB_HOST: db
  35.       DJANGO_DB_NAME: django_db
  36.       DJANGO_DB_USER: django_user
  37.       DJANGO_DB_PASSWORD: example_django_password
  38.       REDIS_HOST: redis
  39.     depends_on:
  40.       - db
  41.       - redis
  42.     networks:
  43.       - django-net
  44.     restart: unless-stopped
  45. networks:
  46.   django-net:
  47.     driver: bridge
  48. volumes:
  49.   db_data:
复制代码
具体摆设下令


  • 构建和启动服务
    1. docker-compose up -d
    复制代码
  • 查看服务状态
    1. docker-compose ps
    复制代码
  • 制止服务
    1. docker-compose down
    复制代码
  • 重启服务
    1. docker-compose restart <service_name>
    复制代码
    例如,重启 web 服务:
    1. docker-compose restart web
    复制代码
  • 重新构建并启动服务(如果修改了 docker-compose.yml 或 Dockerfile):
    1. docker-compose up -d
    2. --build
    复制代码

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表