GVKun编程网logo

使用Dockerfile封装Django镜像(docker django镜像)

7

如果您想了解使用Dockerfile封装Django镜像的相关知识,那么本文是一篇不可错过的文章,我们将对dockerdjango镜像进行全面详尽的解释,并且为您提供关于Django+Dockerfi

如果您想了解使用Dockerfile封装Django镜像的相关知识,那么本文是一篇不可错过的文章,我们将对docker django镜像进行全面详尽的解释,并且为您提供关于Django + Dockerfile + Cron、Docker | 使用dockerfile生成镜像,清理docker空间、docker 为镜像添加ssh服务-使用Dockerfile 创建、Docker 入门私人笔记(十)使用 Dockerfile 封装镜像的注意事项的有价值的信息。

本文目录一览:

使用Dockerfile封装Django镜像(docker django镜像)

使用Dockerfile封装Django镜像(docker django镜像)

第一步:

在/opt下建立了docker目录,下载一个django-2.1.7的源码包,

touch Dockerfile和run.sh,其中run.sh是用来执行Django的bash脚本,Dockerfile即为自动build python的文件,此文中的核心也是Dockerfile.

下载阿里云扩展源epel.repo文件,也放在此目录

wget https://media.djangoproject.com/releases/2.1/Django-2.1.7.tar.gz
wget -O epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
 

第二步:编写Dockerfile

FROM centos
MAINTAINER TigerLee

ADD epel.repo /etc/yum.repos.d  # 将当前目录的epel.repo文件拷贝到容器的/etc/yum.repos.d目录下
RUN yum update -y  # 运行命令

RUN yum install -y python36
RUN yum install -y python36-pip
RUN pip3 install setuptools
ADD Django-2.1.7.tar.gz /opt/

WORKDIR /opt/  # 进入/opt目录
RUN mv Django-2.1.7 django  # 运行命令mv

WORKDIR /opt/django    # 进入/opt/django目录
RUN python3 setup.py install

WORKDIR /opt
RUN django-admin.py startproject qishi3dj

ADD run.sh /opt/qishi3dj/run.sh
WORKDIR /opt/qishi3dj
RUN chmod 777 run.sh
EXPOSE 8000  # 声明容器端口
CMD ["/bin/sh","run.sh"]  # 容器启动时默认执行的命令
FROM centos
MAINTAINER TigerLee

ADD epel.repo /etc/yum.repos.d
RUN yum update -y

RUN yum install -y python36
RUN yum install -y python36-pip
RUN pip3 install setuptools
ADD Django-2.1.7.tar.gz /opt/

WORKDIR /opt/
RUN mv Django-2.1.7 django

WORKDIR /opt/django
RUN python3 setup.py install

WORKDIR /opt
RUN django-admin.py startproject qishi3dj

ADD run.sh /opt/qishi3dj/run.sh
WORKDIR /opt/qishi3dj
RUN chmod 777 run.sh
EXPOSE 8000
CMD ["/bin/sh","run.sh"]
简洁配置版

第三步:编写run.sh

python3 manage.py runserver 0.0.0.0:8000

第四步:创建镜像在docker目录下执行命令

sudo docker build -t xumou/django-217 .     # 这个 .  不能忘记,不然不能创建成功

第五步:查看docker的镜像(显示创建成功)

docker images

第六步:后台启动镜像,并把8000端口影射出来

[root@tom docker]# docker run -d -p 9090:8000 xumou/django-217

第七步:查看容器状态:

docker ps

第八步:使用交互式模式进入容器,再使用ps -ef查看运行的进程

进入容器的交互模式必须先将镜像运行后产生一个容器
先运行镜像并使其后台持续运行:
[root@tom docker]# docker run -d -i -t da9bb3ba44d6 /bin/bash
然后再执行命令行进入容器交互模式:
[root@tom docker]# docker exec -it 2b47bb54dfb7(容器id) /bin/bash

第九步:查看运行的进程:

[root@2b47bb54dfb7 qishi3dj]# ps -ef

第十步:使用和调试()  查看运行中的容器:

[root@tom docker]# docker container ls

第十一步:进入容器:

[root@tom docker]# docker exec -it 2b47bb54dfb7(容器id) /bin/bash

第十二步:(已经进入了容器内了),找到这个django项目的settings.py文件

[root@2b47bb54dfb7 qishi3dj]# ls

第十三步:将settings文件的host添加  *

 第十四步:在浏览器中输入django的访问页面

 

Django + Dockerfile + Cron

Django + Dockerfile + Cron

如何解决Django + Dockerfile + Cron?

我已经为一项任务工作了几天。构建一个单独的 Dockerfile(不使用 docker-compose 只是一个独立的 Dockerfile),它应该生成一个图像并运行我以前没有做过的 cron 作业。我相信我快到了,但是在运行脚本时遇到了配置/设置问题。

我这里有一个简短的 Dockerfile...

FROM python:3.7.8-alpine


RUN apk update

RUN apk add --no-cache libpq postgresql-contrib python3-dev
RUN apk add --no-cache supervisor postgresql-dev

RUN python3 -m pip install --upgrade pip

ADD ./app/requirements.txt /files/requirements.txt
ADD ./app/reqs/ /files/reqs/
RUN python3 -m pip install -r /files/requirements.txt

RUN touch /var/log/cron.log
ADD cronjobs/crontab.txt /crontab.txt
ADD cronjobs/cron_script.sh /cron_script.sh
ADD ./send_email.py /send_email.py
copY cronjobs/entry.sh /entry.sh
ADD ./send_email.py /app
copY ./send_email.py /app

RUN chmod +x /send_email.py
RUN chmod 755 /cron_script.sh /entry.sh
RUN /usr/bin/crontab /crontab.txt

copY . /cron_app


CMD ["/entry.sh"]

crontab.txt 文件在这里..

* * * * * /cron_script.sh > /dev/stdout

entry.sh 文件在这里。

#!/bin/sh

echo "Docker container running....."
    
/usr/sbin/crond -f -l 8

调用主要python脚本的脚本。

#!/bin/sh

echo "Python script running..."
cd /cron_app
python3 send_email.py
echo "python script has finished..."

脚本发送一封电子邮件,它使用 django 的设置,以及我在 os.environ.setdefault("DJANGO_SETTINGS_MODULE","app.settings") 下的设置文件中的电子邮件配置

import requests
from django.core.mail import send_mail
from django.conf import settings


def status_email():
    # in here just triggering some emails.


status_email()

当我构建和运行时,我使用...

docker build -f cron/Dockerfile .
docker run #contID

错误输出显示脚本开始,然后以 AttributeError 结束。

Docker container running...
Python script running...

Traceback (most recent call last):
  File "status_email.py",line 36,in <module>
    check_status()
  File "status_email.py",line 27,in status_email
    send_mail(''Status Email'',message,settings.DEFAULT_EMAIL,[settings.DEFAULT_EMAIL,])
  File "/usr/local/lib/python3.7/site-packages/django/conf/__init__.py",line 54,in __getattr__
    return getattr(self._wrapped,name)
  File "/usr/local/lib/python3.7/site-packages/django/conf/__init__.py",line 159,in __getattr__
    return getattr(self.default_settings,name)
AttributeError: module ''django.conf.global_settings'' has no attribute ''DEFAULT_EMAIL''

python script has ran...

这对我来说非常艰难,只是在不使用 3rd 方软件包的情况下寻找正确方向的一些指导。任何提示/建议将不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

Docker | 使用dockerfile生成镜像,清理docker空间

Docker | 使用dockerfile生成镜像,清理docker空间

dockerfile生成镜像并挂载数据卷

编写dockerfile文件

  1. 创建dockerfile01 文件
# 基础镜像
FROM centos

VOLUME ["volume01", "volume02"]

CMD echo "-----end----"
  1. docker build 构建镜像
docker build -f ./dockerfile01 -t xiao-centos .

  1. 启动镜像
docker run -it 镜像ID /bin/bash

可以看到生成镜像时自动挂载的,数据卷目录

以上dockerfile方式属于匿名挂载数据卷

清理docker使用空间

我个人使用的是单核2G的云服务器,用了快三年了,内存、cpu严重吃紧,所以就尝试了清理docker使用空间,主要是删除未使用过的镜像、容器、数据卷、网络命令,具体如下:

官方文档链接 https://docs.docker.com/config/pruning/

  • 执行如下可以查看 Docker 的磁盘使用情况(类似于 Linux 上的 df 命令)
docker system df
  • 删除所有未使用过的镜像
docker image prune -a
  • 删除所有停止的容器

    docker container prune
    docker rm -f $(docker ps -aq)
  • 仅删除超过 24 小时的停止容器
docker container prune --filter "until=24h"
数据卷永远不会自动删除,因为这样做可能会破坏数据
  • 删除未使用的数据卷
docker volume prune
  • 删除没有使用过的网络
docker network prune
  • 删除所有未使用过的资源
docker system prune

手动删除/var/lib/docker/volumes的问题解决

当时清理docker使用空间的时候,清过头了,一下子把挂载的数据卷也给顺手清理了,真是自己给自己找事做。

错误信息

手动删除了挂载到宿主机上的所有数据卷,在启动容器挂载数据卷的时候就会报错

如下,重新运行容器,原先具名挂载数据卷juming-nginx,报错信息如下

docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx

docker: Error response from daemon: open /var/lib/docker/volumes/juming-nginx/_data: no such file or directory.

尝试方法一(不建议使用):

  1. 删除所有容器
  2. 删除所有镜像
  3. 重新运行一个新的容器并挂载数据卷

    # 1
    docker rm -f $(docker ps -aq)
    
    # 2
    docker rmi -f $(docker images -aq)
    
    # 3.
    docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx
    
    # 还是报错

结论:

无法解决问题,且删除所有容器、镜像存在的风险较大,不建议使用!

尝试方法二(推荐使用):

  1. 停止docker服务
  2. 重新启动docker服务
  3. 再次运行容器
# 1
systemctl stop docker

# 2
systemctl restart docker

# 3
docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx

# 没有报错,docker ps查看 成功运行

结论

没有报错,docker ps查看,成功运行

docker volume ls 查看镜像,可以看到具名数据卷juming-nginx已显示出来了

docker volume ls
DRIVER    VOLUME NAME
local     a9b39215509378332ec9dfcdc3e10857b500694ea66efd9c2b7a6a9c55a2f10a
local     juming-nginx

我是 甜点cc

热爱前端,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚,等待着一个创业机会。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。

希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。

docker 为镜像添加ssh服务-使用Dockerfile 创建

docker 为镜像添加ssh服务-使用Dockerfile 创建

首先,基于要添加内容的镜像ubuntu:18.04运行一个容器,

宿主机(下面步骤是在容器中创建的,应该在宿主机创建进行以下步骤)

一、创建一个工作目录

 二、创建Dockerfile 和脚本run.sh

编写脚本

vi 命令不起作用apt-get 也无效,报错unable to  locate package vim则需要更新一下软件源 apt-get update,然后在apt-get install vim

run.sh内容通上一篇

在宿主机通用生成rsa密钥信息,然后创建authoriized_keys

三、编写Dockerfile文件如下

 

四、创建镜像在sshd_ubuntu目录下,

docker builder -t sshd:dockerfile .

 出现Successfully buillt xx 构建成功

然后测试镜像,运行容器

运行成功,效果与commit命令创建的相同。

注意:authorized_keys文件的位置要通Dockerfile的相一致,否则复制文件找不到文件

 

Docker 入门私人笔记(十)使用 Dockerfile 封装镜像的注意事项

Docker 入门私人笔记(十)使用 Dockerfile 封装镜像的注意事项

使用 Dockerfile 封装镜像时务必注意一些细节不要出错,例如其中的 ADD 命令,在镜像封装过程中即使出错,过程也不会因此中断或者提示,这样很难发现其实已经出错以及难以定位出错的位置,会浪费很多时间。例如:

ADD tomcat.ini /etc/supervisord.d/tomcat.ini
ADD tomcat.ini /etc/supervisor.d/tomcat.ini

通常 Linux 下的应用对应的服务名称以及配置文件名称,常常比应用的名称多一个消息字母 d ,例如上面两段代码只差了一个字母 d ,不仔细观察很难发现,即使过后检查也很难发现。再比如 ssh 和它的服务进程 sshd ,http 和它的服务进程 httpd 。

同时这个问题也是一个警示:任何用于生产环境的 docker 镜像在封装完成后必须启动一个容器进行验证,验证方式包括但不限于:

  1. 进入容器中,对比 Dockfile 查看应用安装、文件配置、进程运行、环境变量等是否全部正常;
  2. 从外部访问容器内部署的应用例如 http 或者 ssh 看这些服务是否正常运行。

关于使用Dockerfile封装Django镜像docker django镜像的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Django + Dockerfile + Cron、Docker | 使用dockerfile生成镜像,清理docker空间、docker 为镜像添加ssh服务-使用Dockerfile 创建、Docker 入门私人笔记(十)使用 Dockerfile 封装镜像的注意事项的相关知识,请在本站寻找。

本文标签: