使用Dockerfile搭建Django镜像

本文详细介绍了如何使用Dockerfile搭建Django应用的镜像。首先解释了Dockerfile的作用,接着讲解了Dockerfile的语法。然后在/opt下创建docker目录,下载Django源码和相关文件,编写Dockerfile和run.sh脚本。通过执行Dockerfile,成功构建并启动Django镜像,将8000端口映射到主机,最后展示了如何进入容器进行交互式调试。

使用Dockerfile搭建Django镜像,遇到了好多问题,不过一一解决,总结的过程展示在下面

1.dockerfile是什么?

  • Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

  • 构建三步骤
    在这里插入图片描述

  • 2.dockerfile语法说明


'''1.DOckerfile常用命令 '''
FROM python:3.6                     # 指定拉取镜像版本
ENV PYTHONUNBUFFERED 1              # 不缓冲stdin、stdout和stderr,直接把输出重定向到文件
MAINITAINER zhangsan                # 指定作者
RUN mkdri /code                     # 运行的linux命令
WORKDIR /code                       # 指定项目工作根路径
ADD . /code/                        # 将宿主机文件复制到镜像中
COPY dj.conf /etc/nginx/conf.d      # docker内部文件拷贝
VOLUME ["/data1","/data2"]          # 将宿主机文件夹挂载到容器中
EXPOSE 8080                         # 暴露端口
CMD ["sh","/code/start.sh"]         # 容器启动时要运行的命令
CMD ["python", "manage.py", "runserver", "0:8000"]

'''2.生成镜像并运行容器'''
docker build -t nginx:v1 -f Dockerfile-nginx .         # 使用Dockerfile-nginx文件生成镜像 nginx:v1
docker push linux-node4.example.com/test/nginx:v1      # 推送镜像到harbor中
docker run -d -p 192.168.56.14:8000:8080 nginx:v1      # 运行docker容器
  • 3.使用nginx镜像简单测试dockerfile使用

FROM nginx:v1
COPY index.html  /usr/local/nginx/html   # 需要在当前目录中创建index.html文件

部署过程

1.查看镜像
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
centos                    latest              9f38484d220f        3 weeks ago         202MB
2.在/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

cp /etc/yum.repos.d/CentOS-Base.repo /opt/docker

在这里插入图片描述
注:这张图是我已经写完 Dockerfile、run.sh两个文件,你们刚下载完成是没有这两个文件的

3.编写Dockerfile vim Dockerfile
FROM centos
FROM python:3.6.6

ADD CentOS-Base.repo /etc/yum.repos.d
ADD epel.repo /etc/yum.repos.d

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 qishidj

ADD run.sh /opt/qishidj/run.sh
RUN sed -i "s/ALLOWED_HOSTS = \[\]/ALLOWED_HOSTS = \['\*'\]/g" /opt/qishidj/qishidj/settings.py
WORKDIR /opt/qishidj
RUN chmod 777 run.sh
EXPOSE 8000
CMD ["/bin/sh","run.sh"]
  • 详细配置(配有注释,供参考)
FROM centos
MAINTAINER TigerLee

ADD CentOS-Base.repo /etc/yum.repos.d
ADD epel.repo /etc/yum.repos.d  # 将当前目录的epel.repo文件拷贝到容器的/etc/yum.repos.d目录下
RUN yum clean all
RUN yum makecache
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 qishidj

ADD run.sh /opt/qishidj/run.sh
RUN sed -i "s/ALLOWED_HOSTS = \[\]/ALLOWED_HOSTS = \['\*'\]/g" /opt/qishidj/qishidj/settings.py
WORKDIR /opt/qishidj
RUN chmod 777 run.sh
EXPOSE 8000  # 声明容器端口
CMD ["/bin/sh","run.sh"]  # 容器启动时默认执行的命令
4.编写run.sh vim run.sh
python3 manage.py runserver 0.0.0.0:8000

开始构建

[root@tiger docker]# sudo docker build -t tiger/django-217 .

构建完成后,可以看到生成一个新镜像:
在这里插入图片描述

此时后台启动镜像,并把8000端口映射出来

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

在这里插入图片描述
查看容器运行状态:
在这里插入图片描述
使用交互式模式进入容器,再使用ps -ef查看运行的进程

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用和调试
执行完以上的步骤,已经可以使用这个封装了django的镜像,接下来查看一下登陆界面
在这里插入图片描述
参考的博客相当详细:https://www.cnblogs.com/tiger666/articles/10671509.html

https://www.cnblogs.com/one-tom/p/11106837.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值