如果您想了解使用Dockerfile封装Django镜像的相关知识,那么本文是一篇不可错过的文章,我们将对dockerdjango镜像进行全面详尽的解释,并且为您提供关于Django+Dockerfi
如果您想了解使用Dockerfile封装Django镜像的相关知识,那么本文是一篇不可错过的文章,我们将对docker django镜像进行全面详尽的解释,并且为您提供关于Django + Dockerfile + Cron、Docker | 使用dockerfile生成镜像,清理docker空间、docker 为镜像添加ssh服务-使用Dockerfile 创建、Docker 入门私人笔记(十)使用 Dockerfile 封装镜像的注意事项的有价值的信息。
本文目录一览:- 使用Dockerfile封装Django镜像(docker django镜像)
- Django + Dockerfile + Cron
- Docker | 使用dockerfile生成镜像,清理docker空间
- docker 为镜像添加ssh服务-使用Dockerfile 创建
- Docker 入门私人笔记(十)使用 Dockerfile 封装镜像的注意事项
使用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?
我已经为一项任务工作了几天。构建一个单独的 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空间
用dockerfile
生成镜像并挂载数据卷
编写dockerfile
文件
- 创建
dockerfile01
文件
# 基础镜像
FROM centos
VOLUME ["volume01", "volume02"]
CMD echo "-----end----"
docker build
构建镜像
docker build -f ./dockerfile01 -t xiao-centos .
- 启动镜像
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 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 # 还是报错
结论:
无法解决问题,且删除所有容器、镜像存在的风险较大,不建议使用!
尝试方法二(推荐使用):
- 停止docker服务
- 重新启动docker服务
- 再次运行容器
# 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 创建
首先,基于要添加内容的镜像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 封装镜像的注意事项
使用 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 镜像在封装完成后必须启动一个容器进行验证
,验证方式包括但不限于:
- 进入容器中,对比 Dockfile 查看应用安装、文件配置、进程运行、环境变量等是否全部正常;
- 从外部访问容器内部署的应用例如 http 或者 ssh 看这些服务是否正常运行。
关于使用Dockerfile封装Django镜像和docker django镜像的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Django + Dockerfile + Cron、Docker | 使用dockerfile生成镜像,清理docker空间、docker 为镜像添加ssh服务-使用Dockerfile 创建、Docker 入门私人笔记(十)使用 Dockerfile 封装镜像的注意事项的相关知识,请在本站寻找。
本文标签: