たくろぐ!

世界一のチラ裏

DockerfileでRedmineを作成した

RemineをHerokuにデプロイしたい人生でした

昔こんなエントリを書きました。

takkuso.hatenablog.com

今回はそれをDockerでコンテナ作って Herokuにデプロイして みる。

MySQLのコンテナを使ったため、ClearDBというプラグインを入れないとHerokuにデプロイできず、

これを利用する際に無料ではあるが、クレジットカードの登録が必須になっている模様。

したがってデプロイは以前作成したRedmineプロジェクトを利用することにした。

ここではDockerでRedmineをローカル開発環境で立ち上げるところまで紹介します。

devcenter.heroku.com

devcenter.heroku.com

docker image

以下から取得します。

hub.docker.com

最新のバージョンにしました(4.2.1)。

github.com

dockerfileをローカルのディレクトリに保存して以下のコマンドを実行します。

docker build -t redmine .

以下のエラーになりました。

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

WSL2とDocker Desktopが連携できていない?(docker composeは動いていたのに。。。?)

一回すべてプロセス?を落として再起動します。

PS C:\Users\USER> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Stopped         2
  docker-desktop         Stopped         2
  docker-desktop-data    Stopped         2
PS C:\Users\USER> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu                 Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2

再度実行すると以下のエラーになります。

[+] Building 9.5s (13/13) FINISHED
 => [internal] load build definition from Dockerfile                                                               0.0s
 => => transferring dockerfile: 3.83kB                                                                             0.0s
 => [internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => [internal] load metadata for docker.io/library/ruby:2.7-slim-buster                                            9.3s
 => [auth] library/ruby:pull token for registry-1.docker.io                                                        0.0s
 => CANCELED [1/8] FROM docker.io/library/ruby:2.7-slim-buster@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  0.0s
 => => resolve docker.io/library/ruby:2.7-slim-buster@sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx  0.0s
 => => sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1.86kB / 1.86kB                     0.0s
 => => sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1.37kB / 1.37kB                     0.0s
 => => sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 5.74kB / 5.74kB                     0.0s
 => [internal] load build context                                                                                  0.0s
 => => transferring context: 2B                                                                                    0.0s
 => CACHED [2/8] RUN groupadd -r -g 999 redmine && useradd -r -g redmine -u 999 redmine                            0.0s
 => CACHED [3/8] RUN set -eux;  apt-get update;  apt-get install -y --no-install-recommends   ca-certificates   w  0.0s
 => CACHED [4/8] WORKDIR /usr/src/redmine                                                                          0.0s
 => CACHED [5/8] RUN set -eux;  [ ! -d "/home/redmine" ];  mkdir -p "/home/redmine";  chown redmine:redmine "/hom  0.0s
 => CACHED [6/8] RUN set -eux;  wget -O redmine.tar.gz "https://www.redmine.org/releases/redmine-4.2.1.tar.gz";    0.0s
 => CACHED [7/8] RUN set -eux;   savedAptMark="$(apt-mark showmanual)";  apt-get update;  apt-get install -y --no  0.0s
 => ERROR [8/8] COPY docker-entrypoint.sh /                                                                        0.0s
------
 > [8/8] COPY docker-entrypoint.sh /:
------
failed to compute cache key: "/docker-entrypoint.sh" not found: not found

github.com

DOCKER_BUILDKIT=0をつけて実行する。

DOCKER_BUILDKIT=0 docker build -t redmine .
Sending build context to Docker daemon  5.632kB
Step 1/16 : FROM ruby:2.7-slim-buster
2.7-slim-buster: Pulling from library/ruby
69692152171a: Already exists
0a1f774fea41: Pull complete
3b32b9ebaa42: Pull complete
8115e4beca50: Pull complete
f6fc87221cc8: Pull complete
Digest: sha256:796bb81XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX5d7553e3b8e3006c
Status: Downloaded newer image for ruby:2.7-slim-buster
 ---> 6a0c8bc5079b
Step 2/16 : RUN groupadd -r -g 999 XXXXXX && useradd -r -g XXXXXX -u 999 XXXXXX
 ---> Running in dXXXXXXX5faf
Removing intermediate container dXXXXXXX5faf
 ---> 7eXXXXXXXXX1
Step 3/16 : RUN set -eux;       apt-get update;         apt-get install -y --no-install-recommends              ca-certificates     wget                             bzr             git             mercurial               openssh-client          subversion          ghostscript              gsfonts                 imagemagick             gosu            tini    ;       sed -ri 's/(rights)="none" (pattern="PDF")/\1="read" \2/' /etc/ImageMagick-6/policy.xml;     rm -rf /var/lib/apt/lists/*
 ---> Running in 3aXXXXXXXXb8f
+ apt-get update
Get:1 http://deb.debian.org/debian buster InRelease [121 kB]
Get:2 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB]
Get:3 http://deb.debian.org/debian buster-updates InRelease [51.9 kB]
Get:4 http://deb.debian.org/debian buster/main amd64 Packages [7907 kB]
Reading package lists...
E: Release file for http://security.debian.org/debian-security/dists/buster/updates/InRelease is not valid yet (invalid for another 6d 22h 27min 0s). Updates for this repository will not be applied.
E: Release file for http://deb.debian.org/debian/dists/buster-updates/InRelease is not valid yet (invalid for another 6d 20h 34min 43s). Updates for this repository will not be applied.
The command '/bin/sh -c set -eux;       apt-get update;         apt-get install -y --no-install-recommends              ca-certificates              wget                            bzr             git             mercurial               openssh-client          subversion                           ghostscript             gsfonts                 imagemagick             gosu            tini    ;   sed -ri 's/(rights)="none" (pattern="PDF")/\1="read" \2/' /etc/ImageMagick-6/policy.xml;         rm -rf /var/lib/apt/lists/*' returned a non-zero code: 100

Release file for ~ is not valid yet で調べたら以下が出た。

askubuntu.com

$ hwclock
2021-06-05 22:49:41.944759+09:00
$ sudo hwclock --hctosys
$ hwclock
2021-06-05 22:50:31.948921+09:00

変わってなさそうだけど、とりあえず再実行すると先に進む。

Step 12/16 : VOLUME /usr/src/redmine/files
 ---> Running in XXXXXXXXX
Removing intermediate container 5cb9ce07f1e0
 ---> XXXXXXXXXX
Step 13/16 : COPY docker-entrypoint.sh /
COPY failed: file not found in build context or excluded by .dockerignore: stat docker-entrypoint.sh: file does not exist
$ touch docker-entrypoint.sh
Successfully built XXXXXXXXXX
Successfully tagged redmine:latest

うまくいったっぽい。

あとで正式にdocker-entrypoint.shをコピーしておく。

github.com

前回もMySQL8系で落ちたところで躓いた。(全然覚えてないよね・・・)

qiita.com

MySQLのコンテナに入って、rootユーザの認証方法を従来のパスワードに変更する。

Docker版Redmineをローカルで動かす
Docker版Redmineをローカルで動かす

でーきた。

考察

今更かよって感じなのですが今回設定ファイル(Dockerfileとかdocker-compose.yml)でコンテナを起動しさえすれば最悪ファイル管理がいらないってのがメリットだと感じた。

なんで気が付いたのかというと、以前普通にredmineディレクトリごとcloneしてきたんだけど、別にファイル自体はローカルにある必要性がないなと思っていて(ローカルで開発するわけじゃなくて箱として利用するだけだから)、今回Dockerfileとdocker-entrypoint.shだけでコンテナが立ち上がって普通にRedmineサービスを利用できたのに気が付いてこれがコンテナのメリットなんだと思った(ほんと今更)。

今まではdocker imagesも邪魔くさいと思って都度削除していたんだけど、imageがローカルにあるだけで起動、停止コマンドのみで環境が簡単に整備できちゃうのはやっぱりすごいなぁーって感じた。

インフラ知識は皆無なので引き続きがんばりたいしょぞんでございます。

ご覧いただきありがとうございました。

追記

今回のそもそもの目的は今のプロジェクトで端末管理をしたいという要望が出ていて、Redmineで簡単に管理できそうだなーって思ったから。

ただ無料で利用できるHerokuはDB制約があってpostgresのみのため、今回MySQLで簡単に作ったあとにデプロイできないじゃんって気がついたのでDockerでのHerokuデプロイはやめました。

で次に考えたのが以前Dockerなしで作ったRedmineのローカル環境を再度名前を変えてデプロイしようとおもったのだが、mimemagicのライセンス問題にここでぶつかってしまい、こちらも結構時間がかかりそうだなぁと思いつつダラダラ作業しています。

また進捗あれば報告したいと思います。

おわり。