はじめに
ちょっと Ruby でコード書きたいとかの場合、さらっと環境作って試してをやってみたい場合ように環境構築しました。
GitHub[1]に上げていたのでやってみたい方はお試しを~
docker, docker composeって?
docker って?
さくらインターネットの記事[2]の方が詳しいですが、ざっくりといえば仮想マシンです。docker ってなんなの?って方はまず上の記事を読んでみてください。
コード管理されたシステム構成のため、(完全ではないが)ホストOSの差異をなくして環境を構築することができます。
また、DockerHub[3]に公開されている設定を使ってもOKですし、そこから Dockerfile を記述し独自に設定することも可能です。
docker compose って?
複数の docker コンテナを一括管理するための仕組みです。一括で起動・停止ができるほか、起動の前後関係を定義したり、各コンテナのポート番号等を管理できたりします[4]。
例えば、DB とアプリ2つのコンテナを使用した場合、アプリ側でテーブル作成するためには DB のコンテナが先に立ち上がっている必要があります。そんな時、アプリコンテナ起動の条件として DB コンテナの起動完了を指定できたりします。
なんで今回 Docker compose 使うの?
docker compose 使う必要は現状ないですが、将来的に DB やら他の言語のコンテナここに組みこもうと考えているので docker compose にしました。深い意味はないです。
docker だけでやるならこんな感じですかね。動作確認していないので動きは担保しかねます
docker のみで環境構築
Dockerfile
FROM ruby:3.1.2
ENV APP_ROOT /usr/src
COPY ./$APP_ROOT
RUN bundle install
起動方法
$docker run --rm .
$docker attach #{コンテナID}
# cd /usr/src
# ruby src/puts.rb
今回のコードは何しているの?
以下は[1]の docker-compose の中身です
version: "3"
services:
ruby:
image: ruby:3.1.2 # dockerhubに公開されている公式 3.1.2 イメージ
volumes:
- ./:/usr/src # 仮想マシンの /usr/src に本リポジトリの root をリンクする
tty: true # コマンド終了後もコンテナ停止をさせない
やっていることは単純で、公開されているイメージを使い、ローカルのソースコードを仮想マシン上から読み込めるようにしているだけです。
tty について
この設定[5]自体はコンテナの出力をホストマシンに書き出すの様です。
標準出力を出し続けるので、裏技的にコンテナが終了しないようにしているのかもしれないです。
参考
[1] turkey136/ruby-example, https://github.com/turkey136/ruby-example/commit/745710121872917af1f51f1581e934ac9687ec25
[2] Docker入門(第一回)~Dockerとは何か、何が良いのか~,https://knowledge.sakura.ad.jp/13265/
[3] dockerhub, https://hub.docker.com/
[4] Docker Compose 概要, https://docs.docker.jp/compose/overview.html
[5] foreground, https://docs.docker.com/engine/reference/run/#foreground
コメント