CentOS 7でコンテナ型仮想化を利用する。Dockerのインストールと基本的な操作の紹介

2019/06/16 CentOS, Docker, Linux, サーバー構築

centos-docker-install-top
最近のサーバー構築全般に言えることですが、物理的なサーバーやネットワーク機器を構築することが少なくなってきました。理由としてはシステムの仮想化の技術が進んだことだと思います。システムの仮想化は少し前だとVMWareHyper-V、KVMぐらいしか選択肢が無かったんですが、仮想化技術の進化に伴いソフトウェアや実装の選択肢が増えてきています。

スポンサーリンク

そんな仮想化ですが、大きく分けると

  • ハイパーバイザ型仮想化・ソフトウェア型仮想化
  • コンテナ型仮想化

に分かれます。 ハイパーバイザー型はVMWare・Hyper-V・KVMなどホストOSを利用して仮想マシン上にゲストOSを動作させる 方式です。
ハイパーバイザー型仮想化

コンテナ型の仮想化は 仮想マシンとゲストOSが存在せず、OSの機能はホスト側を利用する形になります。コンテナはホストOS側で一つのプロセスとして稼働します。 その為、コンテナ型は仮想マシン毎で動作するゲストOSが必要無くなり、コンピューターリソースをより効率的に利用することができます。
コンテナ型仮想化 (Dockerの場合)
centos76_docker-image
コンテナ型仮想化の特徴を纏めると

  • 仮想マシンのタイプに比べてホストOSのリソースを利用しない
  • 展開するイメージがハイパーバイザー型仮想化と比較してサイズが小さく管理が容易
  • セットアップ済みのイメージが利用できるため、環境のデプロイが簡単
  • 環境の構成までスクリプトで管理できるため、操作ミスが少ない

となります。
コンテナ型はホストの OS部分を共有で利用することから環境の分離という意味では弱いため、OSレベルで別の環境が必要になる場合にはハイパーバイザー型などOSレイヤから分離されている仮想化の方式を選択 する形になります。
今回の記事ではコンテナ型仮想化で利用されている事が多いアプリケーションのDockerをCentOSにインストールする手順とDockerの基本的な操作を紹介していきます。
Dockerには無償版の「Community Edition」(CE)と有償版の「Docker Enterprise Edition」(EE)の2つのエディションが用意されています。手軽にDockerを試してみるにはCEが良いと思います。本記事でもCEを利用して構築を行います。

1.Docker CEを構築する環境

Docker CEはセットアップ済みのLinuxシステムに展開します。ディストリビューションはCentOSを選択しました。CentOSの基本的なセットアップ手順は別の記事
>「CentOS 7.6 インストール手順を紹介、Linuxのインストールは難しくありません。」
>「CentOS7の基本設定 Linuxのインストール後に設定する9つのポイント」
で紹介しています。まだLinuxが動作する環境がない場合には、本記事と合わせて参照下さい。
CentOSのバージョンは7.6(Build 1810) です。Docker CEをインストールするには、 CentOS7のメンテナンス版が必要です。アーカイブ版はサポートもテストもされていませんので成るべく最新のCentOSを利用して下さい。  尚、CentOSでは以下のコマンドでバージョンの確認ができます。

カーネルのバージョンはunameコマンドで確認できます。今回の環境はCentOS7.6の最新カーネルを利用しています。

Dockerを導入するシステムは、以下の環境を前提としています。
構成の詳細

  • サーバーのサブネットは192.168.241.0/24
  • サーバーのIPアドレス:192.168.241.215
  • 2019年6月時点でのアップデートまでを適用済み

それでは次章から具体的なDocker CEのセットアップ手順を紹介していきます。

2.ホスト名の設定

まずはLinuxシステム(OS)に対して任意のホスト名を設定します。ホスト名の設定には nmcliコマンドを以下のように実行します。ここではホスト名としてdocker7を設定します。

エラーが出力されなければ、コマンドは正常に完了しています。設定パラメータの確認はhostnameコマンドを利用します。オプション無しでコマンドを実行すると、設定値が表示されます。

設定値としてnmcliコマンドで設定したホスト名が表示されれば、ホスト名の設定確認は完了です。

3.Docker CEインストール前の準備と確認

本章ではDocker CEをインストールする前に必要な確認と事前の準備について紹介していきます。事前の準備として必要になる作業は

  • 古いdockerパッケージの確認と削除
  • docker-ceのインストールに必要なパッケージの追加

になります。

3-1.古いdockerパッケージの確認

古いバージョンのdockerパッケージはdocker若しくはdocker-engineという名前が付与されています。 新しいバージョンはパッケージ名としてdocker-ceが付いています。docker-ceパッケージをインストールする前に、古いバージョンのdockerパッケージについては削除が必要になります。  dockerがインストールされているかの確認と削除には、パッケージを削除する yum remove コマンドを実行します。

これらのパッケージがどれもインストールされていないと表示されれば問題ありませんので先へ進めます。

3-2.必要なパッケージの導入

Docker CEのインストールに必要となるパッケージを導入します。必要となるパッケージは

  • yum-utils.noarch : Utilities based around the yum package manager
  • device-mapper-persistent-data.x86_64 : Device-mapper Persistent Data Tools
  • lvm2.x86_64 : Userland logical volume management tools

の3パッケージです。
CentOSをインフラストラクチャでインストールした場合には、既にインストール済みのパッケージですが、確認の意味も含めて yum install コマンドを実行しておきます。

上記では必要となるパッケージが既にインストールされているため、インストールが実行されなかった場合の結果になります。ここではインストールされているという前提で先へ進めます。

3-3.Docker CE用レポジトリのインストール

Docker CEを インストールするために必要なパッケージは Docker CE Stable レポジトリに含まれています。 Docker CE Stableレポジトリを利用するためにdocker-ce.repoパッケージをインストールします。レポジトリをインストールして有効にするために yum-config-manager コマンドを利用します。以下のように実行することでレポジトリのインストールと有効化まで完了できます。

レポジトリのインストールと有効化が完了したことを確認します。yum repolist コマンドを実行します。

上記からDocker CE Stableレポジトリが有効になっていることが確認できました。これでDocker環境の構築に必要なパッケージをインストールする準備は完了です。

4.Dockerパッケージの確認

Dockerを構築するのに利用するパッケージは”docker-ce”という名前が付いています。Docker CE環境の構築に必要なパッケージをインストールする前に詳細を確認します。

4-1.docker-ce関連パッケージリストの確認

先ずは docker-ce と名前の付くパッケージを検索します。パッケージの検索はyum searchコマンドを利用します。以下のように実行します。

この中でDockerの構築にインストールが必要になるパッケージは

  • docker-ce.x86_64 : The open-source application container engine
  • docker-ce-cli.x86_64 : The open-source application container engine

の2つになります。また、ここには表示されていませんが別途、以下のパッケージが必要となります。

  • containerd.io.x86_64 : An industry-standard container runtime

※containerd.io.x86_64はパッケージ名に docker-ce が含まれないため yum search の結果には表示されませんが、docker-ceのインストールに必要となるパッケージです。
上記パッケージについて詳細を確認します。

4-2.docker-ce関連パッケージの詳細を確認

インストール前にパッケージの内容に間違いないか、念のために詳細を確認します。パッケージの確認は yum info コマンドで行います。以下のように実行します。

表示された説明から3つのパッケージがDocker環境の構築に必要であることが確認できました。

5.docker-ceパッケージのインストール

本章では項目4で確認したDocker関連パッケージをインストールする手順を記載していきます。

スポンサーリンク

5-1.docker-ceパッケージのインストール

CentOSではパッケージは yum install コマンドでインストールすることができます。 項目4-2.で必要なパッケージが確認できましたので、以下のようにパッケージ名を指定してコマンドを実行します。

上記では yum install コマンドに -y オプションを付けることでインストール時の確認応答を省いています。パッケージを複数インストールする場合はスペースを入れてパッケージ名を列記します。コマンドを実行すると、以下のようにインストールが開始されます。

表示された結果にエラーがなく”完了しました!”と表示されれば、パッケージは正常にインストールされています。

5-2.インストール後の確認

docker-ceパッケージがインストールされたことを確認します。インストールされているパッケージはyum listコマンドで確認できます。以下のように実行することで、パッケージがインストールされていることを確認します。

続いてdockerコマンドがインストールされた場所を確認します。コマンドが配置されている場所(パス)を確認するためにはwhichコマンドを利用します。以下のようにwhichを実行することでインストールパスを確認できます。

この結果からdockerコマンドが/bin以下にインストールされたことが確認できます。これでdockerパッケージのインストールと確認が完了しました。
※パッケージをインストールすることで dockerの管理グループであるdockerグループが作成されます。Dockerグループに追加したユーザーはdockerコマンドを実行できる権限が付与されます。 ここではDockerグループは利用しません。

6.dockerdの起動と自動起動設定

本章ではインストールしたdockerのサービスであるdockerdが起動することを確認します。CentOSでは7系からsystemctlコマンドでサービスの起動、停止を行います。

6-1.dockerdの起動

dockerdは systemctl start コマンドを以下のように実行することで起動できます。

コマンドを実行してエラーが出力されなければ、dockerdは起動しています。念のためにサービスの状態を確認します。systemctl status コマンドにサービス名を付けて実行することで、起動したサービスの状態について、詳細な情報を取得することができます。
以下が実行例です。

上記では分かり難いかもしれませんが、黒丸(●)の部分が正常な起動状態の場合、緑色で表示されます。 Active項目に(running)と表示されてることでも、サービスが起動していることが確認できます。  稼働中のプロセスを表示するpsコマンドでもdockerdが起動していることを確認できます。
以下のように実行します。

稼働しているプロセスとしてdockerdが表示されました。
これでdockerdの起動は完了です。

6-2.dockerd自動起動の設定

dockerdの起動が確認できましたので サーバーの再起動や停止の復旧時にdockerdが自動的に起動するように設定します。 サービスの自動起動を設定するにはsystemctl enableコマンドを利用します。以下のように systemctl enable コマンドを実行します。

エラーが出力されなければ、自動起動は設定が完了しています。
続いて自動起動が設定されたことを確認します。systemctl is-enabled コマンドから確認できます。以下のように実行します。

実行結果として “enabled”と表示されれば自動起動の設定は完了です。

7.dockerの動作確認

本章ではdockerの基本的な操作方法を、動作確認用のイメージを利用して紹介していきます。もう少し踏み込んだ利用方法は別の記事で紹介していきますので、先ずは基本的な操作を覚えてコンテナ型仮想化のイメージを掴んで頂ければと思います。

7-1.docker環境の情報を表示

Dockerの基本的な情報は docker info コマンドで行います。オプションを付与せずにコマンドを実行するとdockerが動作している環境と設定が表示されます。以下のように実行します。

出力される情報がかなり多いため、割愛して記載しています。上記のような形で情報が表示されます。

7-2.Imageの用意

dockerでは 仮想化の単位であるコンテナを作成するためにコンテナの元となるImageを用意する必要があります。 Imageを用意する方法は以下の3つになります。

  • クラウド上のにあるDocker Hubのイメージ・レポジトリからダウンロード
  • 自身でImageを作成する (作成したコンテナから作成する)
  • 自身でImageを作成する (Dockerfileを利用)

自身でのImage作成方法は別の記事で紹介します。本記事ではDocker HubからImageをダウンロード(以下、pull)してコンテナを起動します。
centos76-_docker-pull
先ずはImageのpullを行います。
Docker Hub Popular Imageの検索
docker imagesコマンドでローカルに用意されているImageを表示できます。インストール直後の状態でローカルにpullされているImageを確認してみます。

まだ何も準備をしていない状態ですので、Imageは表示されません。
dockerの動作確認用としてhello-world Imageが用意されています。このイメージをpullしてみます。ダウンロードには docker pull コマンドを利用します。

StatusにDownloadedと表示されればImageのダウンロードが出来ています。再度 docker images コマンドでローカルのImageを確認してみます。

先程とは異なり「hello-world」というImageが追加されています。

7-2-1.Imageの検索

Docker Hubに公開されている Imageを探すには docker search コマンドを利用します。例えばhello-worldという名前の付いたImageを探す場合は以下のように実行します。 

上記のように検索条件に合致したImage名が表示されます(一部、表示内容を割愛しています)ので、任意のものを指定してpullできます。

7-3.コンテナの作成と実行

コンテナ(アプリケーションの実行環境)を稼働させるためのImageが用意できましたので、このImageを元にコンテナを実行してみます。hello-worldは実行することでウェルカムメッセージを表示させるImageになっています。
Imageを元にコンテナを実行するには docker run コマンドを利用します。 (runコマンドはコンテナの作成を自動的に行って起動します。コンテナを起動せずに作成だけを行う場合には docker createコマンドを利用します。)  以下のように実行します。

上記のように hello-world が実行されました。
起動したコンテナの状況を確認するには docker ps コマンドを実行します。

上記のように作成されたコンテナのプロセスと状況が表示されます。コンテナの操作には上記の「CONTAINER ID」かコンテナ名である「NAMES」を指定します。指定しない場合には自動的に割り当てられます。
「NAMES」は docker run の際に指定できます。 わかりやすいコンテナ名を付けると複数のコンテナを稼働させている時に操作ミスなどを防ぐことができます。  コンテナに名前を付ける場合には docker run コマンドにオプション –name を付与して実行します。コンテナに「hello-world」というコンテナ名を付ける場合には以下のようにコマンドを実行します。

実行後にコンテナを確認してみます。

上記のようにNAMESに指定したコンテナ名が表示されたことが確認できました。これでコンテナの作成と起動は完了です。

7-4.コンテナの詳細を表示

作成したコンテナの詳細を確認するためには docker inspect コマンドを利用します。docker inspet にコンテナ名かコンテナIDを付与して実行することで コンテナの詳細が確認できます。コンテナ名を指定して以下のように実行してみます。

jsonで表示されますので、ややわかりにくいですが、ここから必要となる項目だけをピックアップすることもできます。

7-5.コンテナ削除

作成したコンテナの削除は docker rm コマンドで行います。 docker rm コマンドにコンテナ名かコンテナIDを付与することで削除が実行されます。  項目7-3で作成したコンテナを削除してみます。

コンテナ名が表示されれば削除は完了しています。削除後のコンテナ状況を docker ps コマンドで確認してみます。以下のようにコンテナが表示されないことから削除されたことが確認できます。

これでコンテナの削除は完了です。

7-6.Imageの削除

コンテナは削除されてもローカルにpullしたコンテナの元であるImageは削除されません。コンテナ削除の実行後に docker images コマンドでImageを表示させます。

上記のように hello-world Imageは削除されずに表示されています。
pullしたImageを削除するには docker rmi コマンドを利用します。docker rmi コマンドにレポジトリ名かイメージIDを指定して実行します。ここではレポジトリ名を指定して実行しました。

DeletedというメッセージとイメージIDが表示されればイメージは削除されています。削除の実行後に docker images コマンドでImageの状況を確認してみます。

上記のようにImageが表示されません。これでImageが削除されたことが確認できました。

8.まとめ

本記事ではコンテナ型仮想化のDocker CEについて導入手順と基本的な操作を紹介しました。コンテナ型の仮想化はまだまだ機能が豊富に用意されています。
今後の記事ではImageをデプロイする方法や、環境の構築についてコードを利用する方法などを紹介していきますので、まずは環境を作成してDockerの基本的な操作に慣れていただければ幸いです。
MacOSやWindowsでも動作するパッケージもありますので、Linux環境が無い場合でも手軽に利用できます。

関連する記事(広告を含みます)


Facebookでのご購読が便利です。

Twitter・Feedlyでもご購読できます。

Twitterでフォローする Feedlyでフォローする

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  • スポンサーリンク