- 投稿日:2020-03-20T20:12:32+09:00
よく利用するDocker, Docker-compose コマンド
Docker
Dockerの起動
$ sudo systemctl start dockerDocker hubへのログイン/ログアウト
$ docker login/logoutDocker image一覧
$ docker image psREPOSITORYはイメージの名前。
Docker image ダウンロード
$ docker image pull [オプション] [イメージ名:タグ名] $ docker image pull [URL] 例: $ docker image pull centos:7 DockerへアップロードしたImageをダウンロードすることも可能。 $ docker pull [dockerhubのユーザ名]/[イメージ名:タグ名]タグ名を省略されると、最新版がダウンロードされます。-aオプションを指定すると、すべてのイメージがダウンロードされます。
Docker imageの詳細
$ docker image inspect centos:7イメージID、作成日、Dockerバージョン、CPUアーキテクチャ
Dockerでイメージにタグ名を設定
$ docker image tag [イメージ名] [dockerhubユーザ名]/[コンテナ名]:[バージョン]イメージの検索
$ docker search --limit 検索キーワード未使用のdockerイメージの削除
$ docker image prune [オプション] オプション: --all, --a 使用していないイメージをすべて削除 --force, --f イメージを強制的に削除するDocker container一覧
$ docker container ps $ docker ps -allDocker container 起動/停止/削除
$ docker container run/start/stop/rm [コンテナ名] ------ runは生成&起動です。 -dオプションをつけると、バックグラウンドで動きます。コンテナのログの確認
$ docker container logs -t [コンテナ識別子]コンテナ起動の最も簡単な一例
$ docker container run -it --name "test1" centos /bin/cal ------ docker container runはコンテナを作成、実行 -itはコンソールに結果を出すオプション --name "test1"はコンテナ名 centosはイメージ名 /bin/cal/はコンテナで実行するコマンド。/bin/bashを入力すると、コンテナ内でシェルを実行することもできます。Dockerイメージの中に入る
イメージの一覧からログインしたいイメージを確認します。 $ docker images REPOSITORYカラムに表示されている名称を指定して、以下のコマンドでイメージにログインします。 $ docker run --rm -t -i イメージ名 /bin/bashcontainer 稼動確認
$ docker container stats コンテナ名コンテナへ入る
$ sudo docker exec -it [コンテナID] bashcontainerの起動/停止
$ docker start/stop コンテナ名Dockerの実行環境確認
コンテナの数、Dockerのバージョン、ストレージドライバの種類、OSの種類、アーキテクチャ$ docker system infoDockerのディスク利用状況(詳細確認-v)
$ docker system dfDocker 応用編
$ docker container run --name webserver -d -p 8080:80 nginxDockerイメージnginxを使ってwebserverという名前のDockerコンテナを起動します。その際、ブラウザからHTTP80番ポートでのアクセスを許可するため、-pオプションでコンテナからの転送を許可しています。
ホストの8080ポートにアクセスすると、コンテナ上で動作しているNginx(80番ポート)のサービスにアクセスできます。また、指定したレンジのポート番号を割り当てたいときは、--exposeオプションを使用します。さらに、ホストマシンの任意のポートを割り当てるときは、-Pオプションを使用します。そのほかに、DNSサーバ、MACアドレスの指定も可能です。
コンテナをtarファイル出力
$ docker container export [コンテナ識別子] 例: $ docker container export [コンテナ識別子] > [ファイル名.tar] 生成されたtarファイルの中身を確認する。 $ tar -tf [tarファイル名] | moreDocker-compose
Dockerコンテナのシェルの中に入る
$ docker exec -i -t コンテナ名 bash複数のDockerコンテナの起動/リソース削除/停止/確認
$ docker-compose up/down/stop/ps/logsCompose定義ファイルのバージョンとDokcer Engineのバージョンにマッピング関係があります。
それぞれに対応するバージョンがあります。コンテナの生成
$ docker-compose up --build任意の名前のDockerfileをビルドするときは、[dockerfile]を指定します。その際、DockerfileがあるディレクトリのパスやGitレポジトリのURLをcontextで指定します。
services: webserver: build: context: /data dockerfile: Dockerfile-alternate
- 投稿日:2020-03-20T19:26:53+09:00
PyCharmのProject Interpreterに、リモートRaspbian DockerのPythonを設定する
前回からの続きです。今回はpycharmを介して、リモートdockerコンテナ内でpythonファイルを実行します。少しややこしいのでまとめると以下を行います。
ファイルの編集はローカル上で行うが、これをリモート上と同期させる
実行時は、リモートのdockerにあるpythonインタプリタをpycharmに認識させて実行する
リモートのdockerはリモート上のファイルを認識して実行する
dockerを使うかdocker composeを使うか以外はこちらと同一です。(PyCharmが直接リモート上のコードを編集できれば良い気がするのですが、なぜかこれはできません。)ややこしくなったので、まとめると以下のようになります。
Raspbian上のdockerの設定
Dockerのサービスにアクセスするには
Dockerはクライアント・サーバモデルのアプリケーションであり、dockerデーモン(サーバ)に対して処理を要求を行うことでdockerを利用することができます。dockerコマンドを通す際などデフォルトではUnixソケットを通して通信を行っていますが、設定を行えばTCPソケットを通して通信を行うこともできます。これを利用するとローカルからリモート上のdockerデーモンに処理を要求することができます。この辺りのdockerの仕組みに関してはこちらのサイトが参考になりました。ちなみに、ローカルのUnixソケットをリモート上のUnixソケットにフォワードすれば、リモートからサーバのdockerを動かすこともできるみたいです。
設定
参考サイトそのままですが、以下を実行することで、remoteのdockerにtcpソケットを通して処理を要求することができます。(本来は、通信を行う際に証明書を利用しないと本番環境では危ないないらしいですが、それはまた別途設定することにしましょう。この辺りはこちらと公式のこちらが詳しいです。)
サーバ上で以下を実行することで、TCPソケットを介してpycharmからdockerを叩けるようになります。
# 設定の修正 $ sudo vim /etc/systemd/system/docker.service.d/startup_options.conf # 設定への記載内容 $ cat /etc/systemd/system/docker.service.d/startup_options.conf [Service] ExecStart= ExecStart=/usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2376 # 読み込み&再起動 $ sudo systemctl daemon-reload $ sudo systemctl restart docker.service # 設定の確認 # "/usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2376"があればOK $ service docker status Redirecting to /bin/systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Drop-In: /etc/systemd/system/docker.service.d └─docker-bridge-yj.conf, startup_options.conf Active: active (running) since Tue 2019-06-18 12:54:47 JST; 4 days ago Docs: https://docs.docker.com Main PID: 4595 (dockerd) Tasks: 26 Memory: 9.2G CGroup: /system.slice/docker.service └─4595 /usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2376PyCharmのリモートとローカルのファイルの同期
Preference>Build, Execution, Deployment>DeploymentのConnectionタブから同期の設定を行います。
Host: Raspberry piのIPアドレス、User name: raspbianのユーザ名、Passwordにユーザのパスワードを入力します。Root pathはRaspberry Piのどこを"ルート"として認識させるかを設定します。(つまりこれはRaspberry Piのルートパス/とは一致している必要はありません。)
Web server URLにはhttps://[Raspberry PiのIPアドレス]と入力します。続いて、Mappingタブからの設定も行います。
こちらのLocal path: で同期したいローカルフォルダを設定します。また、Deployment pathで先ほど設定したRoot pathからの相対パスとして、同期したいパスを指定します。Tools>Deployment>OptionsからUpload changed files automatically to default serverにチェックをつけておけば、ファイルを書き換えると同時に、勝手に同期を行ってくれて便利です。
Docker-composeを利用したPythonインタプリタの設定
公式はこちら。
Dockerの設定
Preference>Build, Execution, Deployment>Deployment>DockerでリモートのDockerを追加します。TCPソケットは、tcp://[IPアドレス]:[先ほど設定した番号]です。
Preference>Project>Project Interpreterから歯車のマークをクリックし、Project Interpreterを追加します。Serverで先ほど設定したDockerを選択します。また、Configuration file(s)には自分で作成したdocker-compose.ymlを設定します。
以上でpycharm上からRUNをすると、dockerコンテナ内のpythonインタプリタがうごくはずです。
- 投稿日:2020-03-20T19:26:53+09:00
PyCharmを介して、リモートRaspbian上のDockerコンテナ内でPythonファイルを実行する
前回からの続きです。今回はpycharmを介して、リモートdockerコンテナ内でpythonファイルを実行します。少しややこしいのでまとめると以下を行います。
ファイルの編集はローカル上で行うが、これをリモート上と同期させる
実行時は、リモートのdockerにあるpythonインタプリタをpycharmに認識させて実行する
リモートのdockerはリモート上のファイルを認識して実行する
dockerを使うかdocker composeを使うか以外はこちらと同一です。pycharmが直接リモート上のコードを編集できれば良い気がするのですが、なぜかこれはできません。
Raspbian上のDockerの設定
Dockerのサービスにアクセスするには
Dockerはクライアント・サーバモデルのアプリケーションであり、dockerデーモン(サーバ)に対して処理を要求を行うことでdockerを利用することができます。dockerコマンドを通す際などデフォルトではUnixソケットを通して通信を行っていますが、設定を行えばTCPソケットを通して通信を行うこともできます。これを利用するとローカルからリモート上のdockerデーモンに処理を要求することができます。この辺りのdockerの仕組みに関してはこちらのサイトが参考になりました。ちなみに、ローカルのUnixソケットをリモート上のUnixソケットにフォワードすることでも、リモートからサーバのdockerを動かすこともできるみたいです。
設定
参考サイトそのままですが、以下を実行することで、remoteのdockerにtcpソケットを通して処理を要求することができます。(本来は、通信を行う際に証明書を利用しないと本番環境では危ないないらしいですが、それはまた別途設定することにしましょう。この辺りはこちらと公式のこちらが詳しいです。)
サーバ上で以下を実行することで、TCPソケットを介してpycharmからdockerを叩けるようになります。
# 設定の修正 $ sudo vim /etc/systemd/system/docker.service.d/startup_options.conf # 設定への記載内容 $ cat /etc/systemd/system/docker.service.d/startup_options.conf [Service] ExecStart= ExecStart=/usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2376 # 読み込み&再起動 $ sudo systemctl daemon-reload $ sudo systemctl restart docker.service # 設定の確認 # "/usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2376"があればOK $ service docker status Redirecting to /bin/systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Drop-In: /etc/systemd/system/docker.service.d └─docker-bridge-yj.conf, startup_options.conf Active: active (running) since Tue 2019-06-18 12:54:47 JST; 4 days ago Docs: https://docs.docker.com Main PID: 4595 (dockerd) Tasks: 26 Memory: 9.2G CGroup: /system.slice/docker.service └─4595 /usr/bin/dockerd -H unix:// -H tcp://0.0.0.0:2376PyCharmのリモートとローカルのファイルの同期
Preference>Build, Execution, Deployment>DeploymentのConnectionタブから同期の設定を行います。
Host: Raspberry piのIPアドレス、User name: raspbianのユーザ名、Passwordにユーザのパスワードを入力します。Root pathはRaspberry Piのどこを"ルート"として認識させるかを設定します。(つまりこれはRaspberry Piのルートパス/とは一致している必要はありません。)
Web server URLにはhttps://[Raspberry PiのIPアドレス]と入力します。続いて、Mappingタブからの設定も行います。
こちらのLocal path: で同期したいローカルフォルダを設定します。また、Deployment pathで先ほど設定したRoot pathからの相対パスとして、同期したいパスを指定します。Tools>Deployment>OptionsからUpload changed files automatically to default serverにチェックをつけておけば、ファイルを書き換えると同時に、勝手に同期を行ってくれて便利です。
Docker-composeを利用したPythonインタプリタの設定
公式はこちら。
Dockerの設定
Preference>Build, Execution, Deployment>Deployment>DockerでリモートのDockerを追加します。TCPソケットは、tcp://[IPアドレス]:[先ほど設定した番号]です。
Preference>Project>Project Interpreterから歯車のマークをクリックし、Project Interpreterを追加します。Serverで先ほど設定したDockerを選択します。また、Configuration file(s)には自分で作成したdocker-compose.ymlを設定します。
以上でpycharm上からRUNをすると、dockerコンテナ内のpythonインタプリタがうごくはずです。
- 投稿日:2020-03-20T17:33:23+09:00
[Docker]CMDとENTORYPOINTの挙動の違い
はじめに
Docker初心者です。自分用に記載。
今回、Dockerfileに記述する命令、CMD
とENTRYPOINT
に関する記事を投稿してみました。Dockerとは
Dockerはコンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンソースソフトウェアあるいはオープンプラットフォームである。
Dockerはコンテナ仮想化を用いたOSレベルの仮想化によりアプリケーションを開発・実行環境から隔離し、アプリケーションの素早い提供を可能にする。かつその環境自体をアプリケーションと同じようにコード(イメージ)として管理可能にする。Dockerを開発・テスト・デプロイに用いることで「コードを書く」と「コードが製品として実行される」間の時間的ギャップを大きく短縮できる。
(Wikipediaより)つまりdockerを使うメリットは、
- 起動・実行にかかる処理の負荷(オーバヘッド)が少ないため、高速
- 環境をコード化(イメージ化)することで、そのコードをもとに誰でも同じ環境を作ることができる。
- 環境の設定を変更したとき、再構築の時間が短くて済む。また、システムの廃棄も容易。
Dockerfileとは
Dockerイメージを作るやつ。
わからなかったこと
CMD
もENTRYPOINT
もどちらもコンテナ起動時に実行するコマンドなのははわかったが、
docker run
実行時に、どう挙動が違うのか?CMDとENTRYPOINTの挙動の違い
これらの記事を参考にしました。
http://docs.docker.jp/engine/reference/builder.html#cmd-entrypoint
https://gist.github.com/goldeneggg/e2b2d7ca9ea2e649df5fdocker run の際、コマンド引数指定ありの時に挙動の違いがありました。
また、ENTORYPOINT
のみ、シェルを介す書き方と、介さない書き方にも違いがあることもわかりました。
CMD ls(シェルを介す) CMD ls -l(オプションあり) CMD ["ls", "-l"](シェルを介さない) ENTRYPOINT ls(シェルを介す) ENTRYPOINT ls -l(オプションあり) ENTRYPOINT ["ls", "-l"](シェルを介さない) docker run の際、コマンド引数指定なし CMDで指定したコマンドを実行するだけ CMDで指定したコマンドを実行するだけ CMDで指定したコマンドを実行するだけ ENTRYPOINTで指定したコマンドを実行するだけ ENTRYPOINTで指定したコマンドを実行するだけ ENTRYPOINTで指定したコマンドを実行するだけ docker run の際、コマンド引数指定あり 引数で指定したコマンドが実行される 引数で指定したコマンド(とオプション)が実行される 引数で指定したコマンド(とオプション)が実行される ENTRYPOINTで指定したコマンドがそのまま実行される ENTRYPOINTで指定したコマンドがそのまま実行される エラーになる (引数で指定したコマンドがオプション扱いになるため) CMDの場合
- 上の表を見てわかる通り、シェルを介す場合でも介さない場合でも
docker run
の際、コマンド引数を指定してあると、CMD
で書いたものは無視されます。(公式で言うと、上書きされます。)ENTRYPOINTの場合
- シェルを介す場合
docker run
の際、コマンド引数を指定してあげても、Dockerfileに書いたENTRYPOINT
で指定したコマンドがそのまま実行されます。引数の方は無視されます。- シェルを介さない場合
docker run
の際、コマンド引数を指定してあげてしまうと、エラーになります。これがちょっとややこしい。実際例を見てもらったほうが分かりやすいと思います。DockerfileFROM centos MAINTAINER hoge ENTRYPOINT ["ls", "-l"]% docker run --rm IMAGE_ID ls -lh ls: cannot access ls: No such file or directory :このように、
ENTRYPOINT
のparam部分-l
が コマンド引数ls
で上書きされます。
つまり、paramの部分だけ上書きされます。であれば、
docker run
の際、lsコマンドの引数としてオプションを指定したらどうなるのでしょうか?
結果% docker run --rm IMAGE_ID -lh dr-xr-xr-x 2 root root 4.0K Apr 12 01:10 bin drwxr-xr-x 4 root root 80K May 2 07:57 dev drwxr-xr-x 40 root root 4.0K May 2 07:57 etc drwxr-xr-x 2 root root 4.0K Sep 23 2011 home :エラーを吐かず、オプションとして認識されました。
- 投稿日:2020-03-20T15:59:10+09:00
docker run コマンドの-iオプションについて調べてみた
docker初学者です。間違えなどありましたら、ご指摘いただければ幸いです。
docker runのiオプションについて少し調べてみたました。
オプションiについて
docker公式では、以下のように書かれている。
-i, --interactive アタッチしていなくても STDIN を開き続ける
STDINは標準入力のことらしい。キーボードからの入力を可能にするとのこと。いつもお世話になっているわかりそうでわからないサイトには以下のように記載されていました。
キーボードからの入力だよ
「特に指定をしていないときは、ここから入力されたデータが来るはず!」なデータの通り道だよ
https://wa3.i-3-i.info/word11636.htmlつまり、アタッチしなくても標準入力を開き続けるということだと思うが、よくわからないので実際にコマンドを打ってみました。!!
ubuntuイメージを使用して挙動を調べる
オプションありとなしのパターンで挙動を調べてみた!コンテナを起動してコンテナに入り、入力したコマンドが実行されるかを確認する。
①まずdocker runで-iありで起動して挙動を確認
MacBook-Pro:~ $ docker run -it -d --name test ubuntu /bin/bash d43a339cc5ca000850c680ddfe75721321d58f8ff45145bb504f4be95c3854f234 MacBook-Pro:~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d43a339cc5ca ubuntu "/bin/bash" 4 seconds ago Up 3 seconds testSTATUSの項目がUp 3 secondsになっていることから、上手くubuntuイメージの起動している。次にアタッチしてコンテナ内に入ってみる。
※コマンドについて
docker attach <image-name> : このコマンドを実行することでコンテナ内に入ることができる。コンテナ内ですでに実行しているシェルを使ってコンテナとのやりとりをする。また、コンテナから抜ける時は、exit
またはCtl+p からのCtl+q
を実行する。
exit
の場合は、コンテナから抜けるとともに、コンテナが停止してしまう。
Ctl+p からのCtl+q
の場合は、コンテナから抜けるだけで、コンテナを停止することはない。
今回はexitを使用してコンテナから抜けることにする。MacBook-Pro:~ $ docker attach test root@d43a339cc5ca:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@d43a339cc5ca:/# exit MacBook-Pro:~ $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d43a339cc5ca ubuntu "/bin/bash" 26 seconds ago Exited (0) 7 seconds ago testlsコマンドが実行されコンテナ内の情報が出力された。
exitを実行したため、コンテナ自体も停止しているのがわかる。②次に-iなしで起動してみる。
先ほどのコンテナは削除して、-iオプションなしで起動してみる。
MacBook-Pro:~ $ docker run -t -d --name test ubuntu /bin/bash 40b1356e365135c8c1df8514e64239156de4216927dec2bfdd0571972d11147d MacBook-Pro:~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 40b1356e3651 ubuntu "/bin/bash" 9 seconds ago Up 8 seconds test問題なく起動している。次にattachして、コンテナ内で「ls」コマンドを入力して出力が返ってくるかを確認。
MacBook-Pro:~ $ docker attach test root@40b1356e3651:/# ls何も反応が返ってこない。
標準入力(キーバードからの入力情報など)ができない状態のため、出力はされていない。
コンテナから出る。root@40b1356e3651:/# exit MacBook-Pro:~ $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 40b1356e3651 ubuntu "/bin/bash" 3 minutes ago Up 3 minutes testexitで抜けたのに、コンテナが停止していない。。
STATUSの項目がUp 3 minutesとなっている。。
attachコマンドでコンテナ内に入った場合、exitコマンドを入力するとコンテナから抜けるかつコンテナが停止してしまうのだが、今回のケースではコンテナが起動したままであった。。これは、-iオプションを付けない場合、標準入力ができないため、ubuntuイメージから起動したコンテナに対しては、exitコマンドを実行した情報すら伝わらないため、コンテナが終了せず起動しっぱなしのままであるのだと思う。
結論
以上-iオプションを付けずにコンテナを起動してしまうと、コマンドなどの入力情報がコンテナまで伝わらないということがわかった。(公式ドキュメント通りの挙動を確認できた!)
- 投稿日:2020-03-20T14:42:07+09:00
Docker DesktopをWindows 10 HomeにインストールしてWSLからdockerコマンドを実行する。
結論
インストール・起動は問題ないですが、WSL2からdockerコマンドが使えない場合は、
現状は以下の設定を~/.bashrc
などの設定ファイルに追記しておきましょう。~/.bashrcalias docker='docker.exe' alias docker-compose='docker-compose.exe'前提
- Windows 10 Home
- WSL2 Ubuntu (他のDistroでもおそらく同じ)
WSL2環境のセットアップ
WSL2環境の準備については、以下の記事を参考にすると良いと思います。
Docker Desktop をインストール
2020/03/20 の時点ではWSL2自体が正式版ではないので、Docker DesktopもStableではなくEdgeチャンネルを使うことになります。
(2020/05頃にはおそらくWSL2もDocker Desktopも正式版が来るはず!)以下の記事にEdgeチャンネルのDocker Desktopのダウンロードリンクが貼られているので、そちらからダウンロードします。
(Docker Desktop Edge 2.2.2.0) となっているところです。
以下の公式のDocker Desktop for Windowsの提供ページから Edgeチャンネルのものをダウンロードしても大丈夫です。
インストール作業は、特になにか設定等は必要なく、デフォルトのままインストールすれば問題なく入りました。
WSLからdockerコマンドを実行する
そのままインストールしただけだと、WSL2 から
docker
とコマンドを打ってもダメでした。
docker.exe
はWindows側にインストールされていて、コマンドプロンプトやPowerShellから問題なく動きます。それをWSL2からも実行したらどうなるか試してみました。
うん。動きます。
試しにnginxを起動してみましょう。
docker.exe run --rm -p 80:80 nginxWindows セキュリティの重要な警告 ダイアログが表示されるので、
アクセスを許可する
を選択します。この状態で
docker ps
を実行してみましょう。WSL2側からも、Windows側からも、どちらも同じDocker Daemonに繋ぎにいっていることがわかります。
nginx はWindows側で起動しているので、ブラウザで
http://localhost:80
にアクセスするとDockerで起動したnginxコンテナに繋がります。WSL2からもlocalhostでWindows側にアクセス可能なので、問題なくnginxコンテナに繋がります。
エイリアスの設定
Windows 10 HomeにDocker Desktopをインストールして、WSL2からdockerを使用するのが問題なさそうだとわかりましたが、
docker.exe
とするのは面倒なので、エイリアスを設定しておきます。~/.bashrcalias docker='docker.exe' alias docker-compose='docker-compose.exe'これで他の環境やコマンドのサンプル通りに
docker
だけでコマンドが使えるようになります。
また、docker-compose
についても、docker-comopose.exe
でインストールされているので、こちらにもエイリアスを設定しておきました。補足
試したWindowsの環境は、次のようなコマンドで一度dockerを導入したことがあるので、もしかしたらそれがWSL2側にdockerコマンドがすんなり入らない原因かもしれません。
インストール済みの場合はapt remove
で除去しておきましょう。sudo apt install docker-ce docker-ce-cli containerd.io docker-compose -y
- 投稿日:2020-03-20T14:07:59+09:00
[Docker][apache][CakePHP]The requested URL was not found on this server.
はじめに
結構あやふやな回答ですが、あまりパッと見つからないので書いてみました。かなりメモ的な感じです
現在の環境ざっくり気が向いたらもう少しちゃんと調べて書きます。
Docker
apache
CakePHP
でやってます。❗️対象
❗️ちなみに一回はパス表示までできている方対象です。
❗️その他ルートは表示できている方対象です。
❗️apacheファイルの設定などは既に終わっている方。上記エラー解決
※rewriteはapacheでcakePHP使うなら必須モジュールをです。
参考:https://book.cakephp.org/4/ja/installation.html
mod_rewriteと言うものがないとリライトが機能しないので、、、・Dockerapacheコンテナに入って、確かルート部分で
$ a2enmod rewrite$ service apache2 restartこの記述普通はDockerfileに書く感じかな、、、
・Dockerのコンテナから出て以下コマンドうつ←ここポイントな気がしています、、
$ docker-compose up --build -d
- 投稿日:2020-03-20T11:33:10+09:00
Laravel+Mysql+Vue.jsの開発環境をDockerで構築
はじめに
Laravel+Mysql+Vue.jsでSPAのWebアプリケーション作成の勉強をしたくて、Dockerで開発環境構築をしました。
開発の常で、開発環境構築に苦戦したので備忘録を兼ねて構築手順を記述します。
記載内容に誤り等ございましたら、ご指摘をよろしくお願いいたします。開発環境
$ docker --version Docker version 19.03.8, build afacb8b $ docker-compose --version docker-compose version 1.25.4, build 8d51620a $ php artisan --version Laravel Framework 7.2.0 $ mysql --version mysql Ver 14.14 Distrib 5.7.29, for Linux (x86_64) using EditLine wrapper $ npm list vue `-- vue@2.6.11参考
- Docker で Laravel の環境構築をしました
- Dockerを使ってLaravel開発環境構築
- 5分で作るLaravel+Vue.js開発環境(docker-compose)
- Vue + Vue Router + Vuex + Laravelで写真共有アプリを作ろう
ディレクトリ構成
project ├ docker-compose.yml ├ docker │ ├ php │ │ ├ php.ini │ │ └ Dockerfile │ └ nginx │ └ default.conf └ server手順
1. ファイルを準備
以下のファイルを作成します。
- Dockerfile
- docker-compose.yml
- php.ini
- default.conf
project/docker/php/DockerfileFROM php:7.4.1-fpm COPY php.ini /usr/local/etc/php/ RUN apt-get update \ && apt-get install -y zlib1g-dev libzip-dev zip mariadb-client-10.3 libpng-dev libjpeg-dev curl wget \ && docker-php-ext-install zip pdo_mysql # nodejs install RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - RUN apt-get install -y nodejs # Composer install RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" RUN php -r "if (hash_file('SHA384', 'composer-setup.php') === '$(wget -q -O - https://composer.github.io/installer.sig)') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" RUN php composer-setup.php RUN php -r "unlink('composer-setup.php');" RUN mv composer.phar /usr/local/bin/composer ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin WORKDIR /var/www RUN composer global require "laravel/installer"
mysql-client
のパッケージは削除されているので注意。project/dockerfile-compose.ymlversion: '3' services: php: container_name: php build: ./docker/php volumes: - ./server:/var/www depends_on: - db nginx: image: nginx container_name: nginx ports: - 80:80 volumes: - ./server:/var/www - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php db: image: mysql:5.7 restart: always container_name: db-host environment: MYSQL_ROOT_PASSWORD: yourpassword MYSQL_DATABASE: phpapp_db TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci volumes: - ./docker/db/data:/var/lib/mysql - ./docker/db/my.conf:/etc/mysql/conf.d/my.cnf - ./docker/db/sql:/docker-entrypoint-initdb.d ports: - 3306:3306project/docker/php/php.ini[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese"project/docker/nginx/default.confserver { listen 80; index index.php index.html; root /var/www/public; location / { root /var/www/public; index index.html index.php; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }2. dockerコンテナを立ち上げる
$ docker-compose build $ docker-compose up -d3. phpコンテナに入ってlaravelプロジェクトを作成する
$ docker-compose exec php bash $ laravel new4. dockerコンテナを一旦停止する
$ docker-compose down5.
.env
ファイルを編集する以下のように無いパラメーターは追加し、すでに記述されているパラメーターは修正する。
project/server/.envDB_CONNECTION=mysql DB_HOST=db-host DB_PORT=3306 DB_DATABASE=phpapp_db DB_USERNAME=root DB_PASSWORD=yourpassword6. コンテナを立ち上げる
$ docker-compose up -d7. ローカルホストにつながることを確認する
ブラウザから以下のURLにアクセスして正常に接続できることを確認する。
正常に接続できれば以下のような画面が表示される。
8. migrateが実行できることを確認する
phpコンテナに入ってmigrateを実行する。
$ docker-compose exec php bash $ php artisan migratemigrateが失敗する場合は以下の記事等を参考にして頂くと良いと思います。
9. Vue.jsの導入
npmでvueのパッケージをインストール。
$ npm install $ npm install -D vuevueのパッケージがインストールできていることを確認。
$ docker-compose exec php bash $ npm list vue開発環境構築は以上です。
- 投稿日:2020-03-20T10:13:38+09:00
DB Containerに大容量のデータをインポートしたい場合は、コンテナに入ってから実行する
はじめに
WSL2で、ホストからMysql コンテナに3GBのデータをインポートしようとした際、詰まったので共有します
結論
//dumpファイルをMysqlコンテナにコピー docker cp [import file name] [container id]:[container file path] //Mysqlコマンドでログイン mysql -u [user name] -p [db name] //Sourceコマンドでインポート source [container file path]詳細
最初、コンテナの外からインポート実行しましたが、コマンド実行中のまま止まってました。
docker exec -i mysql -u [user name] -p [db name] > [import file path]処理を止めてDBを見にいっても、何も書かれていないので動いていないと判断。
インポートファイルのサイズが大きい場合、Mysqlの中に入って実行しない駄目っぽい記事を見つけ、解消。
おわりに
再度Importファイルを指定しようとしたら、サイズが0になってたので、以後コピーしてから実施しよう。。
Exportしなおすのに時間を浪費してしまった。
- 投稿日:2020-03-20T10:08:14+09:00
Macの初期化→リストアを良い感じにする
Brewfile
、Mackup
、Docker
、Dropbox
を使って良い感じにリストアできる環境を作ったので、まとめます。以下の記事をめちゃくちゃ参考にしました。
macOSでの開発環境を全部Docker化したらリストア時間が1時間半になった使用する主なツール
- Brewfile
- 必要なアプリをファイルに列挙して、コマンド一発で全部インストールできる。コマンドラインで使うツール、インストーラーを使ってインストールするアプリ、AppStoreからインストールするアプリ、全てコマンド1つ。最高。(Brewfileを使う)
- Mackup
- アプリなどの設定ファイルを抽出して、元々設定ファイルがあった場所にシンボリックリンクを貼ってくれる。(設定ファイルをmackupで管理する)
- Dropbox
- 重要なファイルやBrewfile、Mackupで抽出した設定ファイルを保存。ソースコードもここで保存する(当初はGitHubだけで良いと考えたけど、Git管理対象外のファイルを復元するのが予想以上に大変だった)
- GoogleDrive
- クラウド上のゴミ箱として。必要ないけど削除するのは嫌なファイルを保存
- Docker
- 開発環境をDockerで作り、ローカルの言語やツールに依存しない状態を保つ
- Bitwarden
- パスワードマネージャー
初期化(Total 1h)
バックアップ
- 大切なファイルをDropboxに
- 大切ではないけど消すのは嫌なファイルをGoogleDriveに
- アプリの設定ファイルを
Mackup
でバックアップ- 開発環境を全部Dockerで作っておく
- ローカルに入ってる言語とかを使わない
- DBの接続情報(特にパスワード)をBitwardenにメモ
- 個別のバックアップ機能を持っているアプリの対応
- Biscuitの設定をエクスポートしてDropboxに保存
- Transmitの接続情報をエクスポートしてDropboxに保存。パスワードはBitwardenのメモで管理。
最新のOSにアップデート(30m)
念のため先にアップデート。
データ消去の後に何かのコマンドを押してると勝手に最新OSが入るみたいですが、押し忘れたりしたらしんどいので。「りんごマーク」>「このMacについて」>「ソフトウェア・アップデート」
リカバリーモードでmacを起動
シャットダウン →
コマンド + R
を押しながら起動データを完全削除
「macOSユーティリティ」→「ディスクユーティリティ」→「内蔵」→「Macintosh HD – Data」→「ボリューム>マイナスマーク」→「Macintosh HD」→「削除」
[完全版]macOS Catalinaをクリーンインストールする方法
OSを再インストール(25m)
「macOSユーティリティ」→「macOSを再インストール」
リストア(Total 1.5h)
システム設定を変える
システム環境をいじくって、トラックパッドやキーボードなどの設定を自分好みに変更します。
Macのシステム設定まとめBitwardenをインストール
AppStoreから。パスワードがわからないと何も始まらないので
Chromeをインストール
グッバイSafari。Googleアカウントにログイン→同期して、ブックマークや拡張機能を復活させましょう。
Dropboxをインストール
これでいろいろと復元できます。
インストールしたらすぐに環境設定を開き、
- Brewfile
- Mackupディレクトリ以外を同期しないようにします。その他のディレクトリは一通り設定が終わったあとで一気に同期しましょう。
Homebrewをインストール
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"Finderのサイドバーに表示する項目を整理する
- Dropbox
- ダウンロード
- ホームディレクトリ
- スクリーンショット
- iCloud Drive
- Macintosh HD
あたりを表示
その他アプリを一括でインストール
$ cd ~/Dropbox $ brew bundle
Brewfile
cask_args appdir: "/Applications" brew 'git' tap 'heroku/brew' brew 'heroku' brew 'jpegoptim' brew 'mackup' brew 'mas' brew 'pngquant' brew 'rmtrash' cask 'adobe-creative-cloud' cask 'alfred' cask 'biscuit' cask 'docker' cask 'tableplus' cask 'transmit' cask 'visual-studio-code' # cask 'dropbox' # cask 'google-chrome' # cask 'karabiner-elements' mas 'Kindle', id: 405399194 mas 'LINE', id: 539883307 mas 'Magnet', id: 441258766 mas 'Quick Stopwatch', id: 976930151 mas 'Todoist', id: 585829637 # mas 'Bitwarden', id: 1352778147Dropboxに保存してある
Brewfile
を元に必要なアプリを全て揃えます。設定ファイルを復元
$ cd ~/Dropbox $ mackup restoreこれでほぼ全てのアプリの設定が復元されます。
.vimrc
とか.zshrc
とかも。
vscodeの拡張機能はデフォルトではサポートされていませんが、独自に定義して管理できるようにしています。
設定(クリックで表示)
~/.mackup/vsex.cfg[application] name = vsex [configuration_files] .vscode/extensionsDockを整理
- 不要なアプリを削除
- 必要なアプリを追加
- アイコンのサイズを小さめに
- 「Dock環境設定」>「Dockを自動的に表示/非表示」
Dropboxの残りのファイルを同期
このあたりで、先ほど行った同期するディレクトリを制限する設定を解除しちゃいましょう。
各種アプリの動作確認
アプリがちゃんと動くか確かめます。
Mackupで設定を管理できないアプリもあるので、その場合は個別に設定をしましょう。Adobe Creative Cloud
起動→ログインして
イラレとXDをインストールAlfred
- Ctrlのダブルタップで起動できるように
- 検索バーの帽子マークを非表示(appearances>options>how he looks)
- 検索バーのショートカットを非表示(appearances>options>how he looks)
- メニューバーの帽子マークを非表示(appearances>options>how he looks)
- 出現場所をやや下に(appearance>options>図から変更)
- 起動時に入力モードを半角英数にする(appearances>options>Focusing>Compatibility mode →advanced > force key board > romaji)
- クリップボードの履歴を記録(features>clipbord history>keep plain text)
最初は同期の機能を使おうと思いましたが、うまく連携ができなくてやめました。大した設定していないので、手動でやります。
Biscuit
最初にエクスポートしておいた設定ファイルをインポート。
あと、アイコンが好きじゃないので自分が持っているicns形式の画像に変更。
「Application」>「Biscuit」>「右クリック」>「情報をみる」>「アイコンをドラッグ&ドロップ」Docker for Mac
システムに実行の許可を出す。
GoogleChrome
常に表示する必要の無い拡張機能を隠す。Bitwardenをダークテーマに。
LINE
ログイン
Magnet
アクセシビリティ周りの設定。ログイン時に起動する設定。
TablePlus
接続先のパスワードはMackupで管理されていないよう。手動でパスワードを再入力する必要あり。
Todoist
Googleアカウントでログイン
Transmit
Mackupでは接続先の情報を管理できない。予め書き出して置いた移行用のファイルを実行。
また、こちらもパスワードは引き継がれないのでメモから復元VScode
サイドバーからデバッグのマークを消す&並び替え
よく使うサイトにログイン
- Amazon
- GitHub
- Qiita
- はてな
開発環境のコンテナを作成
各プロジェクトのルートディレクトリに移動し
$ docker-compose build $ docker-compose up -dRubyonRailsの場合$ docker-compose exec <サービス名> /bin/bash $ rails db:create $ rails db:migrate $ rails db:seedRailsアプリをcloneした後にDocker上で動かすまで
日常的に気を付けること
- アプリのインストールはBrewfileを使う
- アプリを追加した時には、そのアプリの設定の管理方法を考える(Mackupで管理できないなら個別にバックアップ)
- 大切なファイルはDropboxで管理
- DBの接続先が増えた時、Bitwardenに記録
- FTPの接続先が増えた時、TransmitのバックアップをDropboxに保存+パスワードをBitwardenにメモ
- Biscuitで管理するアプリが増えたら、設定をエクスポートしてDropboxに保存
このあたりを意識していれば、いつPCがぶっ壊れても(データ的には)割と大丈夫。
そんなに大変じゃないはず。注意点、ハマったところ
Mack up、すごく便利なのですが、最初は何がバックアップできていて何ができていないかがよくわからず苦労しました。
vscodeの拡張機能、preztoのプログラム本体、FTPやDBのパスワードなどはデフォルトではバックアップされません。
自分で設定をカスタマイズすることで、パスワード以外はバックアップすることができました。めんどくさがらずに公式の公式のドキュメントを読むとかなり理解が進みます。
英語ですがすごくわかりやすく説明されているので、ぜひ読んでみてください。あと、スピードを追求する場合はDiskMaker Xとかで起動ディスクを作るともっと時間を短縮できるみたいです。
感想
Brewfile
とMack up
がやばい。またDocker
のありがたみも強く実感しました。
この環境を2018年に完成させていた@saboyutaka さんはまじでイケてると思う。参考
- 投稿日:2020-03-20T02:16:38+09:00
Docker のチートシート
Docker Desktop 2.2.0.4
Windows 10 Professional以前にいちど Docker の知識をゲットしたはずなのに、きれいサッパリ忘れた。自分の脳は信用できないので、あらためてチートシートを作り Qiita で永続化することにした。
Docker 基礎コマンド
docker images
イメージ一覧
docker ps
起動中のコンテナの一覧
docekr ps -a
すべてのコンテナの一覧
docker rmi ImageName
イメージの消去
docker rm ID/ContainerName
コンテナの削除
docker pull ImageName
イメージのダウンロード
docker run ImageName
イメージからコンテナを生成し実行
docker stop ID/ContainerName
コンテナの停止Docker 実用コマンド
docker run -it ImageName /bin/bash
対話形式からの抜け方
Ctrl P Q 起動中のコンテナからログアウト
exit 起動中のコンテナの停止
docker stop $(docker ps -a -q)
コンテナ一括停止
docker rm -f $(docker ps -a -q)
コンテナ一括消去
docker rmi $(docker images -q)
イメージ一括消去
docker exec ContainerName Command
外からコンテナでコマンド実行docker-compose 基礎コマンド
docker-compose up
コンテナを起動する
docker-compose run COMMAND
コンテナ内部でコマンドを実行するAWSにインストール
Docker インストール
sudo yum update sudo yum install -y docker docker info起動
sudo service docker startsudo がなくてもいいようにする
sudo usermod -a -G docker ec2-userdocker-compose インストール
sudo curl -L https://github.com/docker/compose/releases/download/1.21.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-composeパーミッション変更
sudo chmod +x /usr/local/bin/docker-compose docker-compose --versionおわり
- 投稿日:2020-03-20T02:16:09+09:00
Docker + django + Nginx + MySQL を理解する
Windows 10 Professional
Docker Desktop 2.2.0.4
docker-commpose 1.25.4 ※Django + Nginx + MySql で開発環境を作るための情報。Qiita 内に優れた記事があり、その通りやれば動くのだが、何をやっているのかよく分からなかったので調べた。
参考サイト
https://qiita.com/kenkono/items/6221ad12670d1ae8b1dd※ Docker Desktop for Windows をインストールしたら、同時に docker-compose もインストールされている。
まず Windows 側での作業ディレクトリの準備
概要
c:\Local 以下にこういうディレクトリ構造を作成。名前は django とした。
c:\Localdjango ├── docker-compose.yml ├── mysql ├── sql ├── nginx │ ├── conf │ │ └── app_nginx.conf │ └── uwsgi_params └── python ├── Dockerfile └── requirements.txt
ディレクトリ名 内容 格納するファイル django 作業用フォルダ docker-compose.ymlを格納 django\mysql MySQL データ 初期は空 django\nginx Nginx 設定用ファイル uwsgi_params を格納 綴りに注意 django\nginx\conf Nginx 設定用ファイル app_nginx.conf を格納 django\nginx\log Nginx ログ 初期は空 自分で追加 django\python dockerfile と requirements.txt を格納 django\sql MySQL 初期化ファイル init.sql django\src django のソース 初期は空 django\static Web の静的ページ用 あとで入れる 準備するファイル
uwsgi_params
wsgi(Web Server Gateway Interface)は、Python で Web サーバーと Web アプリケーションをつなぐインターフェース。古い技術だと CGI にあたるもの。uwsgi_params は Nginx の wsgi 設定用のファイル。特に書き換える必要がないとされていて、ネット上でも「こう書いておけばいいのだ」とスルーされている。
uwsgi_paramsuwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REQUEST_SCHEME $scheme; uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;app_nginx.conf
Nginx のメインの設定ファイル。要変更点は特になし。
upstream で、django のサーバーを指定する。サーバーはドメイン名か IP アドレスとオプションでポートを指定する。/static には静的コンテンツを入れるが、url を変える場合は /web という部分を書きかえる。location 以降の記述によって、nginx にアクセスのあった static を除くすべての情報が Django 側へ行く。server_tokens off; はエラーページに nginx のバージョンを非表示にする。app_nginx.confupstream django { ip_hash; server python:8001; } server { listen 8000; server_name 127.0.0.1; charset utf-8; location /web { alias /static; } location / { uwsgi_pass django; include /etc/nginx/uwsgi_params; } } server_tokens off;init.sql
要変更点はデータベース名
docker の MySQL image は /docker-entrypoint-initdb.d/ にあるスクリプトで、最初に image を起動したときの初期化が行える。後に django を実行する際に DB 作成を許可するデータベース名は必要に応じ変更。init.sqlGRANT ALL PRIVILEGES ON test_todoList.* TO 'user'@'%'; FLUSH PRIVILEGES;requirements.txt
要変更点はバージョン指定。バージョンを省略すると最新版が入るが、バージョン合わせは結構大変なので、そのまま使っておく。このバージョンは 2019/05 頃の最新のもの。
pip で指定のパッケージを指定のバージョンで一括インストールすることができる。requirements.txtDjango==2.0.4 uwsgi==2.0.17 PyMySQL==0.8.0dockerfile
要変更点は、python のバージョン(元は 3.6)。
ENV PYTHONUNBUFFERED 1
は、バッファがたまってから出力するのを避ける指定。RUN 命令は既存イメージ上でコマンドを実行し、その結果得られたイメージは Dockerfile の次のステップで使われる。WORKDIR 命令は Dockerfile で次の行の ADD の実行時の作業ディレクトリの指定。もし WORKDIR が存在しなければディレクトリを作成する。dockerfileFROM python:3.6 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code ADD requirements.txt /code/ RUN pip install -r requirements.txt ADD . /code/docker-compose.yml
docker-compose の本体の設定ファイル。YAML ファイルのインデントはスペース 2 個単位で行わないと、エラーが出ることに注意。
Nginx 記述部
要変更点は、イメージのバージョン(元は 1.13)、ポート番号(8000)。volume はファイルの配置で、Windowsのパス:コンテナ内のパス。
db 記述部
要変更点は、MySql のバージョン(元は 5.7)、データベース名、ユーザー名、パスワード名、ログ出力先。ボリュームは必要に応じ変更。データは、Windows 側の mysql フォルダと同期して永続化する。command は MySQL の文字コードの設定で、デフォルトの latin1 から utf-8 に変える。
python 記述部
要変更点は django のプロジェクトの名前。
command は uwsgi を使用してポート 8001 を開放。app.wsgi の app は Django のプロジェクト名で、django-admin startproject app の app部分。--py-autoreload 1 は Django アプリ開発の際に、ファイル等に変更があった際は自動リロードする。--logto /tmp/mylog.log はログを残す指定。docker-compose.yml のファイル全体
正常に立ち上がるまでは、ユーザー名などは下記に記載のままやる方が、トラブルが少なく得策。
docker-compose.ymlversion: '3' services: nginx: image: nginx:1.13 ports: - "8000:8000" volumes: - ./nginx/conf:/etc/nginx/conf.d - ./nginx/uwsgi_params:/etc/nginx/uwsgi_params - ./static:/static depends_on: - python db: image: mysql:5.7 command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: todoList MYSQL_USER: user MYSQL_PASSWORD: password TZ: 'Asia/Tokyo' volumes: - ./mysql:/var/lib/mysql - ./sql:/docker-entrypoint-initdb.d python: build: ./python command: uwsgi --socket :8001 --module app.wsgi --py-autoreload 1 --logto /tmp/mylog.log volumes: - ./src:/code - ./static:/static expose: - "8001" depends_on: - dbイメージのダウンロードとコンテナ作成、設定
ここまでの時点で作成した django フォルダのバックアップを取っておくと、このあと各イメージのバージョンが合わないなどの不具合があったときに、やり直しが早く済む。
インストールと docker-compose の実行
まずは django のプロジェクトは置かない状態で下記のように実行し、app という名前の新規プロジェクトを作成する。ダウンロードとインストールが進む間、変なエラーが出ていないかを見続けておく方がいい。
docker-compose run python django-admin.py startproject app .データベースの切り替え
エラーが出なかったら、次にデータベースをデフォルトの sqlite から MySQL に切り替える。\django\src\app 内の stttings.py に記載を追加する。import os のあとに、以下の行を追加する。(import os は 2 行は要らないので念のため)
settings.pyimport os import pymysql # connect mysql pymysql.install_as_MySQLdb()同ファイルにはデータベースの指定をする記述があるので、それを以下の記述に置き換える。要変更点は、データベース名、名前、ユーザー、パスワード。だが正常に立ち上がるまでは、とりあえずこの設定のまま動かした方が確実。
settings.pyDATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'todoList', 'USER': 'user', 'PASSWORD': 'password', 'HOST': 'db', 'PORT': '3306', } }マイグレーション
データベースの変更を django に知らせて反映させる。データベースのバージョンが合わなかったりすると、この時点でエラーが出る。
docker-compose run python ./manage.py makemigrations docker-compose run python ./manage.py migrate管理者の設定
django の管理者のユーザー名とパスワードを設定する。ユーザー名はデフォルトで root となっている。まずは捨てパスでいいと思うが、あまりいい加減なパスワード(password など)を入力するとダメと言われる。
docker-compose run python ./manage.py createsuperuserコンテナの起動
docker-compose up -dブラウザで
http://localhost:8000
にアクセスして Django のページが見えたら完成。停止はdocker stop $(docker ps -a -q)
で、起動はdocker-compose up -d
で。作成したソースの反映
新しいアプリを置き django の設定を更新
開発したアプリ(ここでは memo とする)をプロジェクトに入れる。フォルダ memo ごと src 下に置く。
settings.py の INSTALLED_APPS に
'memo.apps.MemoConfig'
を追加src\app\settings.pyINSTALLED_APPS = [ 'memo.apps.MemoConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]app\urls.py に
from django.urls import include
と、 url へのパスpath('memo/', include('memo.urls'))
を追加src\app\urls.pyfrom django.urls import include urlpatterns = [ path('memo/', include('memo.urls')), path('admin/', admin.site.urls), ]変更をマイグレーションして django に認識させる
docker-compose run python ./manage.py makemigrations docker-compose run python ./manage.py migrate docker-compose up -dこれでブラウザから
http://localhost:8000/web
で \static に置いた静的な html ファイルが見える。http://localhost:8000/memo
で、memo アプリケーションが見える。おわり