Perl 7

驚きのニュースが飛び込んできた。Perl が約25年ぶりのメジャーバージョンアップだと。

どのくらい驚いたかって、Perl の記事がほとんどないこのブログにも書いちゃうくらい驚いた。

とりあえず記録として残しておく。

Ubuntu 20.04にnodenvをインストール

GitHub のリポジトリにあるドキュメントを見ながら。

GitHub – nodenv/nodenv

まずは GitHub から clone

takatoh@apostrophe:~$ git clone https://github.com/nodenv/nodenv.git ~/.nodenv

オプション扱いだけど dynamic bash extension とかいうのをビルド。nodenv がスピードアップするらしい。

takatoh@apostrophe:~$ cd ~/.nodenv && src/configure && make -C src

環境変数 PATH に ~/.nodenv を追加してから、セットアップ。

takatoh@apostrophe:~$ ~/.nodenv/bin/nodenv init
Load nodenv automatically by appending
the following to ~/.bashrc:

eval "$(nodenv init -)"

メッセージにあるとおり、.bashrc に記述を追加。終わったらシェルを起動し直す。

nodenv-doctor スクリプトで、ちゃんとインストールできてるか確認。

takatoh@apostrophe:~$ curl -fsSL https://github.com/nodenv/nodenv-installer/raw/master/bin/nodenv-doctor | bash

OK って出たから大丈夫なんだろう。

つぎに、これもオプションみたいだけど、node-build をインストール。

takatoh@apostrophe:~$ mkdir -p "$(nodenv root)"/plugins
takatoh@apostrophe:~$ git clone https://github.com/nodenv/node-build.git "$(nodenv root)"/plugins/node-build

これで完了。

nodenv install -l でインストール可能な Node.js のバージョン一覧が見られる。公式サイトによると 12.18.1 が最新の推奨版なので、それをインストールする。

takatoh@apostrophe:~$ nodenv install 12.18.1

nodenv global で利用するバージョンを指定。

takatoh@apostrophe:~$ nodenv global 12.18.1

これで最新推奨版の Node.js が使えるようになる。

takatoh@apostrophe:~$ node --version
v10.19.0

えっ??

takatoh@apostrophe:~$ nodenv versions
  system
* 12.18.1 (set by /home/takatoh/.nodenv/version)

ちゃんと 12.18.1 になってるじゃないか。どういうこと?

ちょっとびっくりしたけど、なんのことはない、シェルを立ち上げ直したらできた。

takatoh@apostrophe:~$ node -v
v12.18.1

おしまい。

Docker Compose

前回の記事では、Docker のネットワークを使って通信しながら、複数のコンテナを協働させた。

基本的には前回の記事のやり方でいいんだけど、サービスの数が増えたり、規模が大きくなってコンテナの数が増えたりすると、コンテナごとにコマンドを打って起動するのは面倒だ。コンテナによって指定するオプションも異なるので、それも覚えておく必要がある。

というわけで、そういう煩雑な部分を楽にしてくれるツールがある。それが Docker Compose だ。メインマシンである apostrophe をセットアップしたときに apt でインストールしておいた。

akatoh@apostrophe:docker$ docker-compose --version
docker-compose version 1.25.0, build unknown

題材と構成

前回記事と同じ、書籍管理 web アプリと HTTP サーバ(Nginx)という構成にする。詳しくは前回記事を参照。

ビルド済みのイメージを利用する

前回ビルドした Docker イメージが残っているので、まずはそれを使ってコンテナを起動する設定を書いてみる。

Docker Compose は docker-compose.yml という名前のファイルを読み込んで、その設定どおりにコンテナを起動してくれる。今回書いた docker-compose.yml ファイルは次の通り。

version: '3'
services:

  bruschetta-back:
    image: bruschetta:1
    container_name: bruschetta-back
    restart: always

  nginx-front:
    image: nginx-c:1
    container_name: nginx-front
    restart: always
    ports:
      - 8080:80

service: の下に連なっているのが、Docker Compose で起動するコンテナだ。各設定項目は見ればだいたいわかるだろうからここでは説明は省略。ただ、docker コマンドで起動するときとは次の点が違う。

  • Docker ネットワークは自動で作ってくれるので設定不要
  • コンテナ間通信は、コンテナ名ではなく service 名で行われる

特に2つ目の挙動は docker コマンドで起動したときと違うので注意が必要だ。最初、ここでハマった。

で、これを起動するには次のようにする。

takatoh@apostrophe:docker$ docker-compose up -d

起動中のコンテナの確認。

takatoh@apostrophe:docker$ docker-compose ps

そして停止。

takatoh@apostrophe:docker$ docker-compose stop

最後にコンテナの削除。

takatoh@apostrophe:docker$ docker-compose rm

Dockerイメージをビルドして利用する

さて、今度は Docker イメージをビルドするところからやってみる。そのためには、docker-compose.yml ファイルと同じディレクトリに、イメージ作成用のファイル一式を収めたディレクトリを置いておく。こんな感じ。

akatoh@apostrophe:docker$ ls -l
合計 12
drwxrwxr-x 3 takatoh takatoh 4096 5月 9 03:15 bruschetta
-rw-rw-r-- 1 takatoh takatoh 239 6月 14 13:26 docker-compose.yml
drwxrwxr-x 3 takatoh takatoh 4096 5月 14 06:19 nginx-c

そして、docker-compose.yml ファイルを次のように書き変える。

version: '3'
services:

  bruschetta-back:
    build: ./bruschetta
    image: bruschetta:1
    container_name: bruschetta-back
    restart: always

  nginx-front:
    build: ./nginx-c
    image: nginx-c:1
    container_name: nginx-front
    restart: always
    ports:
      - 8080:80

書き変えた、というか書き足したのは、build: の行だ。この行でイメージをビルドするための Dockerfile (とその他に必要なフィアル)を置いてあるディレクトリを指定している。

ビルドするには次のようにする。

takatoh@apostrophe:docker$ docker-compose build

イメージができたか、確認。

takatoh@apostrophe:docker$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
nginx-c             1                   c8b3966bbc31        54 seconds ago       127MB
bruschetta          1                   7d6607e796c2        About a minute ago   468MB
nginx               1.17.10             9beeba249f3e        4 weeks ago          127MB
ubuntu              20.04               1d622ef86b13        7 weeks ago          73.9MB

nginx-c:1 と bruschetta:1 がビルドされたイメージ。下の2つは元になったイメージ(Docker Hub から取ってきたもの)だ。

じゃあ、これを起動してみよう。

takatoh@apostrophe:docker$ docker-compose up -d

OK。ブラウザからアクセスしてみて、期待通りに動いているのを確認できた。