前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >1. 构建django的docker镜像

1. 构建django的docker镜像

作者头像
Devops海洋的渔夫
发布于 2022-01-17 05:46:14
发布于 2022-01-17 05:46:14
73800
代码可运行
举报
文章被收录于专栏:Devops专栏Devops专栏
运行总次数:0
代码可运行

构建大致步骤

采用centos镜像作为地板镜像,然后安装python3、pip3,再安装django即可。

但是在构建的过程中也出现了不少问题。

  • 问题一:在Django 2.2中启动开发服务器时处理SQLite3错误
  • 问题二:Django配置runserver实现远程访问

解决的方式已经详细写在了上面两个链接答案中。

构建镜像的文件目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 django]# tree
.
├── Dockerfile   # 镜像构建Dockerfile
├── restart_service.sh  # 服务启动脚本
├── run_DockerFile.sh  # 镜像构建脚本
└── work   # django项目
    ├── db.sqlite3
    ├── manage.py
    ├── polls
...

Dockerfile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 django]# cat Dockerfile
# Using Centos for base image
FROM centos:latest
# author lijw
MAINTAINER lijw
# start run
    # step1: install python3 pip3
RUN yum install -y wget && \
    cd /opt && \
    wget "https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tgz" && \
    yum install libffi-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make -y && \
    cd /opt && \
    tar -zxvf Python-3.7.1.tgz && \
    cd /opt/Python-3.7.1 && \
    ./configure --prefix=/usr/local/python3 && \
    make && make install && \
    ln -s /usr/local/python3/bin/python3 /usr/bin/python3 && \
    ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 && \
    pip3 install --upgrade pip && \
    pip3 install ipython && \
    ln -s /usr/local/python3/bin/ipython3 /usr/bin/ipython3 && \
    # step2: install Django
    pip3 install Django && \
    # step3: install sqlite3
    cd ~ && \
    wget https://www.sqlite.org/2019/sqlite-autoconf-3270200.tar.gz && \
    tar -zxvf sqlite-autoconf-3270200.tar.gz && \
    cd sqlite-autoconf-3270200 && \
    ./configure --prefix=/usr/local && \
    make && make install && \
    cd ~ && \
    rm -rf sqlite-autoconf-3270200.tar.gz && \
    rm -rf sqlite-autoconf-3270200 && \
    mv /usr/bin/sqlite3  /usr/bin/sqlite3_old && \
    ln -s /usr/local/bin/sqlite3 /usr/bin/sqlite3 && \
    echo 'export LD_LIBRARY_PATH="/usr/local/lib"' >> /root/.bashrc && \
    source /root/.bashrc && \
    # step4: clear yum
    yum clean all
# Copy Django code to image
COPY work /work
# Start Django Service
CMD export LD_LIBRARY_PATH="/usr/local/lib" && \
    cd /work && python3 manage.py runserver 0.0.0.0:8000
[root@server01 django]#

编译生成镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 django]# cat run_DockerFile.sh
docker build -t django .
[root@server01 django]#

启动服务脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 django]# cat restart_service.sh
docker stop django
docker rm django
docker run --name django --restart always \
       -h djangoServer \
       -d -p 8000:8000 \
       django
[root@server01 django]#

运行中的docker进程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 django]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
1ef06015ff9b        django              "/bin/sh -c 'expor..."   2 minutes ago       Up 2 minutes        0.0.0.0:8000->8000/tcp                           django
093c3282ed6e        gogs/gogs           "/app/gogs/docker/..."   22 hours ago        Up 22 hours         0.0.0.0:10022->22/tcp, 0.0.0.0:10080->3000/tcp   gogs
[root@server01 django]#

测试访问

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 ~]# curl http://172.16.0.4:8000/polls/


<link rel="stylesheet" type="text/css" href="/static/polls/style.css">


    <ul>
    



        <li><a href="/polls/3/">What&#39;s up3?</a></li>
    



        <li><a href="/polls/2/">What&#39;s up2?</a></li>
    



        <li><a href="/polls/1/">What&#39;s up?</a></li>
    
    </ul>
[root@server01 ~]#

缺点

本次编译镜像安装了比较多的服务,所以镜像尽管采用了串联的方式去编写,清除了不需要的yum缓存以及安装文件,镜像依然较大。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 django]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
django                latest              1aca5ef73690        9 minutes ago       816 MB
<none>                <none>              a7c9243edeb0        10 minutes ago      816 MB
<none>                <none>              12567dcc7855        12 minutes ago      816 MB
<none>                <none>              a52e87c281be        15 minutes ago      816 MB
<none>                <none>              14a3e40c1302        17 minutes ago      816 MB
<none>                <none>              12c2262cbed5        34 minutes ago      816 MB
<none>                <none>              db9c18fbcbc7        4 hours ago         841 MB
docker.io/gogs/gogs   latest              08fa8ee955da        5 weeks ago         99.1 MB
docker.io/centos      latest              9f38484d220f        7 weeks ago         202 MB

在编译镜像的过程会产生很多none镜像,都应该删除掉。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@server01 django]# docker images | grep none | awk '{print $3}' | xargs docker rmi
Deleted: sha256:a7c9243edeb050e337818ea0ac9ece2b33ffc87febba62f033b068a1d2be9121
Deleted: sha256:8ef3d81763b3c50d19891d5a1bda860bbe442021cd0fb4f0ecb3f6e2dae4a74d
Deleted: sha256:df6f1865b5dfaa1950e055de25c88740dc447b571c8dbe25c2d9edf04fbea51f
Deleted: sha256:12567dcc7855d17fa93d22a97ae7091279d8b9fe88f65329c421604e751d5841
Deleted: sha256:b5ba6bf6bae1549c3c0a40745b33946096066c6cb7a64cd6847ae22230ecffeb
Deleted: sha256:1aaa5122053eba7e6ac9f3f9d46cd5068549b809866b8cc2352c33df5a38e66b
Deleted: sha256:a52e87c281be0935093821c1e80e3f12c006ba2ad7ad72e8c745efa7f5e9b18e
Deleted: sha256:d9b5547926368d40749fe641dbe06e25b7c78e0cf4ddb36ae67b87afbdabc07e
Deleted: sha256:4bf3ff836e1f6ef5c5caeb750a62ca61f24737e8c756de4424773feb7d04dc6b
Deleted: sha256:14a3e40c1302dffc4298685647dfb7e91cbf5e33496492dc64de6e67cca9626d
Deleted: sha256:3a5a02f60e80b29e9a096d30fcdf664ae52dfa658461bdf092dfd2d42eb04391
Deleted: sha256:d51b11a568529fb4a720f3b5bd0769c266db5af7b363f24d01064f35150cca1c
Deleted: sha256:12c2262cbed51e3cc46b19472f63570a9e9cbf748e56d4581f83e11388e141c9
Deleted: sha256:31b5244e8ce7d1109815023e11641ed09b9171f5611068d83775747570fb36c4
Deleted: sha256:916305e485efd3185c9aa8866fbfc27c3953490f11b7d8d2756d2cb9d5f433e5
Deleted: sha256:db9c18fbcbc71f4a9526a68585c35be31f65730b891955f0b08abc376fe4a89e
Deleted: sha256:bd24b4c744ed1fa90f5b2896c8b6c96c714fb3ba19693f139bb5bb65030f12ce
[root@server01 django]#
[root@server01 django]# docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
django                latest              1aca5ef73690        11 minutes ago      816 MB
docker.io/gogs/gogs   latest              08fa8ee955da        5 weeks ago         99.1 MB
docker.io/centos      latest              9f38484d220f        7 weeks ago         202 MB
[root@server01 django]#
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 海洋的渔夫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
子网划分,主机号,网络号计算
这是在做网络题时总结的一些经验和见解,略显粗糙,主要是记一下常用的ABC3类地址和相关的子网号,主机号的计算
全栈程序员站长
2022/09/12
8.9K0
IPv4地址子网划分方法
子网划分在网络中是一个重点,作为一名网络工程师必须学会,子网划分共有三种方法,在此重点讲述第一种方法,剩余的两种方法略作介绍。
小狐狸说事
2022/11/17
1.4K0
子网划分习题及考点分析(含答案及理解)
1.92.168.1.0/24 使用掩码255.255.255.240 划分子网,其子网数为( ),每个子网内可用主机地址数为( )
全栈程序员站长
2022/09/14
9.6K0
IP地址与子网划分
IP地址是一个32位的二进制地址,被分为4个8位段(八位组)。人们不习惯使用32的二进制地址或8位的二进制八位组,所以IP地址最常用的表达形式是点分十进制形式。
xxpcb
2020/08/04
1.6K0
简单搞懂子网划分,学会子网划分这篇就够了(例题详解)
有类IP地址规划的缺陷:使用默认掩码的问题:地址范围过大或过小,导致IP地址的浪费!
全栈程序员站长
2022/09/14
11K0
计算机网络-划分子网 四大类必会题型
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0 128 64 32 16 8 4 2 1
全栈程序员站长
2022/09/07
1.9K0
计算机网络-划分子网 四大类必会题型
4.IP地址与子网划分
去掉网络地址、广播地址即为可用地址。 一、IP地址:(32位,4字节) 逻辑地址,也就是IP网络地址。采用的是“网络地址+主机地址”(网络号 + 主机号)的形式表示的,4字节,以 . 分隔,用十进制
见贤思齊
2020/08/05
1.9K0
4.IP地址与子网划分
子网划分基础
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6
dogfei
2020/07/31
1.1K0
网络号 IP地址 子网掩码如何计算
1.Internet上每一台计算机都有唯一的地址来标识它的身份,即IP地址,使用域名其实也是要转化为IP地址的。
双面人
2019/06/02
4.4K0
IP地址(分类)、子网掩码、网络号、主机号、子网号
IP地址被用来给Internet上的电脑一个编号。大家日常见到的情况是每台联网的PC上都需要有IP地址,才能正常通信。我们可以把“个人电脑”比作“一台电话”,那么“IP地址”就相当于“电话号码”,而Internet中的路由器,就相当于电信局的“程控式交换机”。 IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)
全栈程序员站长
2022/09/12
9.9K0
IP地址(分类)、子网掩码、网络号、主机号、子网号
IP地址分类以及子网划分「建议收藏」
IP地址:是网络层的概念,IP地址长度为32位,分为四个8位,用点分十进制来表示,每部分范围0~255(0~255 . 0~255 . 0~255 . 0~255)。一个可有2的32次方个IP地址。
全栈程序员站长
2022/08/24
6.1K0
IP地址分类以及子网划分「建议收藏」
思维导图——快速掌握子网划分(实例详解)
作用一:计算网络号,通过网络号选择正确的网络设备连接终端设备 1.清楚IP地址四段点分十进制数和子网掩码,对应的网络号是什么 2.交换机是用来连接相同网段的设备,路由器是用来连接不同网段的设备。网络号一 样的,即 在相同网段,网络不一样的,即不同网段 3.计算方法:把十进制数的IP地址换 算成二进制数,把子网掩码也由十进制数换算成二进制数, 两对二进制数对齐做‘与’运算,即可得出网络号
全栈程序员站长
2022/09/07
2K0
思维导图——快速掌握子网划分(实例详解)
子网划分介绍以及如何划分子网(例题详解)
子网划分这项技术用来把一个单一的IP网络地址划分成多个更小的子网(subnet)。 这种技术可使一个较大的分类IP地址能够被进一步划分为几个子网。这样就可以让使用一个大的分类地址(classful address)的企业能给该企业中处于不同地理位置的分公司分配不同的子网,对外整个企业是一个网络地址,而在内部,不同分公司则有不同的子网地址,因而不需要为每个站点都分别申请一个网络地址。
全栈程序员站长
2022/09/14
3.5K0
子网划分介绍以及如何划分子网(例题详解)
13、IP地址和子网划分(VLSM)
这个网络中存在2^16-2个IP地址,但是在一个网络中很少会用到这么多的IP,那么我们将这个网络划分为多个子网。
堕落飞鸟
2022/01/05
9400
IP地址与子网划分很重要,这篇文章香的很!
另外,全零(0.0.0.0.)地址指任意网络。全1的IP地址(255.255.255.255)是当前子网的广播地址。
网络技术联盟站
2021/08/18
1.5K0
子网划分方法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
suveng
2019/09/17
2K1
子网划分及子网掩码的计算
①A类:占有1个字节(8位),定义最高位为 0 来标识此类地址,余下7位为真正的网络地址,支持
fliter
2023/10/05
2.6K0
子网划分及子网掩码的计算
计算机网络:一文带你了解子网掩码相关的知识
这篇文章作者主要分享什么是深度学习以及深度学习的原理特征,深度学习(Deep Learning)是机器学习的一个分支,旨在通过模拟人脑的神经网络结构来解决复杂的任务。深度学习通过多层神经网络,自动从数据中学习特征,避免了传统机器学习中手动特征工程的繁琐过程。
小明互联网技术分享社区
2024/12/09
1.1K0
计算机网络:一文带你了解子网掩码相关的知识
3分钟教你子网划分–(内含习题讲解)
IP地址分为IPV4和IPV6,但现在目前大家所常用的为IPV4。 IPV4是由32位二进制数组成,分成四组,每组八位。例如:11000000 11110000 00000000 00000000 为了便于配置通常表示成点分十进制 例如:192.168.1.1 IPV6由128位组成,一般用冒号分隔,十六进制表示
全栈程序员站长
2022/09/14
8K0
什么是子网掩码?
A 类IP地址:一个 A 类地址由1 字节的网络地址和3字节主机地址形成 B 类 IP地址:一个B类地址由2字节的网络地址和2字节的主机地址形成 C 类 IP 地址:一个C 类地址由3字节的网络地址和1字节的主机地址形成
王小明_HIT
2021/05/20
1.5K0
推荐阅读
相关推荐
子网划分,主机号,网络号计算
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档