LAMP環境ですが、少しアレンジしてdockerで作成してもよろしいでしょうか?
最近のサーバー構築だと、docker化やクラウドが主流だと思うのでそちらで構築などをしたいのですがよろしいでしょうか?
ご自身の責任の範囲内でやられるのでしたら良いですよ!
【dockerについて行ったこと】
dockerの環境構築について
■dockerのインストール手順
※macでのインストール手順になります。
1. brewを用いてインストール
ターミナルで以下のコマンドを入力
brew install docker
その後
brew cask install docker
Homebrewをインストールしている方はこちら
https://awesome-linus.com/2019/08/17/mac-homebrew-install/
2. dockerアプリケーションの起動確認
finderからdocker.appを起動
※起動すると右上にクジラのアイコンが表示されるはずです。
3. docker,およびdocker-composeのバージョンを確認
以下のコマンドをターミナルで入力
docker --version
Docker version 19.03.13, build 4484c46d9d
docker-compose --version
docker-compose version 1.27.4, build 40524192
上記のような結果が表示されればOKです。
■dockerによるpythonの環境構築
※ macを使用していますので、Linuxコマンドを使用しています。
windowsの方は、git bashもしくはwindowsコマンドに読み替えてください。
1. docker用のディレクトリを作成
以下コマンドを入力
mkdir プロジェクト名
プロジェクト配下に移動
cd プロジェクト名
2. 作業ディレクトリに以下ファイルを配置
touch Dockerfile docker-compose.yml requirements.txt
3. Dockerfile docker-compose.yml requirements.txtを編集する
添付されているDockerfile docker-compose.yml requirements.txt通りに記載する
補足
Dockerfileについて
Docker Hubで提供されているpython:3実行環境のイメージを取得する
docker-compose.ymlについて
dockerのコンテナ作成とその命令の設定などを記載
version:docker-compose.ymlのバージョンを指定
services:今回はweb側とDB側2つのコンテナを起動します。(サービスの名前はなんでも大丈夫です。今回の場合、db、webになります。)
db:
image:Docker Hubで提供されているmysqlのバージョン5.7のイメージをそのまま使用しています。
environment:
MYSQL_ROOT_PASSWORD:ルートユーザのパスワードを設定
MYSQL_DATABASE:プロジェクトで使用するデータベースの名前を設定
MYSQL_USER:上記で作成したデータベースに接続する利用者名を設定
TZ:データベースのタイムゾーンを指定
command:コンテナ起動時に実行されるコマンド、mysqlのデフォルト文字がutf8ではないのでutf8に変換←これに気がつかず、最初苦戦した。
web:
build:Dockerfileを元にビルド
ports: 左は公開用のポート、右は転送先コンテナのポート
depends_on:先にdbサービスを起動してからwebサービスを起動するように設定します
requirements.txtについて
webサービスにインストールするパッケージを指定
※今回の場合、djangoのフレームワークとmysqlを使用するため
4. djangoのプロジェクトを起動
以下コマンド入力
docker-compose run web django-admin.py startproject djangopj .
コマンドの説明
docker-compose run web
↑でwebサービスコンテナのみ実行
django-admin.py startproject djangopj .
djangopjという名前のプロジェクトを作成
コマンドを実行あと、プロジェクトディレクトリ(djangopj)とmanage.pyができていたら成功です。
5. DBの設定を編集
djangopj/settings.pyのDATABASESの項目を編集
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django-db',
'USER': 'django',
'PASSWORD': 'django',
'HOST': 'db',
'PORT': '3306'
}
}
※NAME、USER、PASSWORDはdocker-comoposeで設定したものになります。
6. 各サービスの実行
以下コマンド入力
docker-compose up -d
webコンテナ実行確認
上記コマンド実行後に、 http://localhost:8000
にアクセスするとdjangoのトップページが表示されれば成功です。
dbコンテナ実行確認
ターミナルをもう一つ起動させて、mysql -u root -prootを実行
mysqlにアクセス後
show databases;と入力
django-dbが表示されていれば成功です。