Linux CentOS 7にDocker CEをインストールしてコンテナ型仮想化を使ってみる

centos-docker-install-top

Photo by Albin Berlin from Pexels

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

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

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

ハイパーバイザー型仮想化の構成

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

centos76_docker-image

Dockerを利用したコンテナ型仮想化の構成

コンテナ型仮想化の特徴を纏めると、以下のようになります。

コンテナ型仮想化の特徴

  • 仮想マシンのタイプに比べてホスト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の基本的なセットアップ手順は別の記事

Linux
centos76-install-top3
CentOS 7.6をインストール Linuxのインストールは難しくありません

こんにちは、ITエンジニアの小村(@system_kom)です。 Windowsをインストールした経験のある人は多いと思いますが、Linuxをインストール経験がある人は少ないのではないでしょうか。 Linuxのインストールはサーバー構築の基 ...

Linux
CentOS 7のインストール後におこなうLinuxの基本設定 13ポイント

CentOS 7(バージョン7.0~7.6)のインストール完了後に、設定する最低限のポイントを13点纏めてみました。(2019年6月に追加)本記事で紹介した手順は一例で、これ以外にもサーバーを構築するためには複数の手順が必要になります。まず ...

で紹介しています。まだLinuxが動作する環境がない場合には、本記事と合わせて参照下さい。
CentOSのバージョンは7.6(Build 1810) です。Docker CEをインストールするには、CentOS7のメンテナンス版が必要です。アーカイブ版はサポートもテストもされていませんので成るべく最新のCentOSを利用して下さい。
尚、CentOSでは以下のコマンドでバージョンの確認ができます。

 command
$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

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

 command
$ uname -a
Linux docker7 3.10.0-957.12.2.el7.x86_64 #1 SMP Tue May 14 21:24:32 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

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

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

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

2. ホスト名の設定

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

 command
# nmcli general hostname docker7

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

 command
$ hostname
docker7

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

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

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

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

になります。

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

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

 command
# yum remove docker docker-client docker-client-latest docker-common \
docker-latest docker-latest-logrotate docker-logrotate docker-engine

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

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"コマンドを実行しておきます。

 command
# yum install -y yum-utils device-mapper-persistent-data lvm2
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
パッケージ yum-utils-1.1.31-50.el7.noarch はインストール済みか最新バージョンです
パッケージ device-mapper-persistent-data-0.7.3-3.el7.x86_64 はインストール済みか最新バージョンです
パッケージ 7:lvm2-2.02.180-10.el7_6.7.x86_64 はインストール済みか最新バージョンです
何もしません

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

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

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

 command
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
読み込んだプラグイン:fastestmirror, langpacks
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo

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

 command
$ yum repolist
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
docker-ce-stable | 3.5 kB 00:00:00
(1/2): docker-ce-stable/x86_64/updateinfo | 55 B 00:00:00
(2/2): docker-ce-stable/x86_64/primary_db | 28 kB 00:00:00
リポジトリー ID リポジトリー名 状態
base/7/x86_64 CentOS-7 - Base 10,019
docker-ce-stable/x86_64 Docker CE Stable - x86_64 43
extras/7/x86_64 CentOS-7 - Extras 409
updates/7/x86_64 CentOS-7 - Updates 1,982
repolist: 12,453

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

4. Dockerパッケージの確認

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

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

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

 command
$ yum search docker-ce
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
=============== N/S matched: docker-ce ==================
docker-ce.x86_64 : The open-source application container engine
docker-ce-cli.x86_64 : The open-source application container engine
docker-ce-selinux.noarch : SELinux Policies for the open-source application container engine
Name and summary matches only, use "search all" for everything.

この中で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 コマンドで行います。以下のように実行します。

 command
$ yum info docker-ce docker-ce-cli containerd.io
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
利用可能なパッケージ
名前 : containerd.io
アーキテクチャー : x86_64
バージョン : 1.2.5
リリース : 3.1.el7
容量 : 22 M
リポジトリー : docker-ce-stable/x86_64
要約 : An industry-standard container runtime
URL : https://containerd.io
ライセンス : ASL 2.0
説明 : containerd is an industry-standard container runtime with an emphasis on
: simplicity, robustness and portability. It is available as a daemon for Linux
: and Windows, which can manage the complete container lifecycle of its host
: system: image transfer and storage, container execution and supervision,
: low-level storage and network attachments, etc.
名前 : docker-ce
アーキテクチャー : x86_64
エポック : 3
バージョン : 18.09.6
リリース : 3.el7
容量 : 19 M
リポジトリー : docker-ce-stable/x86_64
要約 : The open-source application container engine
URL : https://www.docker.com
ライセンス : ASL 2.0
説明 : Docker is is a product for you to build, ship and run any application as a
: lightweight container.
:
: Docker containers are both hardware-agnostic and platform-agnostic. This means
: they can run anywhere, from your laptop to the largest cloud compute instance and
: everything in between - and they don't require you to use a particular
: language, framework or packaging system. That makes them great building blocks
: for deploying and scaling web apps, databases, and backend services without
: depending on a particular stack or provider.
名前 : docker-ce-cli
アーキテクチャー : x86_64
エポック : 1
バージョン : 18.09.6
リリース : 3.el7
容量 : 14 M
リポジトリー : docker-ce-stable/x86_64
要約 : The open-source application container engine
URL : https://www.docker.com
ライセンス : ASL 2.0
説明 : Docker is is a product for you to build, ship and run any application as a
: lightweight container.
:
: Docker containers are both hardware-agnostic and platform-agnostic. This means
: they can run anywhere, from your laptop to the largest cloud compute instance and
: everything in between - and they don't require you to use a particular
: language, framework or packaging system. That makes them great building blocks
: for deploying and scaling web apps, databases, and backend services without
: depending on a particular stack or provider.

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

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

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

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

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

 command
# yum -y install docker-ce docker-ce-cli containerd.io

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

 command
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
【略】
インストール中:
containerd.io x86_64 1.2.5-3.1.el7 docker-ce-stable 22 M
docker-ce x86_64 3:18.09.6-3.el7 docker-ce-stable 19 M
docker-ce-cli x86_64 1:18.09.6-3.el7 docker-ce-stable 14 M
依存性関連でのインストールをします:
audit-libs-python x86_64 2.8.4-4.el7 base 76 k
checkpolicy x86_64 2.5-8.el7 base 295 k
container-selinux noarch 2:2.95-2.el7_6 extras 39 k
libcgroup x86_64 0.41-20.el7 base 66 k
libsemanage-python x86_64 2.5-14.el7 base 113 k
policycoreutils-python x86_64 2.5-29.el7_6.1 updates 456 k
python-IPy noarch 0.75-6.el7 base 32 k
setools-libs x86_64 3.3.8-4.el7 base 620 k
トランザクションの要約
インストール 3 パッケージ (+8 個の依存関係のパッケージ)
総ダウンロード容量: 57 M
インストール容量: 241 M
Downloading packages:
Userid : "Docker Release (CE rpm) <docker@docker.com>"
Fingerprint: 060a 61c5 1b55 8a7f 742b 77aa c52f eb6b 621e 9f35
From : https://download.docker.com/linux/centos/gpg
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : libcgroup-0.41-20.el7.x86_64 1/11
インストール中 : setools-libs-3.3.8-4.el7.x86_64 2/11
インストール中 : audit-libs-python-2.8.4-4.el7.x86_64 3/11
インストール中 : checkpolicy-2.5-8.el7.x86_64 4/11
インストール中 : python-IPy-0.75-6.el7.noarch 5/11
インストール中 : 1:docker-ce-cli-18.09.6-3.el7.x86_64 6/11
インストール中 : libsemanage-python-2.5-14.el7.x86_64 7/11
インストール中 : policycoreutils-python-2.5-29.el7_6.1.x86_64 8/11
インストール中 : 2:container-selinux-2.95-2.el7_6.noarch 9/11
インストール中 : containerd.io-1.2.5-3.1.el7.x86_64 10/11
インストール中 : 3:docker-ce-18.09.6-3.el7.x86_64 11/11
インストール:
containerd.io.x86_64 0:1.2.5-3.1.el7 docker-ce.x86_64 3:18.09.6-3.el7
docker-ce-cli.x86_64 1:18.09.6-3.el7
依存性関連をインストールしました:
audit-libs-python.x86_64 0:2.8.4-4.el7 checkpolicy.x86_64 0:2.5-8.el7
container-selinux.noarch 2:2.95-2.el7_6 libcgroup.x86_64 0:0.41-20.el7
libsemanage-python.x86_64 0:2.5-14.el7 policycoreutils-python.x86_64 0:2.5-29.el7_6.1
python-IPy.noarch 0:0.75-6.el7 setools-libs.x86_64 0:3.3.8-4.el7
完了しました!

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

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

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

 command
$ yum list installed | grep docker-ce
containerd.io.x86_64 1.2.5-3.1.el7 @docker-ce-stable
docker-ce.x86_64 3:18.09.6-3.el7 @docker-ce-stable
docker-ce-cli.x86_64 1:18.09.6-3.el7 @docker-ce-stable

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

 command
$ which docker
/bin/docker

この結果から"docker"コマンドが"/bin"以下にインストールされたことが確認できます。これでdockerパッケージのインストールと確認が完了しました。

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

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

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

6-1. dockerdの起動

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

 command
# systemctl start docker

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

 command
$ systemctl status docker
 docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since 土 2019-06-08 15:41:11 JST; 5s ago
Docs: https://docs.docker.com
Main PID: 7636 (dockerd)
Tasks: 8
Memory: 30.8M
CGroup: /system.slice/docker.service
mq7636 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
【略】

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

 command
$ ps -aux | grep dockerd
root 7197 Ssl /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

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

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

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

 command
# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

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

 command
# systemctl is-enabled docker
enabled

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

7. dockerの動作確認

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

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

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

 command
# docker info
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
Server Version: 18.09.6
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
runc version: 2b18fe1d885ee5083ef9f0838fee39b62d653e30
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-957.12.2.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 972.6MiB
Name: docker7
ID: 4L76:LTN4:AATG:ASUH:HJMC:CRD3:JINR:4UCJ:VF74:KELS:6O6C:2UPS
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine

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

7-2. Imageの用意

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

DockerでImageを用意する方法

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

自身でのImage作成方法は別の記事で紹介します。本記事ではイメージレポジトリの「Docker Hub」からImageをダウンロード(以下、pull)してコンテナを起動します。

centos76-_docker-pull

先ずはImageのpullを行います。

"docker images"コマンドでローカルに用意されているImageを表示できます。インストール直後の状態でローカルにpullされているImageを確認してみます。

 command
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE

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

 command
# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:0e11c388b664df8a27a901dce21eb89f11d8292f7fca1b3e3c4321bf7897bffe
Status: Downloaded newer image for hello-world:latest

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

 command
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 5 months ago 1.84kB

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

7-2-1. Imageの検索

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

 command
# docker search hello-world
NAME DESCRIPTION STARS OFFICIAL
hello-world Hello World! (an … 942 [OK]
kitematic/hello-world-nginx A light-weight ng… 126
tutum/hello-world Image to test doc… 60
dockercloud/hello-world Hello World! 15
crccheck/hello-world Hello World web s 7
ppc64le/hello-world Hello World! (an … 2
souravpatnaik/hello-world-go hello-world in Go 1
carinamarina/hello-world-app This is a sample … 1
joshuaconner/hello-world-docker-bottle 1
markmnei/hello-world-java-docker Hello-World-Java- 1
ansibleplaybookbundle/hello-world Simple containeri… 0
kevindockercompany/hello-world 0
ansibleplaybookbundle/hello-world-apb An APB which depl… 0
koudaiii/hello-world 0
uniplaces/hello-world 0
burdz/hello-world-k8s To provide a simp… 0
nirmata/hello-world 0
infrastructureascode/hello-world A tiny "Hello Wor… 0
stumacsolutions/hello-world-container 0
mbrainar/hello-world Python-based hell 0
sharor/hello-world 0
s390x/hello-world Hello World! (an … 0
kousik93/hello-world 0
ebenjaminv9/hello-world Hello-world 0
ansibleplaybookbundle/hello-world-db-apb An APB which depl… 0

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

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

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

 command
# docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/

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

 command
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8982621092a4 hello-world "/hello" About a m Exited (0) tender_antonelli

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

 command
# docker run --name hello-world hello-world

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

 command
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c778274c0267 hello-world "/hello" 6 seconds ago Exited (0) hello-world

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

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

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

 command
# docker inspect tender_antonelli
[
{
"Id": "8982621092a49bb6987ff1639d39176477b6e74bb4dae6cc4217b3f746d6b61a",
"Created": "2019-06-10T02:21:37.059226013Z",
"Path": "/hello",
"Args": [],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 0,
"Error": "",
"StartedAt": "2019-06-10T02:21:37.589602025Z",
"FinishedAt": "2019-06-10T02:21:37.543893641Z"
【中略】
},
"Image": "sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e",
]

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

7-5. コンテナ削除

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

 command
# docker rm tender_antonelli
tender_antonelli

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

 command
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

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

7-6. Imageの削除

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

 command
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 5 months ago 1.84kB

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

 command
# docker rmi hello-world
Untagged: hello-world:latest
Untagged: hello-world@sha256:0e11c388b664df8a27a901dce21eb89f11d8292f7fca1b3e3c4321bf7897bffe
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3

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

 command
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE

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

8. まとめ

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

  • この記事を書いた人
rem-profile-photo

レムシステム

レムシステムはPC・サーバー・ネットワークでの業務効率化を主な業務としている会社です。全国に対応しています。

-CentOS, Docker