[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落とすのも、何度もやっていれば時間ロスが大きいです。

この記事が気に入ったらサポートをしてみませんか?