そろそろ真剣にDockerfileのapt-getコマンドについてちゃんと理解する

Docker

Dockerfile書くときに当たり前に出てきて当たり前にコピペされるこいつですが、いまいち「何に」対して「どういう」ことをしているか分かりづらいですよね。

本記事では、今まで特に意識せずコピペして使用していたapt-getについて、真剣に調べてみようと思います。今日で「まあでも動くし…」の日々はおさらばしたいなと思います!

apt-getってどういうコマンド???

まずは、apt-getコマンドがどういうコマンドかを理解していきます。

そもそもapt-getとは、Debian系(Ubuntuなど)のパッケージ管理ツールとのことらしい。もう少し紐解いていくと、

UbuntuとはLinuxカーネルを使用しているOSのことで

パッケージ管理ツールとは、そのOSの構築に必要なソフトウェアのインストール、アップグレード、削除等を行うもの

要は、dockerコンテナ上のOSを構築する上で必要なソフトウェアをインストールしたりアップグレードするコマンドになるということ。(OS自体はホストPCのものを共有しており、実際はファイルシステムやミドルウェアをコンテナにインストールするようです。)

具体的なプログラムを読んでいきます。下記はrailsで使用されるDockerfileによく記載されるapt-getコマンドになります。

ARG RUNTIME_PACKAGES="bash nodejs yarn postgresql-client"
RUN apt-get update -qq
RUN apt-get install -y ${RUNTIME_PACKAGES}
RUN apt-get update -qq

まずはこちらの処理について。

apt-get updateはパッケージリストの更新をしているとのことで、/etc/apt/sources.listに書かれているurlから、パッケージファイルを引っ張ってきて/var/lib/apt/listsに格納するらしい。

railsでいうところのgemfileでインストールされたファイルがvendor/bundleディレクトリに、Node.jsでいうところのpackage.jsonでインストールされたファイルがnode_modulesディレクトリにファイルが格納されるイメージのようです。ここの処理ではFROMで、イメージにアプリケーション動作に必要な最低限のパッケージリストを引っ張ってきて、それをインストールするという動きをしているようですね。

そして、-qqオプションは出力を抑えるための動作とのことらしいです。-qがquietモードの略で、成功したかどうかを表示(エラーメッセージは出さない)挙動で、-qqはそれよりさらに静かにするモードとのこと

RUN apt-get install -y ${RUNTIME_PACKAGES}

ここでは、標準のアプリケーションミドルウェアに加えて追加したいソフトウェア(ツール?)を追加している処理になります。node_modulesでいうnpm i ○○○みたいなイメージですかね。

ということで、ここの処理はPCの環境構築を行うようなものということがわかりました。

apt-getってどこに対するコマンド?

続いて、どこに対して?という処理です。

ここまで書いてきて、OSを構築しているという理解までできると、docker上でどうやって使われるかはなんとなくイメージができます。dockerでは仮想サーバーを構築しその上にアプリケーションを載せます。その仮想サーバーのOSを構成するためにapt-getをしているということになります。

もう少し分かりやすく理解するために、図解にしてみました。

厳密に言えばOSはホストのものを使用しているのですが、ファイルシステム等は別のものを使用しており、アプリケーションサーバーやそのほかのミドルウェアはdockerコンテナで作成されたものを使用しております。

dockerにおけるapt-getに関するまとめ

本記事では、dockerfileの処理でよく使用されるapt-getに関する記事を作成しました。

まだ曖昧な理解になっているところ(間違っているところもあるかも…)等もありますので、今後dockerに対する知識や経験を積んで理解を深めていきたいです!

コメント

タイトルとURLをコピーしました