docker でアプリ環境構築２

[docker でアプリ環境構築](https://qiita.com/flour_planaria/items/6841a19fa3c22b082f75) のつづき



## 開発環境の展開



##### GitHub への登録

作成した開発環境を共有するために、GitHub へ環境を作成する

リポジトリ名は test として構成は以下の通り

[test]
├─db/
│  └─init.sql
├─test/
│  ├─config/
│  │  ├─__ init__.py
│  │  ├─settings.py
│  │  ├─urls.py
│  │  └─wsgi.py
│  ├─polls/
│  │  └─チュートリアルで作成した構成
│  ├─Dockerfile
│  ├─manage.py
│  └─requirements.txt
├─web/
│  └─nginx.conf
├─.gitignore
└─docker-compose.yml



[docker でアプリ環境構築](https://qiita.com/flour_planaria/items/6841a19fa3c22b082f75) から手作業で実行していた部分を、開発環境を展開するために設定を追記している



```init.sql
CREATE DATABASE IF NOT EXISTS manage CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER IF NOT EXISTS 'admin'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON manage.* TO 'admin'@'%';
GRANT ALL PRIVILEGES ON test_manage.* TO 'admin'@'%';

FLUSH PRIVILEGES;
```

初期データベース、ユーザの作成と権限付与を init.sql 内で実施する



```settings.py
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'manage',
        'USER': 'admin',
        'PASSWORD': 'password',
        'HOST': 'app_db',
        'PORT': '3306',
        'OPTIONS': {
            'charset': 'utf8mb4',
        },
        'TEST': {
            'NAME': 'test_manage',
        },
    }
}

# Logging. 
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    'formatters': {
        'django.server': {
            '()': 'django.utils.log.ServerFormatter',
            'format': '[%(server_time)s] %(message)s a',
        },
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s '
                      '%(process)d %(thread)d %(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': 'INFO',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
            'formatter': 'verbose',
        },
        'django.server': {
            'level': 'INFO',
            'class': 'logging.StreamHandler',
            'formatter': 'django.server',
        },
        'file_polls_log': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/app/logs/polls.log',
            'formatter': 'verbose',
        },
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'mail_admins'],
            'level': 'INFO',
        },
        'django.server': {
            'handlers': ['django.server'],
            'level': 'INFO',
            'propagate': False,
        },
        'polls': {
            'handlers': ['file_polls_log'],
            'level': 'DEBUG',
            'propagate': False,
        },
    }
}
```

データベース設定にテスト用定義を追加

ログ出力設定を追加



##### 環境の構築

作成した git リポジトリを clone する

```
C:\>git clone https://github.com/****/test.git
Cloning into 'test'...
```



docker から環境を作成

```
D:\test>docker-compose up -d
...
Creating app_db ... done
Creating app_test ... done
Creating app_web  ... done

```



動作確認

![docker03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464760/e3eeced3-e46d-a231-c633-26e32acd9328.png)


管理画面と

![docker04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464760/31790127-168c-36a0-84f1-18fd68d700aa.png)


チュートリアルで作成した画面



これはひどい...

静的コンテンツが配置されていないのと、データベースが存在しないのが原因かなー

とりあえずコマンド実行して解消するかを確認してみる



```
docker-compose run --rm test ./manage.py makemigrations polls
docker-compose run --rm test ./manage.py migrate
docker-compose run --rm test ./manage.py collectstatic
```

再確認

![docker05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464760/c3baa548-61cc-7b77-68da-e5717ff4d27c.png)


管理画面に静的コンテンツが反映されている

![docker06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/464760/18c6c565-83d9-011a-9db1-ca5acb64efda.png)


チュートリアルで作成した画面もデータベースエラーにならず、表示された



最後に実施したコマンドも自動化したほうがいいのかなー