Kubernetes勉強1:Docker概要(まずは試してみる)

babyFTHG7626_TP_V

Kubernetes勉強の第一弾です。

まずはKubernetesの裏で動いているDockerについて解説します。

スポンサーリンク
レクタングル大

なにはともあれ、まずは試してみましょう

KubernetesはDockerのオーケストレーションツールです。(厳密にはDocker以外のコンテナツールも対応)

と言っても「なんじゃそりゃ!」って感じでしょう。

この手の製品は実際に試してみたほうが感覚がわかると思います。また、Kubernetesより先にDockerを使ってみたほうが結果的に理解が深まります。

なので、まずは実際にDockerを触ってみましょう。

以前の記事「Kubernetesのラボ、初期構築」で既に環境を構築している方は、全てコピペで試すことができます。

Kubernetesのラボ、初期構築(前編)
あくまでも試みレベルですが、「Kubernetes勉強記事」の連載を始めてみようと思います。 はじめに ラボの構築について、以下...

ちなみに今回は「Node1」を使っていきます。前回の初期構築で既にDockerをインストール済です。

Docker1

nginxを入れてみる

Dockerを使用してnginxをインストールしてみます。

nginxとはオープンソースのウェブサーバーです。Apacheみたいなものです。

(YahooやGoogleみたいにウェブブラウザで画面を表示させるサーバー)

sshで「192.168.1.81」にログインします。

以下のコマンドを実行してください。コピペでも構いません。

結果はこんな感じになるはずです。

「unable」とか言われると不安になりますが、大丈夫です。

なんと、これだけでnginxが導入できました。

実際に確認してみます。192.168.1.0/24の端末のブラウザから「http://192.168.1.81:8880」を入力して、アクセスしてみます。

Docker2

上記の画面が表示されたら成功です。先程Dockerでインストールしたnginxが画面を出しています。

何が起こったか

では、何が起こっていたかを解説します。今回実行したコマンドは「docker run」だけなので、このコマンドを実行した結果を解説します。

図を交えて解説します。今回はNode1以外は関係ないので、Node1を拡大して解説します。

ちなみにアプリケーションのアイコンが灰色なのは意図的です。後ほど解説します。

Docker5

左に「Docker Hub」なるものが登場しましたが、今は無視してください。この後すぐに解説します。

ステップ1:イメージを取得する

実行した「docker run」コマンドをもう一度見てみます。

一番最後に「nginx」を入力してますね。これによって、まずはnginxのイメージを探します

「イメージ」という言葉が出てきました!

この「イメージ」は、Dockerを理解する上で非常に重要な要素です。

(Dockerの重要な構成要素は「イメージ」と「コンテナ」だけです。この2つを理解することがとても重要です)

イメージとは?

実行したいアプリケーションの「種」みたいなものだと思ってください。

  • この中にアプリケーションのバイナリ、設定ファイルなど全てが入っています
  • 仮想マシンのvmdkファイルみたいなモノです
  • もしくはOVF/OVAファイルみたいなモノです

つまり、イメージは、アプリケーションを実行する前のファイルみたいなモノです。

まずはローカル(Node1)の中にイメージがあるかを探しますが、当然ながらありません

なので、インターネットにアクセスして、nginxイメージがあるかを探しに行きます

探しに行く先が「Docker Hub」です。Docker HubのURLを入力する必要はありません。予めデフォルトで入っています。

そして、見つけたらローカルに保存します

この「イメージを見つけて持ってくる」作業のことを「Pull(引っ張ってくる)」と言います。gitを使ったことがある方だと理解しやすいかも。

Docker8

ローカル(Node1の中)に取得したイメージは以下のコマンドで確認できます。

Linuxを触ったことがある方だと「ls」のコマンドはご存知でしょう。dockerのimageをlsするって感じです。

ラボ環境のNode1で実行すると以下の結果になるはずです。

「nginx」のイメージがNode1に存在することがわかります。ちなみにそれ以外にも沢山ありますが、これはKubernetesの初期構築時に入ったものです。

ステップ2:イメージを起動する(コンテナ生成)

上記の「docker run -d -p 8880:80 nginx」を実行すると、自動的にイメージの起動も行われます

これを「コンテナを生成する」と言います。

この「コンテナ」が、イメージの次に重要なDocker用語。

コンテナとは?

イメージから生成する「アプリケーションの実態」の事です。

イメージは「種」にすぎないので、アプリケーションは実行されていません。

イメージからコンテナを作成することで、初めてコンテナの中でアプリケーションが実行され、サービスを使用することが出来る。

オブジェクト指向の「クラス(イメージ)」と「インスタンス(コンテナ)」みたいなモノです。あれも事前に定義したクラスをインスタンス化してメモリに配置(アロケート)しますよね。

図にするとこんな感じ。

Docker9

オブジェクト指向のインスタンスと違うのは、コンテナは停止しても残り続けることです。

重要です。コンテナは停止しても残り続けます。

その辺も交えてコンテナを確認してみましょう。

コンテナの確認コマンドは・・・想像できるかと。

イメージの確認は「docker image ls」だったので、コンテナは。

ですね!

わかりやすい!

・・・実際に実行してみます。

ちょっと長いので・・・先程作った「nginx」だけに注目してみましょう。

「IMAGE」が起動に利用したイメージ名です。「NAMES」は指定しなければ自動的に名前が付きます。それ以外については頃合いを見計らって説明します。

重要なのは「STATUS」です。Upと書いていたら、そのコンテナは可動しているということです。

可動していなければ「Exited」と表示されます。

ちなみに、コンテナの確認は「docker container ls」以外にも「docker ps」という確認でも確認できます。Linuxのpsコマンドでプロセス確認するのと似てますね。

でですね、「docker ps -a」もあります。このコマンドで「可動してないコンテナ」も確認することが可能。

これで「Exited」のコンテナも確認できます。

作ったモノの後処理

さて、Dockerの概要は以上で終了です。

終わる前に、この記事で作ったモノを消しておきましょう。

いつも思うのですが、この手の演習記事って「オブジェクトを作成したまま」で終わる事が多い。初心者は「作成→削除」まで知りたい事が多いのです。

今回の演習で作ったモノは・・・

  • イメージ
  • コンテナ

ですね。

一個一個消していきましょう。

まずはイメージから消してみましょう(失敗します)。

今回はnginx:1を消してみます(:1については後述)

怒られました。理由が書いてます。

つまり、コンテナを作ったイメージは(そのままだと)消せないということです。なので、コンテナから削除する必要があります。

nginxのコンテナを削除します。再度コンテナを確認します。

「CONTAINER ID」が011dde9c4b69のコンテナがnginxのコンテナです。「IMAGE」が568c4670fa80であり、この番号がnginx:1のイメージIDと一致するからです。

なので、011dde9c4b69を消します。

削除には以下のコマンドを使用します。

やってみました。

また怒られました!

・・・どうやらコンテナが起動してると削除できないようです。なので停止しますね。

コンテナの停止は以下のコマンドで行います。

やってみます。ついでに「docker ps -a」で止まったことを確認します。

STATUSが「Exited」になりました!

では、コンテナを削除します。

削除できました!

では、イメージを削除します。

削除した瞬間に、何行も「Deleted」が出るのでびっくりしたかもしれませんが、そんなものだと思ってください。(裏ではLayer化されてるからなのですが、そしてDockerの重要な特色なのですが、今は省略します)。

これで演習で使用したイメージとコンテナは全て削除できました!当然同じことを繰り返すことも可能です!

まとめ

今回の演習のまとめは、こんな感じ。

Docker10

概念的なもの

  • Dockerを使用してアプリケーションを動かすには「イメージ」と「コンテナ」を理解する
  • イメージ:アプリを起動する「種」。VMでのOVA/OVFみたいなモノ。オブジェクト指向のクラスみたいなモノ。
  • コンテナ:イメージから生成する「実際にアプリが動く器」。オブジェクト指向のインスタンスみたいなモノ。

コマンド

  • docker run:イメージを取得して、コンテナを作成するお手軽コマンド。
  • docker image ls:取得したイメージの一覧
  • docker container ls:作ったコンテナの一覧(起動していないコンテナは表示されない)
  • docker ps -a:作ったコンテナの一覧(起動していないコンテナも表示される)
  • docker stop コンテナID:コンテナの停止
  • docker container rm コンテナID:コンテナの削除
  • docker rmi イメージ名:イメージの削除
勉強を再会する方へ
スポンサーリンク
レクタングル大
  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">