LoginSignup
10
6

More than 5 years have passed since last update.

Djangoアプリの開発環境をKubernetes(minikube)に構築する方法

Last updated at Posted at 2018-12-10

はじめに

Gaiax Group Advent Calendar 2018の10日目の記事です。

インターン生ながらナチュラルにアドベントカレンダーに参加させてもらえて嬉しい限りです。
今回は、頭の中を整理することも兼ねて、ローカルにDjangoアプリをKubernetes上に構築する方法をまとめました。

目次

  • 前提
  • プロジェクトの作成
  • Dockerfileの作成とビルド
    • 作成
    • ビルド
  • Kubernetesへデプロイ
    • Kubernetes yamlファイルの作成
    • デプロイ
    • ブラウザで確認
  • あとがき
  • 参考

前提

  • pipenvとpyenvを導入済み
  • dockerを導入済み
  • minikubeを導入済み

プロジェクトの作成

pipenvでDjangoプロジェクトを作成します。Djangoのチュートリアルをご参考ください。

$ touch Pipfile
$ pipenv --python=3.7.1
$ pipenv install django
$ pipenv run django-admin startproject config .

実際はALLOWED_HOSTSを動的に設定する必要がありますが、今回の例ではALLOWED_HOSTSを全許可しておきます。

# ALLOWED_HOSTS = []
ALLOWED_HOSTS = ['*']

Dockerfileの作成とビルド

作成

FROM python:3.7.1

RUN mkdir /code/
COPY ./ /code/
WORKDIR /code/

RUN pip install --upgrade pip && \
    pip install pipenv && \
    pipenv --python /usr/local/bin/python
RUN pipenv install

CMD pipenv run python manage.py runserver 0:8000

ビルド

ビルドの前に、ホストマシンではなくminikubeのDockerを使用するように設定を変更します。

$ eval $(minikube docker-env)

この状態で、 latest 以外のタグを付けてビルドを行います。

$ docker build -t sample/django:v1 .

Kubernetesへデプロイ

Kubernetes yamlファイルの作成

下記の内容を k8s-django.yaml などのファイル名で保存します。

kind: Deployment
apiVersion: apps/v1
metadata:
  name: django
spec:
  replicas: 1
  selector:
    matchLabels:
      app: django
  template:
    metadata:
      labels:
        app: django
    spec:
      containers:
        - name: django
          image: "sample/django:v1"
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8000
              name: django
---
kind: Service
apiVersion: v1
metadata:
  name: django-svc
spec:
  selector:
    app: django
  ports:
    - protocol: TCP
      port: 8000
      name: django
  type: NodePort

デプロイ

$ kubectl create -f k8s-django.yaml

ブラウザで確認

サーバーが起動したことをブラウザで確認します。

$ minikube service django-svc

:tada: :rocket: :tada:

あとがき

今回はminikubeでDjangoアプリのデプロイをしてみました。
ホストマシンからminikube内のアプリにアクセスするのが思ったより難しいですね。

k8s-django.yaml にDjangoアプリを作成しましたが、同様にDBのyamlを定義してやることで、簡単にDBと接続させることが可能です。
yamlファイルをそのままGKEなどに使いまわしてデプロイできるので、開発ではdocker-compose、本番はk8sみたいな環境に比べると利便性高いですね!

参考

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6