【QA】docker-compose-部署django-如何设置自动启动

这篇具有很好参考价值的文章主要介绍了【QA】docker-compose-部署django-如何设置自动启动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文概述

使用docker-compose部署django项目,通常做法是:

  • 构建docker镜像
  • 运行容器
  • 进入容器里面启动django项目

但是这样不够自动化。

尝试通过配置脚本的方式,让容器启动的时候就启动django项目,但这样往往使得容器一直处于重启状态,容器无法运行,本文主要解决这个问题

部署django项目

相关配置文件

docker-compose.yml中的相关配置

仅关注django部分配置即可

# /icwp_docker_compose/project/

version: '1'
services:
   mysql:
      build: ./mysql_env
      image: mysql-5.7:compose
      container_name: mysql-icwp-compose
      environment:
         - MYSQL_ROOT_PASSWORD=123456
         - TZ=Asia/Shanghai
      volumes:
         - /mysql_env/conf:/etc/mysql/conf.d                   # 挂载配置文件
         - ./mysql_env/init:/docker-entrypoint-initdb.d/       # 挂载初始化文件
         - ../data/mysql:/var/lib/mysql                        # 挂载数据库数据
         - ../log/mysql:/var/log/mysql                         # 挂载日志
      ports:
         - "3306:3306"
      restart: always

      networks:
         - net-icwp

   django:
      build: ./python_env
      image: django-icwp:compose
      container_name: django-icwp-compose
      ports:
         - "8000:8000"
      volumes:
         - ../log/icwp:/icwp/Log   # 挂载项目生成的log文件
         
      stdin_open: true
      tty: true
      restart: always

      networks:
         - net-icwp

      depends_on:
         - mysql

   nginx:
      build: ./nginx_env
      image: nginx-icwp:compose
      container_name: nginx-icwp-compose
      ports:
         - "80:80"
         - "8081:8081"
         - "9000:9000"

      volumes:
         - ./nginx_env/conf/nginx.conf:/etc/nginx/nginx.conf      # 挂载默认配置文件
         - ./nginx_env/conf/conf.d:/etc/nginx/conf.d              # 挂载自定义配置文件
         - ./nginx_env/html:/usr/share/nginx/html                 # 挂载静态文件
         - ../log/nginx:/var/log/nginx                            # 挂载日志

      restart: always

      networks:
         - net-icwp

      depends_on:
         - django

networks:
   net-icwp:
      name: net-icwp-compose

django镜像的dockerfile文件内容

# 指定操作的镜像
FROM django-fixed:centos
# 指定语言,防止中文日志乱码
ENV LANG en_US.UTF-8  
ENV LANGUAGE en_US:en  
ENV LC_ALL en_US.UTF-8
# 创建文件夹
# 项目存放路径
RUN mkdir -p /icwp/code/Django_ICWP_v3

# 存放mysqlclient的安装包
RUN mkdir -p /icwp/code/mysqlclient

# 拷贝Django项目到指定地址
# 注意:只拷贝内容,不拷贝Django_ICWP_v3这个文件夹本身
COPY Django_ICWP_v3 /icwp/code/Django_ICWP_v3


# 传入mysqlclient的whl包,这玩意命令行安装简直折磨
COPY mysqlclient-2.2.1-cp38-cp38-linux_x86_64.whl /icwp/code/mysqlclient

# 更新pip:注意这里的python3.8,以及后续的pip3.8
# 这样写是因为创建这个镜像的时候python3:centos,通过软连接加入系统变量的是python3.8
# 更新pip操作视情况给出,若安装顺利,则无需更新pip
# RUN python3.8 -m pip install --upgrade pip

WORKDIR /icwp/code/mysqlclient
RUN pip3.8 install mysqlclient-2.2.1-cp38-cp38-linux_x86_64.whl


#这句指令相当与:cd django项目
WORKDIR /icwp/code/Django_ICWP_v3

# 这句话意思是排除掉requirements.txt文件中关于Django和mysqlclient的安装信息,并将剩余内容存入到requirements_new.txt
# 虽然可以在txt文件中注释掉Django和mysqlclient的,但是为了体现自动化的思想,多了这样一行命令
RUN grep -v '^ *#\|^Django\|^mysqlclient' requirements.txt | grep . > requirements_new.txt

# 安装依赖包
RUN pip3.8 --default-timeout=100 install -r requirements_new.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

# 配置uwsgi的系统变量
RUN ln -s /usr/local/python38/bin/uwsgi /usr/bin/uwsgi

# 解决启动脚本的换行问题
RUN sed -i 's/\r//' start.sh

# 赋予脚本执行权限
RUN chmod +x start.sh


EXPOSE 8000

ENTRYPOINT ["/bin/bash","start.sh"]

start.sh启动脚本的内容

python3.8 manage.py collectstatic --noinput&&
python3.8 manage.py makemigrations&&
python3.8 manage.py migrate&&
uwsgi --http :8000 --ini uwsgi.ini

启动结果

  • 启动
[root@localhost project]# docker compose up -d
  • 查看状态
[root@localhost project]# docker compose ps -a
NAME                  IMAGE                 COMMAND                                          SERVICE   CREATED          STATUS                        PORTS
django-icwp-compose   django-icwp:compose   "/bin/bash start.sh"                             django    21 seconds ago   Restarting (0) 1 second ago
mysql-icwp-compose    mysql-5.7:compose     "docker-entrypoint.sh mysqld"                    mysql     21 seconds ago   Up 20 seconds                 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
nginx-icwp-compose    nginx-icwp:compose    "/docker-entrypoint.sh nginx -g 'daemon off;'"   nginx     21 seconds ago   Up 20
seconds

可以发现django-icwp-compose这个容器,一直在重启,并没有成功启动

失败原因分析

django容器启动失败的原因是,执行完django项目的启动脚本之后,没有前台进程了,容器就自动关闭了,然后在compose中又设置了自动重启,就一直保持尝试启动的状态

要想解决这个问题,只需要在执行完启动脚本后,留一个交互式的命令,来阻塞进程,避免容器自动关闭即可

改动start.sh

以下任意一个改动,都可以使得docker-compose启动容器后,自动运行django文章来源地址https://www.toymoban.com/news/detail-818009.html

  • 进入python3.8的交互式命令行
python3.8 manage.py collectstatic --noinput&&
python3.8 manage.py makemigrations&&
python3.8 manage.py migrate&&
uwsgi --http :8000 --ini uwsgi.ini&&
python3.8
  • 进行/bin/bash
python3.8 manage.py collectstatic --noinput&&
python3.8 manage.py makemigrations&&
python3.8 manage.py migrate&&
uwsgi --http :8000 --ini uwsgi.ini&&
/bin/bash

到了这里,关于【QA】docker-compose-部署django-如何设置自动启动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch第一讲 Docker-compose 单机部署Elasticsearch kibana esHead与配置认证证书设置密码

    docker安装 docker-compose安装配置,如果还有没安装docker的可以参考我的docker/docker-compose安装配置 本次讲解的是安装ES 7.13.3 现在目前官网给出的最新ES版本已经是8.x了,ElasticSearch官网:https://www.elastic.co/guide/index.html 好了长话短说,我们直接上docker配置文件,对于一些配置文件和数

    2024年02月03日
    浏览(33)
  • docker-compose部署kafka服务时如何同时允许内外网访问?

    最近在学习kafka相关知识,需要搭建自己的kafka环境。综合考虑后决定使用docker-compose来管理维护这个环境。 Bitnami的yml文件就很不错,这里直接拿来用了。 下载或创建上述yml文件后,启动: 服务启动后,可以进入容器访问kafka服务 使用我们的java客户端连接上述docker容器中的

    2024年02月08日
    浏览(32)
  • 如何在CentOS使用docker-compose部署Apache Superset并实现公网访问

    Superset是一款由中国知名科技公司开源的“现代化的企业级BI(商业智能)Web应用程序”,其通过创建和分享dashboard,为数据分析提供了轻量级的数据查询和可视化方案。Superset在数据处理和可视化方面具有强大的功能,能够满足企业级的数据分析需求,并为用户提供直观、灵

    2024年01月25日
    浏览(58)
  • 如何在Linux以docker-compose方式快速部署运行StackEdit,并实现公网访问

    StackEdit是一个受欢迎的Markdown编辑器,在GitHub上拥有20.7k Star!,它支持将Markdown笔记保存到多个仓库,包括Gitee、GitHub和Gitea。此在线笔记工具还提供了一些便捷功能,如拖拽或粘贴上传图片、文件搜索功能,以及可切换为炫酷的暗黑主题,这些功能特别适合那些喜欢使用Mar

    2024年02月05日
    浏览(39)
  • docker-compose设置redis密码

    要在 docker-compose.yml 文件中设置 Redis 的密码,你需要在 services 块中添加一个 environment 子块,并在其中添加一个 REDIS_PASSWORD 变量。例如: 注意:这是在使用 Docker Compose 版本 3.7 或更高版本时的语法。如果你使用的是更早的版本,可能需要使用不同的语法。你可以查看 Docker

    2024年02月11日
    浏览(64)
  • 【docker】 docker-compose如何更新services镜像 | docker-compose如何更新某个镜像 | docker-compose如何重启某个服务

    更新镜像: 首先,确保你已经获取了最新的镜像版本。这可以通过 docker pull 命令来实现,或者直接使用 docker-compose pull 命令更新所有服务的镜像。 拉取 指定 镜像 - 代码如下: 拉取 所有 镜像 - 代码如下: 注意:在拉取更新的镜像后,docker-compose不会自动重新启动服务。你需要

    2024年02月06日
    浏览(33)
  • docker-compose的部署

    目录 一、compose的概述 1.1 yaml的概述 1.2 yaml的数据结构 1.2.1 docker composeyml文件的常用手段 1.3 docker compose 1.4 yml文件编写  二、部署compose 2.1 下载docker-compose安装包  2.2 部署docker-compose 2.3 部署docker-compose 2.4 开启验证  三、compose编排安装tomcat容器 总结 compose是docker官网开发的,

    2024年02月01日
    浏览(43)
  • docker-compose部署redis

    docker-compose是什么? Docker Compose是一个用于 定义和运行多个容器Docker应用程序的工具 。它允许您定义一组容器,这些容器组成一个完整的应用程序,且这些容器之间可以互相通信。通过Docker Compose,您可以使用一个单独的文件来定义应用程序的 服务、网络、卷等元素,并且可

    2024年02月12日
    浏览(25)
  • 四十六、docker-compose部署

    一个项目肯定包含多个容器,每个容器都手动单独部署肯定费时费力。docker-compose可以通过脚本来批量构建镜像和启动容器,快速的部署项目。 使用docker-compose部署主要是编写docker-compose.yml脚本。 不论是Dockerfile还是docker-compose.yml脚本的编写都依赖上下文,所以需要明确部署文

    2023年04月19日
    浏览(30)
  • docker-compose部署Jenkins

    1、docker安装 1.1 配置docker-yum源 yum -y install yum-utils yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 1.2 查看可选择的docker-ce版本 yum list docker-ce --showduplicates|sort -r 1.3安装指定版本docker yum -y install docker-ce-19.03.9 ps:如果安装docker-ce-19.03.9报错: package docker

    2024年02月02日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包