DockerコンテナにDjangoを入れて起動してみた
- 概要
- Dockerコンテナ起動まで
- PythonやDjangoのインストール
- Djangoのプロジェクトとアプリを作成し、起動
- MySQL5.7のインストール
- Django側のMySQL関連設定
- ホストからDockerコンテナを立ち上げた後、アプリを起動
Dockerコンテナ起動まで
Dockerイメージ(CentOS)をPullしてくる
docker pull centos
適当なIPを指定してDockerコンテナ(CentOS)を起動しつつログイン
docker run -it -p 8000:8000 centos /bin/bash
PythonやDjangoのインストール
Python3系インストールのためのリポジトリをインストール
yum install -y https://centos7.iuscommunity.org/ius-release.rpm
Python3.6をサーチしてみる
yum search python36
Python3.6と関連するものをインストール
yum install -y python36u python36u-devel python36u-libs
"python3"と打てばPythonコマンドが有効になるよう、シンボリックリンクを張る
ln -s /usr/bin/python3.6 /usr/bin/python3
pipをインストール
yum install -y python36u-pip
インストールされたpipのバージョンが古いのでアップグレードする
/usr/bin/pip3.6 install --upgrade pip
Django、Django REST Framework、Django-Filterをインストール
pip install django pip install djangorestframework pip install django-filter
Djangoのプロジェクトとアプリを作成し、起動
cd /usr/local/bin/
Djangoのプロジェクトを作成
django-admin.py startproject myprj
プロジェクトのルートディレクトリに移動
cd myprj
アプリを作成
python3 manage.py startapp myapp
マイグレーションを実行
python3 manage.py migrate
アプリを起動してみる
python3 manage.py runserver 0.0.0.0:8000
アプリ起動用のスクリプトを作っておく
vim /usr/local/bin/init.sh
python3 /usr/bin/myprj/manage.py runserver 0.0.0.0:8000 while true ; do /usr/bin/fish done
MySQL5.7のインストール
インストール用リポジトリのインストール後、インストール実行
rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm yum -y install mysql-community-server
MySQLのrootユーザーのパスワードを確認
cat /var/log/mysqld.log |grep password →パスワードが表示されるのでコピー等しておく
MySQLのセキュリティ設定を行う
mysql_secure_installation ※先程確認したパスワードと、新しいパスワード入力を求められる
root以外のユーザーを作成
grant all privileges on *.* to hoge@localhost identified by '任意のパスワード' with grant option; flush privileges;
データベースを作成
create database myapp_db;
Django側のMySQL関連設定
PyMySQLのインストール
pip install PyMySQL
manage.pyにPyMySQLの設定を追記
vim manage.py
import pymysql
pymysql.install_as_MySQLdb()
vim settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'myapp_db', 'USER':'hoge', 'PASSWORD':'hogeのパスワード', 'HOST':'localhost', 'PORT':'3306', 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", }, 'TEST': { 'NAME': 'test_sample' } } }
マイグレーション実行
python3 manage.py makemigrations python3 manage.py migrate
Ctrl+p,Ctrl+qでコンテナから抜けた後、コンテナをDockerイメージとして保存
#起動中のコンテナのコンテナIDを確認 docker ps #コミットして保存 docker commit コンテナID mychuno_myapp
Dockerコンテナを止める
docker stop コンテナID
ホストからDockerコンテナを立ち上げた後、アプリを起動
Docker起動後にMySQLも起動
- 先程保存したDockerイメージを用いる
- -vオプションでホストの任意のディレクトリにバックアップできるようにしておく
docker run -it -p 8000:8000 -v /Users/hchuno/projects/docker_myapp/mychuno:/usr/local/bin/myprj_bk --privileged mychuno_myapp /sbin/init
Dockerコンテナにログインしてアプリを起動
docker ps docker exec -it CONTAINER_ID /usr/local/bin/init.sh /bin/bash