【開発環境構築②】Ruby on Rails & Nginx & MySQLの開発環境をDockerで構築!

こんにちは。ライフマップ開発チームの富山です。
今回はDockerのイメージに関するお話をします。
前回はこちら『【開発環境構築②】Ruby on Rails & Nginx & MySQLの開発環境をDockerで構築!』


Dockerのイメージを知ろう

イメージ( image )とは、Docker コンテナを作成する命令が入った読み込み専用のテンプレートです。通常イメージは、他のイメージをベースにしてそれをカスタマイズして利用します。たとえば ubuntu イメージをベースとするイメージを作ったとします。そこには Apache ウェブ・サーバや自開発したアプリケーションといったものをインストールするかもしれません。さらにアプリケーション実行に必要となる詳細な設定も加えることにもなるでしょう。

Docker-docs-ja

「イメージ( image )とは、Docker コンテナを作成する命令が入った読み込み専用のテンプレートです」とハッキリ書いてくれているので分かりやすいですね。

イメージはDocker hubから入手しましょう

大事なのは公式のイメージを使うこと!
dockerは便利な反面、脆弱性も指摘されており、実際、その脆弱性やユーザの認識の甘さにつけ込んだ悪意あるイメージの存在が報告されています。(DNSハイジャッカーやバックドアなどが発見されている)
大事な情報を抜き取られたり、PCを外部から遠隔操作されたりする可能性もあるため、よく知らないイメージは出来るだけ避けましょう。
試しにdocker hubでrubyを検索してみてください。一番上の「ruby」の横に星のアイコンが付いていますね。この「Docker Official Image」のアイコンが名前の横についてるものが安心です。「Verified Publisher」「Sponsored OSS」なども比較的安心です。

Docker hub / Trusted Content = 信用できるコンテンツ

rubyのイメージについて解説のあるページに行くと、右側にRecent Tagsがあると思うので、その中からlatest(最新)のものを選んでみます。イメージの中身を確認するだけなので、latestでなくともOKです。

latestタグは常に最新のものに付くので、毎回同じ内容ではないことに注意

OS/ARCHとは

まずは「OS/ARCH」ですが、こちらは前回の記事でご説明した「dockerはホストOSに依存する」というのが分かっていれば「あ、ここで自分のPCに合わせて選ぶんだな」と思えるようになっているはずです。
そこまで理解できていれば大丈夫。
私の場合はM1 macなので「linux/arm64」を選びます。もしどれを選ぶか分からなければ、ターミナルで調べてみましょう。「uname -m」と打てば分かります。
※arm64って何?って思った方は、ぜひ「CPUと命令セット」について調べてみてください。前回もちょっと説明したx86_64やarm64とはCPUの命令セットの名称です。

私のPCでの結果

レイヤーとは

0から始まって1、2…と行ごとにコマンドが書かれていますね。これが、レイヤーと呼ばれるもので、このレイヤー1つ1つに命令が書かれています。rubyはLayers(16)とあるので、16のレイヤーでイメージが作成されるようです。
今はコマンドの詳細は分からなくても、料理のレシピのように「ニンジンを洗う」「半月切りにする」「お湯を沸かす」…など、コンテナを作るのに必要なコマンドが書いてあるのだなと理解しておいてください。

一番最初に説明したように、イメージは「Docker コンテナを作成する命令が入った読み込み専用のテンプレート」で、最低限の内容しか入っておらず、しかも読み込み専用です。コレを自分専用にカスタマイズするにはDockerfileを作る必要があります。
Dockerfileの書き方は別で説明しますが、Dockerfileに必要なコマンドを書き足していくことで、イメージにレイヤーを重ねることができるという事が分かっていると、色々と落ち着いて対処できるようになりますので、ぜひ覚えておいてください。

ここだけ覚えておいてほしい

  • イメージとは、Docker コンテナを作成する命令が入った読み込み専用のテンプレート

  • イメージを使う時は公式のもの!

  • コンテナをアレンジして作る時はイメージにレイヤーを足していく

  • レイヤーを足すにはDockerfileに1つずつコマンドを書く

今回はイメージの概要について説明しました。特にレイヤーについてはDockerを使う時にあまり意識しないものですが、けっこう大事です。
レイヤーの存在を意識しつつ、次回はコンテナについてお話しします。

この記事が気に入ったらサポートをしてみませんか?