[Lv5] Inception
https://github.com/syamashi/inception
Q. 何をする課題?
A. docker-compose を使用して、WordPressというブログサイトを立ち上げる課題。
Q. どのように課題をすすめよう?
今は2023年5月。課題に取り組む環境が2点大きく変わりました。
1. 直近課題を突破した日本人がたくさんいるので、精度の高い解答が存在すること。
2. ChatGPTに質問をすれば、的確なサンプルコードを示してくれること。
これらを存分に駆使して課題を進めようと思います。
Q. githubを落としたけど動かない。.envファイルが読まれない。
A. dockerとdocker-composeを更新。これらは更新してもよいものとされています。
以下、42VMで行った操作
# docker-composeの更新をする。(参考URL)
# https://matsuand.github.io/docs.docker.jp.onthefly/compose/install/
# 実行
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p $DOCKER_CONFIG/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
# バージョン固定するファイルがあるので無効化する。
# 実行
sudo mv /usr/bin/docker-compose /usr/bin/docker-compose.bac
# curlでとったファイルの中身がNotFoundで使えないので、サイトから直接binを取りに行く。
# アクセスして
# https://github.com/docker/compose/releases
# ダウンロード
docker-compose-linux-x86_64
sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# https://docs.docker.com/engine/install/ubuntu/
# uninstall old version
sudo apt-get remove docker docker-engine docker.io containerd runc
# lockfileがある場合はそれを削除orロックを取得しているプロセスを削除
# ps aux | grep -i apt
# sudo kill <process_id>
# 失敗した場合こちら。
sudo apt-get update
sudo apt --fix-broken install
sudo apt-get remove docker docker-engine docker.io containerd runc
# setup docker repository
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# warningが出ても無視して良い
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 確認
docker --version
Docker version 23.0.5, build bc4487a
※アプリのバージョンを変えると、レビュー環境の差異が発生してしまう?と懸念されるかもしれませんが、5/1から、レビューは提出者のデモンストレーションで行うルールになりました。つまり相手の環境で動かす必要はなくなりました。自分の環境で、自分の操作で動けばいいのです。ありがたがってほしい。想像してほしい。レビュー相手なんて誰と当たるかわからない。自分の手元では動くのに、相手の環境だと動かない。かつてそんな不具合が4度発生した。ちょっとした権限とか、ちょっとしたバージョンの違いにも対応させるとか、その場で終わる1行修正をしたら、72時間待たされるのだ。何を反省すればいい?そんなループを2週間強いられるのだ。時間をいたずらに消化し、学習価値の低いことを強いられ、モチベーションを大きく下げるルールだった。サーバー課題に臨むたびに、環境起因で動かないものと学んだ。もしかしたらその学習価値は1週回って高いのかもしれないね。
Q. コードはどう読み解けばいい?
1. mariadbにあるDockerfileとsetup.shを読んで、
2. wordpressにあるDockerfileとsetup.shを読んで、
3. nginxにあるDockerfileを読めば全体の流れがつかめます。
Q, 何から実装すればいい?
A. データベース+adminerから実装するのがいい。
DBが立ったのを確認出来たら、wordpress + nginxを実装して、https://localhostへのアクセスを確認する。
Q. 動かないときに、特定までが遠くてつらい。
A. 動くコードをいじって動作確認するのがいい。
Q. ファイル構成は決まってる?
A. subjectをよく見ると、サンプル画像にファイル構成が例示されています。
合わせるのが無難。俺は別に、Dockerfileさえわかれていれば全然いいと思うけど。
Q. Bonusやったほうがいい?
A. Bonus/adminerは知っておいたほうがいい。
adminerはDBをWebで参照できるツールです。latestのadminerをdockerHubから落とすだけなので、Dockerfileに1行書けばいいです。
docker-compose.ymlの設定を整えれば、localhost:8080からDBが見られます。
Q. DBコンテナに入って、rootユーザでログインしようとすると、パスワードを設定したはずなのに、空パスワードで入れてしまう。
A. 一見入れているように見えて、なんのDBも見られないんですよね。
おまけにrootユーザーのパスワードを入れると、むしろ入れないんですよね。
なんでしょうね。不可思議な挙動で怖い。
素直にadminerを入れましょう。そうすれば、DBコンテナに入って操作する必要がなくなります。
Q. dockerのpull数上限?
A. dockerfileにある、FROM Alpineの部分ですが、6時間以内に100回までしか実行できないようです。ひっかかると6時間待機させられます。
提出直前の確認作業で頻繁に行う場合は注意。1回のmakeあたり4回行っているので、makeは25回まで。
Q. wordpress-6.2.tar.gzについて。
A. 俺は提出物に圧縮ファイルを含めました。
makeするたびにwebからinstallする実装でもよいのですが、時間帯によってはinstallに失敗し続けます。wordpressサーバの都合と思われます。
makeし直しを永遠にやっていればそのうちうまくいきますが、毎回22MB落とすのも、何度もやっていれば時間ロスが大きいです。