kokoe blog

技術メモブログ

Docker入門したい私がDockerとお友達になるためのメモ

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)