Dockerの勉強メモ。 WordPressの開発があるんで、Dockerでイメージ作れるようになりたいなーってことで。。
入門動画
www.youtube.com 概念の説明、入門で抑えておくべきところが端的にまとまっててよかった。
www.youtube.com こちらもポイントが端的にまとまっててよかった。
WordPressのDockerイメージ
クィックスタート: Compose と WordPress — Docker-docs-ja 19.03 ドキュメント
Docker公式に解説があるのですよね。(DockerHubにも公式のイメージがあるし)
ですが、docker-composeも上記サイトからわざわざコピペしなくても、ソースを用意してくれてる素敵な方がいらっしゃいました。 github.com
んじゃ、これで開発するかー。となったのですが
Linux User Permission問題
マウントしたボリュームのディレクトリ、Linuxだとroot権限で作られるので、ファイルの読み書きするたびにsudoしたりするのは面倒。 同様の問題にあたっている方が多かったので、Dockerの勉強を兼ねて調べてみた。
ひとまず、先程のwordpress-docker-composeリポジトリをフォークして、この辺を記事を参考にさせていただきつつ、 qiita.com qiita.com blog.amedama.jp tech-blog.rakus.co.jp
実装進めてみたものの動かない。
# docker-compose.yml # 必要な構成だけ ※注意:動かないよ version: "3" services: wp: image: wordpress-custom build: context: . args: image: wordpress:latest environment: USER_ID: ${USER_ID} GROUP_ID: ${GROUP_ID} db: image: mysql-custom build: context: . args: image: mysql:latest environment: USER_ID: ${USER_ID} GROUP_ID: ${GROUP_ID}
# Dockerfile # ※注意:動かないよ ARG image FROM ${image} RUN apt-get update \ && apt-get -y install gosu COPY entrypoint.sh /usr/local/bin/entrypoint.sh RUN chmod +x /usr/local/bin/entrypoint.sh ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
# entrypoint.sh # ※注意:動かないよ USER_NAME=user USER_ID=$USER_ID GROUP_ID=$GROUP_ID # グループを作成する if [ x"$GROUP_ID" != x"0" ]; then groupadd -g $GROUP_ID $USER_NAME echo "Add group: $GROUP_ID" fi # ユーザを作成する if [ x"$USER_ID" != x"0" ]; then useradd -d /home/$USER_NAME -m -s /bin/bash -u $USER_ID -g $GROUP_ID $USER_NAME export HOME=/home/$USER_NAME echo "Add user: $USER_NAME" fi # TODO こいつが動かない。ユーザー変更と認識してるが違うのかな。。 # ログ見ると、 Usage: ./gosu user-spec command [args]... って出てる /usr/sbin/gosu user # 使用イメージのdocker-entrypoint.sh の呼び出しも、これってどうなのかなって感じ。。 # wordpressにいたっては、パラメータ(CMD)が必要そうだし。。 # https://github.com/docker-library/wordpress/blob/master/Dockerfile.template#L260-L265 exec /bin/bash /usr/local/bin/docker-entrypoint.sh $@
USER_ID=$(id -u) GROUP_ID=$(id -g) sudo -E docker-compose up -d
Best practices for writing Dockerfiles | Docker Documentation
この辺も参考にしてみたけども、gosuのコマンドの使い方まちがってるのかなぁうーん。。
結局どうした
結局解決にいたらなかったが、コマンドでホストマシン側のマウントディレクトリ(てか直下全部)をchownで、ログインユーザーのアカウントの所有に変更しちゃうという無理やりな方法をとりましたとさ。
できあがったブツ。 github.com
今月中に、このリポジトリにGulp / Webpack / HMRとか、よく使う系の環境を追加していきたいなぁ〜(自分がよく使うやつw)