dockerに入門してみる(その1)
普段はAndroidとQAの勉強をしている。 まだその2分野も初心者だけど、7月くらいから自分でJenkinsでCI/CD環境を作りたいと思って着手できていなかったから、息抜きも兼ねて入門してみる。
前にDesktop版を入れたときにTutorialを少しやったような気もするけど、改めて「docker tutorial」で調べてみた。 www.docker.com 公式で、もう少し詳しめのTutorialがあるらしい。
案内に従って、さっそくWindowsのPowershellからdocker run -dp 80:80 docker/getting-started
を打ってみた。
C:\Users\530lo> docker run -d -p 80:80 docker/getting-started Unable to find image 'docker/getting-started:latest' locally latest: Pulling from docker/getting-started 188c0c94c7c5: Pull complete 617561f33ec6: Pull complete 7d856acdaa9c: Pull complete a0d3c6e28e6d: Pull complete af69a9b963c8: Pull complete 0739f3815ad8: Pull complete 7c7b75d0baf8: Pull complete Digest: sha256:......
何かを引っ張ってきたらしい。そのままhttp://localhost/
を開くと、"Getting Started"というタイトルのそれっぽい画面が表示された。
さっそく、今打ったばかりのコマンドについて解説がある。
-d
: デタッチモードでコンテナを実行します。-p 80:80
: ホストPCのport80とコンテナのport80を結びつけますdocker/getting-started
: 使用するイメージです。
つまり、docker/getting-started
というイメージをデタッチモードで実行し、そのとき用いるポートはホストとコンテナともに80番を指定している。ということらしい。
ちなみに、-d
や-p
といったオプションは組み合わせることができ、docker run -dp 80:80 docker/getting-started
といった書き方もできるそう。
ホストPCのポート指定は分かるけど、コンテナのポートって何だろう。 と思ったら、その下に"What is a container?"パラグラフがあった。
コンテナとは、ホストマシンの他プロセスから独立した、ホストマシン上の1つのプロセスです。この分離は、Linuxで長年利用されてきた機能であるkernel namespaces and cgroupsを利用して実現されています。
medium.com ホストPC内の1つのプロセスを使用して、仮想環境を作っている…という理解で良さそう。プロセスが仮想環境になる、凄い。 つまり、「コンテナのポート」は「仮想環境のポート」ということですね。
ついでに、コンテナイメージについても説明されている。
コンテナを実行しているとき、そのコンテナは独立したファイルシステムを使っています。このカスタムファイルシステムを提供するのがコンテナイメージです。 イメージはコンテナのファイルシステムを含むため、dependenciesやconfigurationなどアプリケーションの実行に必要な全ての要素を含んでいなければなりません。 そのほかにも、環境変数やデフォルトで実行するべきコマンドなどのコンテナのための設定情報も含んでいます。
引き合いに出されているchroot
には詳しくないけど、コンテナを構築するために必要な全てがコンテナイメージに入っていて、独立性も保てるからスゴイ!ということみたい。
まだ序盤も序盤しか触っていないけど、「docker便利」をやっと認識できてきた気がする。