hvystnの日記

備忘録です

Rails6 on Dockerの環境構築 - Yarnのバージョン指定

Rails6 on Dockerの環境構築 - hvystnの日記
Rails6 on Dockerの環境構築 - Dockerイメージのバージョン指定 - hvystnの日記
Rails6 on Dockerの環境構築 - Node.jsのバージョン指定 - hvystnの日記
上記の記事でRails6の環境構築、PostgreSQL、Node.jsのバージョン指定を実施しました。

今回はStable versionをインストールしていたYarnのバージョンを指定してみます。
バージョン指定の必要性については以前の記事に記載していますので、ご参照ください。

どうやってYarnのバージョンを指定する方法を見つけますか?

いつも通り、公式サイトを確認してみます。
install#debian-stable | Yarn
しかし、Debianでのインストールページには特にバージョンを指定する方法は見当たりませんでした。
他のページで、代替手段というページを見つけました。
install#alternatives-stable | Yarn
ここに、公式が作成しているインストールスクリプトがあり、こちらを使うとバージョン指定をしてインストールできるようです。
早速Dockerfileを修正して、イメージを削除して初めから実施してみました。

RUN curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.22.5 \
         && curl -sL https://deb.nodesource.com/setup_12.x | bash - \
         && apt-get update -qq && apt-get install -y nodejs postgresql-client

しかし、実行してみると下記エラーメッセージが表示されました。

Step 2/13 : RUN curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.22.5     && curl -sL https://deb.nodesource.com/setup_12.x | bash -     && apt-get update -qq && apt-get install -y nodejs postgresql-client
 ---> Running in 4d9819f5b89b
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    54  100    54    0     0    159      0 --:--:-- --:--:-- --:--:--   159
100  7152  100  7152    0     0   9460      0 --:--:-- --:--:-- --:--:--  9460
Installing Yarn!
> Downloading tarball...

[1/2]: https://yarnpkg.com/downloads/1.22.5/yarn-v1.22.5.tar.gz --> /tmp/yarn.tar.gz.DzI01qASJH
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    80  100    80    0     0    256      0 --:--:-- --:--:-- --:--:--   256
100    93  100    93    0     0    148      0 --:--:-- --:--:-- --:--:--   148
100   643  100   643    0     0    805      0 --:--:-- --:--:-- --:--:--   805
100 1215k  100 1215k    0     0   424k      0  0:00:02  0:00:02 --:--:--  745k

[2/2]: https://yarnpkg.com/downloads/1.22.5/yarn-v1.22.5.tar.gz.asc --> /tmp/yarn.tar.gz.DzI01qASJH.asc
100    84  100    84    0     0    272      0 --:--:-- --:--:-- --:--:--   272
100    97  100    97    0     0    238      0 --:--:-- --:--:-- --:--:-- 97000
100   647  100   647    0     0   1444      0 --:--:-- --:--:-- --:--:--  1444
100   832  100   832    0     0   1264      0 --:--:-- --:--:-- --:--:--  1264
> Verifying integrity...
gpg: key 1646B01B86E50310: public key "Yarn Packaging <yarn@dan.cx>" imported
gpg: Total number processed: 1
gpg:               imported: 1
gpg: Signature made Thu Aug 27 11:16:49 2020 UTC
gpg:                using RSA key 6D98490C6F1ACDDD448E45954F77679369475BAA
gpg: Good signature from "Yarn Packaging <yarn@dan.cx>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 72EC F46A 56B4 AD39 C907  BBB7 1646 B01B 86E5 0310
     Subkey fingerprint: 6D98 490C 6F1A CDDD 448E  4595 4F77 6793 6947 5BAA
> GPG signature looks good
> Extracting to ~/.yarn...
> Adding to $PATH...
> We've added the following to your /root/.bashrc
> If this isn't the profile of your current shell then please add the following to your correct profile:
   
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH"

Yarn requires Node.js 4.0 or higher to be installed.
> Yarn was installed, but doesn't seem to be working :(.
ERROR: Service 'web' failed to build: The command '/bin/sh -c curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.22.5     && curl -sL https://deb.nodesource.com/setup_12.x | bash -     && apt-get update -qq && apt-get install -y nodejs postgresql-client' returned a non-zero code: 1

Yarn was installed, but doesn't seem to be working :(.

調査してみましたが、修正方法がわからなかったので、この方法は一旦保留にします :(

公式の代替手段ページにはtarball を使用する手動インストールという項目もありましたが、こちらにもバージョン指定の方法は記載されていませんでした。

他の方法を調査したところ、Qiitaの記事を見つけたので、こちらで実施してみます。

qiita.com

どうやってYarnのバージョンを指定してインストールしますか?

Yarnのバージョン指定した.debファイルをYarnのgithubから直接取得し、インストールをしているようです。
Releases · yarnpkg/yarn · GitHub
上記のページの該当ファイルでリンク先のアドレスをコピーすると、wgetで取得するURLと同じことが確認できます。
ちなみに、.debファイルはDebian, Ubuntu などの Linux で利用されるパッケージの拡張子であり、dpkgやaptコマンドでインストールできるようです。
kaworu.jpn.org
Yarnのバージョンは現在最新のv1.22.5にして、Dockerfileを修正します。

RUN wget https://github.com/yarnpkg/yarn/releases/download/v1.22.5/yarn_1.22.5_all.deb \
    && dpkg -i yarn_1.22.5_all.deb \
    && rm yarn_1.22.5_all.deb \
    && curl -sL https://deb.nodesource.com/setup_12.x | bash - \
    && apt-get update -qq && apt-get install -y nodejs postgresql-client

[update]Yarn version to fix · heavy-stone/rails6-docker@7d0f5fd · GitHub

ダウンロードしたファイルはYarnをインストール後に削除するので、rmコマンドを追加しています。
一から作り直すので、プロジェクトやDockerイメージも削除して最初から実施します。

$ docker-compose run web rails new . --force --no-deps --database=postgresql
database.yml修正
$ docker-compose build
$ docker-compose run web rake db:create

作り直しで、いくつかgemに差分が出ましたが、Rails6のデフォルトページの表示確認までできました。
apt-cache policyコマンドで1.22.5のyarnがインストールされていることも確認できました。

まとめ

Yarnをバージョン指定してインストールする方法を実施しました。

参考

github.com

今後の課題

ロケール設定
・クロック設定
・DBをMySQLに変更
・シェルによる自動環境構築化

Rails6 on Dockerの環境構築 - Node.jsのバージョン指定

Rails6 on Dockerの環境構築 - hvystnの日記
Rails6 on Dockerの環境構築 - Dockerイメージのバージョン指定 - hvystnの日記
上記の2つの記事でRails6の環境構築と、PostgreSQLのバージョン指定を実施しました。

今回はRails6の環境構築時にインストールしていたNodejsのバージョンも指定してみます。

Node.jsのインストールは方法はどこでわかりますか?

nodejs.org

Node.js公式ページにアクセスし、インストール方法を確認します。
下記順番にクリックしていきます。
ダウンロード>
パッケージマネージャを使用したダウンロード>
DebianUbuntu ベースの Linux ディストリビューションエンタープライズ Linux/Fedora と Snap パッケージ
ここに「Node.js 公式のバイナリディストリビューションが NodeSource によって提供されています。」との文言があり、こちらもリンクになっているので、クリックします。
するとGithubのページに飛ばされれます。

github.com

Node.jsのソースコードはここで管理されているようです。
READMEを読むと、Debian and Ubuntu based distributions (deb)>Installation instructionsにインストール方法が記載されていますので、こちらに従ってインストールを実施していきます。

Node.jsのバージョンはどれを使用しますか?

Node.jsにはいくつかバージョンがありますが、現状LTSとなっているバージョン12.xにしたいと思います。
LTSについてはLTS、STSとはを参照してください。

そもそも、現状はapt-get install nodejsでNode.jsをインストールしていましたが、どのバージョンが入っているのか調べてみました。

qiita.com

apt-cache policyコマンドでapt-getによってインストールされる予定のイメージやインストール済みのイメージを確認できるそうです。

$ docker-compose exec web bash
root@1d81f8131ca3:/myapp# apt-cache policy nodejs
nodejs:
  Installed: 10.21.0~dfsg-1~deb10u1
  Candidate: 10.21.0~dfsg-1~deb10u1
  Version table:
 *** 10.21.0~dfsg-1~deb10u1 500
        500 http://deb.debian.org/debian buster/main amd64 Packages
        500 http://security.debian.org/debian-security buster/updates/main amd64 Packages
        100 /var/lib/dpkg/status

Installedがインストール済みのバージョンなので、Node.jsのv10.xがインストールされているようです。
上記の例ではVersion tableに記載されているバージョンは一つですが、他のパッケージではVersion tableには複数バージョンの取得先が記載されることもあり、そのtableの中のバージョン一つをCandidateとして指定し、apt-get installコマンドでそのバージョンのパッケージをインストールするようです。
同様にNode.jsのInstallationでも、Version tableに新しいバージョンを追加し、Candidateを書き換えて、インストールするバージョンを変更するようです。
GithubのNode.jsのREADME>Installation instructions>Node.js v12.x:に従い、実際に進めていきます。
ちなみに、Node.js LTS (v12.x):の項目もありますが、Node.js v12.x:の方で進めます。

なぜ、Node.js LTS (v12.x):ではなく、Node.js v12.x:を選択しますか?

この理由は、前回のDockerイメージのバージョン指定の必要性で記載した理由と同じです。
Node.js LTSのバージョンは今でこそv12.xですが、Node.jsの開発が進むとv14.xやv16.xに変更される可能性があります。
Node.jsがv12.xでうまく動いていたのに、LTSの付け替えでv14.xをインストールしてしまい、Rails6が動かなくなるという可能性がありますので、Node.jsのバージョンはv12.xに固定したいと思います。
よってNode.js LTS (v12.x):ではなく、Node.js v12.x:の項目に従い、インストールを進めます。

Node.js v12.xのインストールはどのように実施しますか?

Rails6用のrubyイメージのOSはDebianなので、Node.js v12.x:># Using Debian, as rootのコマンドを実施します。
今回、Dockerfileにコマンドを記載する前に、手動でインストールする方法を試してみます。

$ docker-compose exec web bash
root@d4b3b0f7947f:/myapp# curl -sL https://deb.nodesource.com/setup_12.x | bash -

## Installing the NodeSource Node.js 12.x repo...


## Populating apt-get cache...

+ apt-get update
Hit:1 http://deb.debian.org/debian buster InRelease
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]           
Hit:4 https://dl.yarnpkg.com/debian stable InRelease                                   
Get:5 http://security.debian.org/debian-security buster/updates/main amd64 Packages [224 kB]
Fetched 341 kB in 1s (399 kB/s)
Reading package lists... Done

## Confirming "buster" is supported...

+ curl -sLf -o /dev/null 'https://deb.nodesource.com/node_12.x/dists/buster/Release'

## Adding the NodeSource signing key to your keyring...

+ curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -
OK

## Creating apt sources list file for the NodeSource Node.js 12.x repo...

+ echo 'deb https://deb.nodesource.com/node_12.x buster main' > /etc/apt/sources.list.d/nodesource.list
+ echo 'deb-src https://deb.nodesource.com/node_12.x buster main' >> /etc/apt/sources.list.d/nodesource.list

## Running `apt-get update` for you...

+ apt-get update
Hit:1 http://deb.debian.org/debian buster InRelease
Hit:2 http://security.debian.org/debian-security buster/updates InRelease
Hit:3 http://deb.debian.org/debian buster-updates InRelease           
Hit:4 https://dl.yarnpkg.com/debian stable InRelease                  
Get:5 https://deb.nodesource.com/node_12.x buster InRelease [4584 B]
Get:6 https://deb.nodesource.com/node_12.x buster/main amd64 Packages [767 B]
Fetched 5351 B in 1s (3640 B/s)  
Reading package lists... Done

## Run `sudo apt-get install -y nodejs` to install Node.js 12.x and npm
## You may also need development tools to build native addons:
     sudo apt-get install gcc g++ make
## To install the Yarn package manager, run:
     curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
     echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
     sudo apt-get update && sudo apt-get install yarn

今気づきましたが、Yarnのインストール方法もここに記載されてるんですね〜親切ですね!
apt-cache policyでCandidateが変更されたか確認します。

root@d4b3b0f7947f:/myapp# apt-cache policy nodejs
nodejs:
  Installed: 10.21.0~dfsg-1~deb10u1
  Candidate: 12.18.3-1nodesource1
  Version table:
     12.18.3-1nodesource1 500
        500 https://deb.nodesource.com/node_12.x buster/main amd64 Packages
 *** 10.21.0~dfsg-1~deb10u1 500
        500 http://deb.debian.org/debian buster/main amd64 Packages
        500 http://security.debian.org/debian-security buster/updates/main amd64 Packages
        100 /var/lib/dpkg/status
root@d4b3b0f7947f:/myapp# 

ちゃんとv12.xに変更されていることが確認できました。
インストールもして、再度確認してみます。

root@d4b3b0f7947f:/myapp# apt-get install -y nodejs
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  libbrotli1 libc-ares2 libuv1 nodejs-doc
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
  libnode64
The following packages will be upgraded:
  nodejs
1 upgraded, 0 newly installed, 1 to remove and 2 not upgraded.
Need to get 18.2 MB of archives.
After this operation, 69.3 MB of additional disk space will be used.
Get:1 https://deb.nodesource.com/node_12.x buster/main amd64 nodejs amd64 12.18.3-1nodesource1 [18.2 MB]
Fetched 18.2 MB in 3s (7145 kB/s) 
debconf: delaying package configuration, since apt-utils is not installed
dpkg: libnode64:amd64: dependency problems, but removing anyway as you requested:
 nodejs depends on libnode64 (= 10.21.0~dfsg-1~deb10u1).

(Reading database ... 24492 files and directories currently installed.)
Removing libnode64:amd64 (10.21.0~dfsg-1~deb10u1) ...
(Reading database ... 24485 files and directories currently installed.)
Preparing to unpack .../nodejs_12.18.3-1nodesource1_amd64.deb ...
Unpacking nodejs (12.18.3-1nodesource1) over (10.21.0~dfsg-1~deb10u1) ...
Setting up nodejs (12.18.3-1nodesource1) ...
Processing triggers for libc-bin (2.28-10) ...

root@d4b3b0f7947f:/myapp# apt-cache policy nodejs
nodejs:
  Installed: 12.18.3-1nodesource1
  Candidate: 12.18.3-1nodesource1
  Version table:
 *** 12.18.3-1nodesource1 500
        500 https://deb.nodesource.com/node_12.x buster/main amd64 Packages
        100 /var/lib/dpkg/status
     10.21.0~dfsg-1~deb10u1 500
        500 http://deb.debian.org/debian buster/main amd64 Packages
        500 http://security.debian.org/debian-security buster/updates/main amd64 Packages
root@d4b3b0f7947f:/myapp# nodejs --version
v12.18.3

Installedがv12.xに変更され、nodejs --versionコマンドでもv12.xがインストールされていることを確認できました。
この手順で問題ないようですので、上記の手順をDockerfileに追加します。

[update]nodejs version to fix · heavy-stone/rails6-docker@5dbf44a · GitHub

一から作り直すので、プロジェクトやDockerイメージも削除して最初から実施します。

$ docker-compose run web rails new . --force --no-deps --database=postgresql
database.yml修正
$ docker-compose build
$ docker-compose run web rake db:create

作り直しで、いくつかgemに差分が出ましたが、Rails6のデフォルトページの表示確認までできました。
apt-cache policyコマンドでv12.xのnode.jsがインストールされていることも確認できました。

まとめ

Node.jsをバージョン指定してインストールする方法を実施しました。

参考

github.com

今後の課題

・バージョン指定は大切と言いながら、YarnはStable versionを使用しており、バージョン指定できてなかった。。

qiita.com

ロケール設定
・クロック設定
・DBをMySQLに変更
・シェルによる自動環境構築化
・Nuxt環境構築

Rails6 on Dockerの環境構築 - Dockerイメージのバージョン指定

hvystn.hatenablog.com こちらの記事でDockerの公式Quickstartに従い、最低限のRails6の環境を構築しました。
今回はDBとして使用しているPostgreSQLイメージのバージョンを指定します。

なぜDockerイメージのバージョン指定をする必要がありますか?

手を動かす前に、なぜイメージのバージョン指定をするのか、その必要性を考えてみました。

If no tag is provided, Docker Engine uses the :latest tag as a default.

docker pull | Docker Documentation

公式によると、タグがない場合はデフォルトでlatestタグがついたイメージをpullするようです。
今のPostgreSQLのimege設定がちょうどこの状態です。

latestタグでの運用だと不具合がありますか?

実際にlatestタグ運用で不具合があるか調べてみました。

別の作業中、管理画面の表示がおかしくなっているという話が出てきた。 そこで調べてもらったところ、なぜかリリースしたはずの機能が正常に機能していない、という連絡を受けた。 また、影響範囲としてはデータの欠損が発生しているようだということも分かった。

progret.hatenadiary.com

検索方法が悪かったのか不具合についての記事は意外と出てこなったのですが、これは恐怖ですね。。

latestタグとは何でしょうか?

latestタグはその名の通り、latestというただのタグです。
latestイメージというのはlatestタグが付いたイメージのことです。
タグはイメージに紐付けられますが、イメージの管理者がタグの付け替えを行うことができます。
以前はバージョン6.xのイメージにlatestタグが紐付けられていたが、アップデートで8.xにlatestタグが付け替えられ、それを知らずにpullしてバージョン違いのイメージでコンテナを起動してしまうと、上記のような不具合につながる可能性がある、だからlatestタグ運用は危険ということだと思います。

また、AWSのECRではlatestタグを使用できないようにする設定もあるようです。

dev.classmethod.jp

コンテナ化したアプリケーションを管理するKubernetesの公式ドキュメントにも注意書きがあります。

Note: You should avoid using the :latest tag when deploying containers in production as it is harder to track which version of the image is running and more difficult to roll back properly.

kubernetes.io

イメージのバージョン追跡が困難になり、ロールバックができなくなるので、本番環境ではlatestタグの使用を避けるべきとのことです。

Dockerイメージのバージョンはどのように指定しますか?

When pulling an image by digest, you specify exactly which version of an image to pull. Doing so, allows you to “pin” an image to that version, and guarantee that the image you’re using is always the same.

docker pull | Docker Documentation

Docker公式によるとdigest(タグ)でプルするイメージのバージョンを正確に指定することで、そのバージョンにイメージを「固定」し、使用しているイメージが常に同じであることを保証できるようになるそうです。
Docker HUBのページでPostgreSQLのタグを確認してましょう。

dockerhub postgres

現在、latestタグはバージョン12.4に紐付いているようです。
実際にpullされたPostgreSQLのバージョンをローカルでも確認しましたが、12.4でした。

root@6007495537a6:/# psql --version
psql (PostgreSQL) 12.4 (Debian 12.4-1.pgdg100+1)

docker-compose.ymlのイメージ定義部分を変更します。
[update]PostgreSQL version to fix · heavy-stone/rails6-docker@e420242 · GitHub

image: postgres
↓
image: postgres:12.4

Dockerのlatestタグが付いたイメージを削除し、docker-compose upを実行すると、12.4のPostgreSQLイメージをpullしてくれました。

$ docker-compose up
Creating network "rails6-docker_default" with the default driver
Pulling db (postgres:12.4)...
12.4: Pulling from library/postgres
...

http://localhost:3000/ にブラウザでアクセスし、Rails6のページも確認できました。
これでPostgreSQLのバージョン指定が完了しました。

まとめ

Dockerイメージのバージョン指定の必要性について調査しました。
PostgreSQLのイメージバージョンを固定しました。
実はバージョン指定できていなのがもう一つあるので、今度はNode.jsのバージョン指定をしていきたいと思っています。

参考

vsupalov.com

github.com

Rails6 on Dockerの環境構築

Docker公式のQuickstart: Compose and Railsに従い、Rails6バージョンの環境構築を目指します。
docs.docker.com Railsは6.0.3、Rubyは2.7.1と現在リリースされている比較的新しいバージョンを導入します。

早速、Define the projectに従ってファイルを作成します。
[add]original setup file from docker docs · heavy-stone/rails6-docker@59d2519 · GitHub

RailsRubyのバージョンを変更します。
[update]Rails & Ruby versions · heavy-stone/rails6-docker@310ce26 · GitHub

Build the projectのRails newコマンドを実施しますが、webpacker: installでエラーが発生します。

$ docker-compose run web rails new . --force --no-deps --database=postgresql
...
       rails  webpacker:install
Yarn not installed. Please download and install Yarn from https://yarnpkg.com/lang/en/docs/install/
...

エラーメッセージにYarnがインストールされていないとあるので、Yarnをインストールするパッケージに加えます。
[add]yarn to install webpacker · heavy-stone/rails6-docker@35234c1 · GitHub
再度Rails newコマンドを実施しますが、またwebpacker: installでエラーが発生します。

$ docker-compose run web rails new . --force --no-deps --database=postgresql
...
       rails  webpacker:install
rails aborted!
ArgumentError: Malformed version number string 0.32+git
...

エラーメッセージで調査すると、どうやらYarnのバージョンが不正なバージョン?のようです。
stackoverflow.com
apt-getでそのままYarnを指定してしまうと0.32+gitという変なバージョンが入ってしまうらしいです。

https://github.com/yarnpkg/yarn/releases?after=v1.1.0
また、上記yarnのreleaseを追ってみましたが、0.32のようなversionはありませんでした。謎です。

正しいYarnのバージョンを入れる必要があるため、Yarnの公式Installationに従い、Debian(docker rubyイメージのOS)のインストール方法をDockerfileに追記します。
[update]yarn to stable version · heavy-stone/rails6-docker@6728287 · GitHub
再度Rails newコマンドを実施しますが、先ほど追記したコマンドでエラーが発生します。

$ docker-compose run web rails new . --force --no-deps --database=postgresql
Creating network "rails6-docker_default" with the default driver
Creating rails6-docker_db_1 ... done
Building web
Step 1/15 : FROM ruby:2.7.1
 ---> 958d3491c09a
Step 2/15 : RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
 ---> Running in 9162346e0243
/bin/sh: 1: sudo: not found
curl: (23) Failed writing body (629 != 1369)
ERROR: Service 'web' failed to build: The command '/bin/sh -c curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -' returned a non-zero code: 127

エラーメッセージによると、sudoコマンドがないようです。
調査したところ、そもそもdockerのデフォルトユーザーがrootのため、sudoは必要ないようです。
stackoverflow.com
https://docs.docker.com/engine/reference/run/#user
よって、sudoコマンドを削除します。
[fix]removing sudo from yarn installation · heavy-stone/rails6-docker@b04e163 · GitHub

また、Dockerfile 記述のベストプラクティスによると、DockerはRUNコマンド毎にレイヤーを作成し、レイヤー毎にキャッシュを作成するので、関連性のあるコマンドは一つのRUNコマンドに&&を使用してまとめるべしとあります。
matsuand.github.io
よって、パッケージ関連のapt-getコマンドは一つのRUNコマンドにまとめてしまいます。
[fix]yarn installation with && · heavy-stone/rails6-docker@ac18220 · GitHub

ここまで設定して、再度Rails newコマンドを実施します。

$ docker-compose run web rails new . --force --no-deps --database=postgresql
...
         run  yarn add @rails/webpacker@4.3.0 from "."
yarn add v1.22.5
...
Done in 97.47s.
Webpacker successfully installed 🎉 🍰
...

ちゃんとYarnのStable Version(1.22.5)が入っており、webpackerもインストールできたようです。
[do]docker-compose run web rails new . --force --no-deps --database=p… · heavy-stone/rails6-docker@b2f5258 · GitHub
Rails newで多くのファイルが作成されました。

Docker公式のQuickstartの途中でしたので、Build the projectに戻ります。
Rails newによってGemfileが更新されたので、イメージを再度ビルドする必要があるそうです。

$ docker-compose build

特に問題なく成功しました。

Docker公式のConnect the databaseを実施します。
RailsからPostgreSQLに接続する情報をdatabase.ymlに記載します。
[update]database.yml for pq · heavy-stone/rails6-docker@69a6f8d · GitHub

RailsPostgreSQLをコンテナで起動します。

$ docker-compose up

DBを作成します。

$ docker-compose run web rake db:create

ブラウザで http://localhost:3000 にアクセスすると、Rails6のデフォルトページが表示されていることを確認できました。

Yay! You&#x27;re on Rails6 on Docker!
Yay! You're on Rails6 on Docker!

まとめ

Docker公式のドキュメントに従い、最小限のRails6の環境構築を実施しました。
ロケール設定、クロック設定、ベストプラクティスの適用、Nodejsバージョン指定、DBをMySQLに変更、シェルによる自動環境構築化、Nuxt環境構築などまだまだやりたいことはあるので、少しずつ書いていきたいと思います。

参考

github.com

LTS、STSとは

LTS、STSについて調べる機会があったので、Wikipediaの概要部分を翻訳してみました。

長期サポート(Long-term support、 LTS)とは、コンピュータソフトウェアの安定したリリース(stable edition)が標準版(standard edition)よりも長い期間維持されるプロダクトライフサイクルの管理ポリシーのことです。この用語は、一般的にオープンソースソフトウェアにおいて、ソフトウェアの標準版よりも数ヶ月または数年長い期間サポートされるソフトウェア版を説明するものとして使用されます。

短期サポート(Short-term support、 STS)も、標準版のサポートポリシーとの違いを表す用語です。STSのライフサイクルは比較的短く、LTSからは省かれた新機能が提供されることがあります。(LTSでは安定性や互換性を損なう可能性を避けるため)

en.wikipedia.orgLTS、Standard、STSのそれぞれの特性を理解した上で、どのeditionを選択するか考えた方がいいですね。

 

また、Node.jsのLTSについて調べてみると、新しい発見がありました。

Every even-numbered major version will become an LTS release.

偶数ナンバーのメジャーバージョンは全てLTSになるそうです。

そう言われると、6.x、8.x、10.x、12.x、14.x とよく見るバージョンは偶数ばかりで、なるほどなと思いました。

github.com