【Python】MacでDockerをインストールしてからDjangoのロケットを出すまでの備忘録

プログラミング,webサービス開発記

最近やっとDockerの勉強をしようと思い立ちました。

勉強する中で何をしようかと考えた時にPythonのDjangoを使ってwebサービスを作りたいと思い立ったのでDockerで開発環境を作ることを思い立ちました。

勉強を進める中で自分が行ったことを備忘録として残しておこうと思います。

環境

  • MacBook Air (M1, 2020)
  • Docker Desktop 4.2.0 (70708)
  • Docker version 20.10.10
  • Django
  • MySQL 8.0
  • Nginx nginx:1.18-alpine

Docker-Desktopをインストールする

https://www.docker.com/products/docker-desktop

まずDocker-Desktopをインストールします。

Docker-Desktop?Dockerと何が違うの?と思われると思います。

簡単に説明すると、Dockerはlinuxでしか動きません。

それをWindowsやmacでも動くようにしたのが「Docker-Desktop」だと思っていただければ結構です。

参考:Windows版Docker|3種類の違い

ダウンロードできたらインストーラーを起動します。

インストールのために権限を与えます。

ユーザー名とパスワードを入力してインストールを開始します。

Docker-Desktopでの規約について

インストールを進めると上記のような規約確認画面が出てきます。

簡単に要約するとDocker-Desktopが有料になることが書かれています。

ただし中小企業、個人使用、教育機関、非営利のプロジェクトでは無料のままです。

以下翻訳を置いておきます。

Dockerサブスクリプションサービス契約を更新しました。 Docker Desktopを使用している企業がどのように影響を受ける可能性があるかについては、ブログとFAQをお読みください。 「利用規約に同意します」にチェックを入れると、サブスクリプションサービス契約、データ処理契約、およびデータプライバシーポリシーに同意したことになります。

主な変更点の概要は次のとおりです。

Dockerサブスクリプションサービス契約には、Dockerデスクトップの利用規約の変更が含まれています。
中小企業(従業員数250人未満、年間収益1,000万ドル未満)、個人使用、教育、および非営利のオープンソースプロジェクトでは無料のままです。
大企業で専門的に使用するには、有料のサブスクリプションが必要です。
これらの条件の発効日は2021年8月31日です。Dockerデスクトップを使用するために有料サブスクリプションが必要な場合は、2022年1月31日までの猶予期間があります。
既存のDockerFreeサブスクリプションはDockerPersonalに名前が変更され、DockerBusinessサブスクリプションが導入されました。
Docker Pro、Team、およびBusinessのサブスクリプションには、DockerDesktopの商用利用が含まれます。
レジストリ制限、SSO、安全なソフトウェアサプライチェーン管理などの機能を必要とする大企業向けに、新製品のサブスクリプションであるDockerBusinessを導入します。

DockerEngineなどのDockerおよびMobyオープンソースプロジェクトのライセンスおよび配布条件は変更されていないことに注意することも重要です。

Dockerを勉強する目的の個人利用であれば無料で使えますので、このまま承諾してください。

Docker-Desktopを立ち上げてログインをする

Docker-DesktopをインストールするとDockerが使えるようになっています。

ターミナルを立ち上げ「docker version」でインストールされているか確認します。

インストールされていることが確認できたらDocker-Desktopに戻り、右上の「Sign in」からサインインしましょう。

アカウントはhttps://hub.docker.com/から「Sign up」で作成しておきます。

Dockerfileからbuildする

Dockerは[Dockerfileの作成]→[Dockerイメージの組み立て]をして始める必要があります。

初学者(私含めて)だとこの時点でよくわからないかもしれませんが、とにかく自分が組み立てたい環境構築をDockerfileとして作成する必要があるようです。

Dockerfileは自分で書いて用意する必要がありますが、有志の方がすでにgitにあげられているのを使用させていただきました。

cloneして、あとはbuildコマンドを使うだけでDockerイメージを作成することができます。

よくわからないかもしれませんが、とにかく以下のgitをcloneしてbuildコマンドを走らせてみましょう。

ターミナルを開いて以下のコマンドを実行させます。

cloneが終わったらディレクトリを移動します。

https://niwakatech.info/django-docker-compose/ の記事を参考にさせていただきました。

Dockerfileの微修正とサービスの立ち上げ[docker-compose build]

クローンしたものをtreeコマンドで見てみると以下のようなファイル構成になっています。

buildコマンドを走らせる前にmysqlのDockerfileを修正する必要があります。

最初の行の以下の部分を修正してください。

修正後

修正できたらbuildコマンドを実行しましょう。

mysqlのDockerfileを修正せずに実行した場合は以下のようなエラーが出ます。

Dockerイメージからコンテナを作成する[docker-compose up]

[$ docker-compose build]が完了したら早速dockerを起動してみましょう。

dockerの起動はupコマンドを使います。

docker-compose upコマンドを実行するとそのターミナルは使用不可になります。

実行が終わらないというわけではないので注意しましょう。

別のターミナルを開きましょう。

コンテナが動いているかどうか確認する[docker-compose ps]

upコマンドを実行したら別のターミナルを開きます。

ターミナルに[docker-compose ps]でコンテナの稼働状況が分かります。

STATUSがrunningになっていたらOKです。

appコンテナにdjangoをインストールする

コンテナの起動に成功したのでdjangoを入れていきます。

以下のコマンドを実行しましょう。

何をしているかというとexecコマンドを使って指定のコンテナに対してコマンドを実行しています。

ここでいうとappコンテナに[django-admin.py strtproject app .]というコマンドを実行しています。

コマンド実行後に再度treeコマンドを実行すると以下のようになっています。

srcフォルダができてそこにdjangoが入っていることがわかると思います。

コンテナを再起動する[docker-compose restart]

djangoのフォルダが作成されていることを確認できたらrestartコマンドを実行します。

全てのコンテナが再起動されたら、http://localhost:8000/ へアクセスしてみましょう。

無事djangoのロケット打ち上げの画面が起動できていると思います。

お疲れ様でした。

立ち上げたdockerを停止する

起動させたdockerを全停止させるには以下のコマンドを実行します。

本来docker stopは以下のようにコンテナのIDなどを指定して一つ一つ停止します。

[$(docker ps -q)]を使えば1行で全てのdockerコンテナを指定して停止することが可能です。