如何构建 Docker 镜像(Django)

我用Django做了跟这个一样的事情。
制作Docker镜像的方法(Flask)。

首先,开始创建Django程序。

django-admin startproject django01
cd django01/
python manage.py migrate
python manage.py startapp home
from django.http import HttpResponse
from django.shortcuts import render
import random

def index(request):
    images = [
        "fmervo000001gsle.jpg",
        "rn2ola000000lk6e.jpg",
        "rn2ola000001gogf.jpg",
        "6fujishigai_s_s.jpg",
        "rn2ola000000lk6r.jpg",
        "5fujikawarakuza_s_s.jpg"
        ]

    url_base = "https://www.city.fuji.shizuoka.jp/page/gazou/fmervo000001dsro-img/"

    url = url_base + random.choice(images)  
    dd = {
        'url': url,
        }

    return render(request, 'home/home.html', dd)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta http-equiv="CONTENT-TYPE" content="text/html; charset=utf-8" />
<title>富士山</title>
</head>
<body>
<div class="container">
<p>富士山 航空写真</p>
<blockquote>
<img src="{{url}}" />
</blockquote>
<p>Courtesy: <a href="https://www.city.fuji.shizuoka.jp/page/gazou/fmervo000001dsro.html">富士市</a></p>
</div>
Jul/2/2021 AM 11:29<br />
</body>
</html>
from django.contrib import admin
from django.urls import path
from django.urls import include

urlpatterns = [
    path('', include('home.urls')),
    path('admin/', admin.site.urls),
]
uchida@iwata:~/projects/docker/django01$ gedit django01/urls.py
省略
INSTALLED_APPS = [
    'home',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
省略

确认 Django 的功能是否正常运行

./manage.py runserver

访问 http://localhost:8000/

django_aa.png

创建下一个文件。

Dockerfile: Dockerfile文件
requirements.txt: 依赖清单文件

# our base image
FROM alpine:3.13

# Install python and pip
RUN apk add --update py3-pip

# install Python modules needed by the Python app
COPY requirements.txt /usr/src/app/
RUN pip3 install --no-cache-dir -r /usr/src/app/requirements.txt

# copy files required for the app to run
COPY manage.py /usr/src/app/
COPY db.sqlite3 /usr/src/app/
COPY home/ /usr/src/app/home/
COPY django01/ /usr/src/app/django01/

# tell the port number the container should expose
EXPOSE 8000

# run the application
CMD ["python3", "/usr/src/app/manage.py", "runserver", "0.0.0.0:8000"]
Django==3.2.5

文件夹结构

$ tree -L 1
.
├── Dockerfile
├── db.sqlite3
├── django01
├── home
├── manage.py
└── requirements.txt

创建 Docker 镜像

docker build -t uchida/mydjangoapp .
$ docker images
REPOSITORY           TAG       IMAGE ID       CREATED          SIZE
uchida/mydjangoapp   latest    7bded2be2747   24 minutes ago   98.1MB
alpine               3.13      6dbb9cc54074   2 months ago     5.61MB

启动

docker run -p 8888:8000 --name mydjangoapp uchida/mydjangoapp

重新启动

docker run -p 8888:8000 uchida/mydjangoapp
docker_bb.png
bannerAds