DockerコンテナをCentOS7.5にインストール

DockerコンテナをCentOS7.5にインストール

こんにちは!やましー@データ活用クラウドエンジニア(@yamashi18041)です!

IT業界にいれば一度は耳にしたことがあるDockerなどのコンテナ技術についての記事になります。

実は恥ずかしながら、私はコンテナやDockerという名前は聞いたことがあったのですが実際、触ったことがなかったのでどんなものなのかあまりよくわかっていませんでした。

しかし、コンテナ技術は今後ますます重要なキーテクノロジーになっていくのは間違いないので今のうちから慣れておこうと思います。

今回は、簡単なコンテナ仮想化技術の説明と実際にDockerコンテナをインストールして動かしてみたいと思います。

インストール方法は本家のサイトを参考にしました。

せっかくなので使ったコマンドの簡単な説明を付けくわえながら記事に残しておこうと思います。

感想としてはインストールからコンテナ起動までは拍子抜けしてしまうくらい簡単でした。

それでは簡単にDockerコンテナについて少し紹介して、インストールしていきます。

コンテナとは?

ITにおけるコンテナとは一言でいうと

アプリケーションの実行環境をひとまとめにした区画

です。

コンテナを使って1つのコンピュータをみんなで共有して、分割して効率的に使いましょう!という技術ですね。

もう少しだけ詳しく説明します。

コンテナといえば箱のような入れ物をイメージすると思います。

ではそのコンテナの中に何が入っているのでしょうか?

答えはプログラムの実行環境が入っています。

プログラムの実行環境とは、あるプログラ(アプリケーショ)を動かすために必要なモノたちのことです。

例えば、データベース管理システム(DBMS)やWEBサーバーなどのミドルウェアや、PHPやRubyなどを動かすための各言語の処理系、ランタイムライブラリなどです。

そういった実行環境をひとまとめにしたものをコンテナといいます。

実行環境は通常コンテナに入れなくてもコンピュータ上に直接インストールして用意することができます。

しかし、そうしてしまうと1台のコンピュータに1つの実行環境しか用意することができなくなってしまいます。

例えば、アプリAで使う言語はVersion2系、アプリBではVersion3系の言語を使わなければならない場合、1つの実行環境では実現することが非常に難しくなってしまいます。

そういった場合にコンテナを1台のコンピュータの中に複数動かすことで、違うバージョンの実行環境を用意することができます。

コンテナ同士互いにその存在に干渉されない、お互い別の世界の環境を実現することができます。

仮想マシンとの違い

一台のコンピュータを共用利用する方法でよく似た技術に仮想マシンがあります。

違いはどの階層を共有して使うかという点です。仮想マシンの場合は実ハードウェア共有するのに対して、コンテナの場合は実ハードウェアやOSを共有します。

そのため、コンテナは仮想マシンに比べ動作が軽く、起動停止も早いという特徴があります。

Dockerとは?

コンテナと言えばDockerと言われるほど有名ですね。

Docker(ドッカー)とはコンテナ技術を扱うためのオープンソースソフトウェアです。

これにより一つのコンピュータの中に複数のコンテナを作り独立したアプリケーションの実行環境を簡単に構築し、制御することができます。

Dockerプラットフォーム

Dockerはアプリケーションというよりも、もはやプラットフォーム(基盤)として存在しています。

そのプラットフォーム上の登場人物(コンポーネント)を整理してみます。

  • Dockerエンジン(プラットフォームの中心人物)
    • Docker サーバー(dockerd デーモン・プロセス)
    • Docker REST API(サーバーとクライアント間のインタフェース)
    • Dockerクライアント(docker コマンド(Docker CLI))
  • Docker オブジェクト(Dockerエンジンを取り巻く者たち)
    • Dockerイメージ(Dockerコンテナの生みの親)
    • Dockerコンテナ(Dockerイメージから生成されるインスタンス)
    • ネットワーク(コンテナと外の世界との通信を支える)
    • データ・ボリューム(コンテナ内アプリがデータを書き込む場所)
    • その他
  • Dockerレジストリ(Dockerイメージを置く場所)
    • パブリックなDockerレジストリ
      • Docker Hub(みんなが使える公式なリポジトリ)
    • プライベートなDockerレジストリ

Dockerの重要そうな用語

  • Dockerfile(Dockerイメージを作るための手順書、コード)
  • マウント(永続的にデータを書き込めるようにする手段)
    • バインドマウント(bind)(ホストと共有できる方法)
    • ボリュームマウント(Volume)(コンテナ間で共有できる方法)
    • 一時ファイルシステムのマウント(tmpfs)(そのうち消すデータ置き場)
  • namespace(コンテナ同士干渉しないよう区画として扱うためのLinuxカーネルの仕組み)

その他よく聞く用語

  • Kubernetes(k8s、クバネティス、またはクーベネティス)
    複数のDockerのコンテナを管理したりするためのオーケストレーションツールです。k8sはKubernetesの最初のk、真ん中の8文字、最後のsからとった略称です。

yumを使ってDockerエンジンをインストールする

https://docs.docker.com/engine/install/centos/

本家のサイトを参考にインストールを実施してみましたが、あっという間にできました。

インストール~コンテナ起動確認まで実行したコマンドはこちら

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

sudo yum install docker-ce docker-ce-cli containerd.io

sudo systemctl start docker

sudo docker run hello-world

sudo docker run -it ubuntu bash

インストールした環境

インストールした環境はAzureの仮想マシン(CentOS7.5)上にインストールしました。

[user01@vmcentos7 ~]$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[user01@vmcentos7 ~]$ uname -a
Linux vmcentos7 3.10.0-862.11.6.el7.x86_64 #1 SMP Tue Aug 14 21:49:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
[user01@vmcentos7 ~]$

yum-utilsをインストールする

まずはyum-utilsをインストールします。

これはDockerをyumでインストールするためのリポジトリをyum-config-manager コマンドで指定するために先にインストールしておきます。

sudo yum install -y yum-utils
[user01@vmcentos7 ~]$ sudo yum install -y yum-utils
[sudo] user01 のパスワード:
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * epel: nrt.edge.kernel.org
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ yum-utils.noarch 0:1.1.31-46.el7_5 を 更新
---> パッケージ yum-utils.noarch 0:1.1.31-54.el7_8 を アップデート
--> 依存性解決を終了しました。

依存性を解決しました

=============================================================================================================================================================================================
 Package                                      アーキテクチャー                          バージョン                                          リポジトリー                                容量
=============================================================================================================================================================================================
更新します:
 yum-utils                                    noarch                                    1.1.31-54.el7_8                                     updates                                    122 k

トランザクションの要約
=============================================================================================================================================================================================
更新  1 パッケージ

総ダウンロード容量: 122 k
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
yum-utils-1.1.31-54.el7_8.noarch.rpm                                                                                                                                  | 122 kB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  更新します              : yum-utils-1.1.31-54.el7_8.noarch                                                                                                                             1/2
  整理中                  : yum-utils-1.1.31-46.el7_5.noarch                                                                                                                             2/2
  検証中                  : yum-utils-1.1.31-54.el7_8.noarch                                                                                                                             1/2
  検証中                  : yum-utils-1.1.31-46.el7_5.noarch                                                                                                                             2/2

更新:
  yum-utils.noarch 0:1.1.31-54.el7_8

完了しました!

Dockerリポジトリをyumに登録する

次にyumリポジトリにDockerエンジンが格納されたレポジトリの場所を追加します。

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
[user01@vmcentos7 ~]$ sudo 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

古いバージョンのDockerをアンインストールする

古いバージョンのDockerがインストールされていた場合は先にアンインストールしておきます。

Dockerの古いバージョンについて少し説明しておきます。

Dockerが初めて登場したのは2013年で、このころは普通にDockerとしてインストールされていました。

その後2017年にDockerは無償版のdocker-ce(コミュニティエディション)と有償版のdocker-ee(エンタープライズエディション)2つのソリューションに分かれて提供が始まりました。

古いバージョンとは2017以前のバージョンのものを指します。

それをアンインストールします。

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

Dockerエンジンをインストールする

Dockerエンジンをインストールしていきます。

インストールするプログラムは3つ

  • docker-ce
    docker本体となる部分です。「-ce」とついているので無償版のコミュニティエディションエディションです。有償版のエンタープライズエディションはdocker-ee。
  • docker-ce-cli
    Dockerを操作するためのコマンドラインユーザインタフェースです。
  • containerd.io
    コンテナのランタイム。コンテナイメージの転送や、コンテナの実行と監視、低レベルのローカルストレージとネットワークインターフェースなど。
sudo yum install docker-ce docker-ce-cli containerd.io

途中でGPGキーを受け入れるように求められたら、Fingerprintの値が「060a 61c5 1b55 8a7f 742b 77aa c52f eb6b 621e 9f35」であったならyで先に進みます。最新のキーは本家のサイトを確認してください。

GPGキーとは正規の配布されたソフトウェアをインストールしているかどうかをチェックするためのキーです。

[user01@vmcentos7 ~]$ sudo yum install docker-ce docker-ce-cli containerd.io
読み込んだプラグイン:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * epel: nrt.edge.kernel.org
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                                                                                                                             |  41 kB  00:00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ containerd.io.x86_64 0:1.2.13-3.2.el7 を インストール
--> 依存性の処理をしています: container-selinux >= 2:2.74 のパッケージ: containerd.io-1.2.13-3.2.el7.x86_64
---> パッケージ docker-ce.x86_64 3:19.03.8-3.el7 を インストール
--> 依存性の処理をしています: libcgroup のパッケージ: 3:docker-ce-19.03.8-3.el7.x86_64
---> パッケージ docker-ce-cli.x86_64 1:19.03.8-3.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ container-selinux.noarch 2:2.119.1-1.c57a6f9.el7 を インストール
--> 依存性の処理をしています: selinux-policy-targeted >= 3.13.1-216.el7 のパッケージ: 2:container-selinux-2.119.1-1.c57a6f9.el7.noarch
--> 依存性の処理をしています: selinux-policy-base >= 3.13.1-216.el7 のパッケージ: 2:container-selinux-2.119.1-1.c57a6f9.el7.noarch
--> 依存性の処理をしています: selinux-policy >= 3.13.1-216.el7 のパッケージ: 2:container-selinux-2.119.1-1.c57a6f9.el7.noarch
--> 依存性の処理をしています: policycoreutils-python のパッケージ: 2:container-selinux-2.119.1-1.c57a6f9.el7.noarch
---> パッケージ libcgroup.x86_64 0:0.41-21.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ policycoreutils-python.x86_64 0:2.5-34.el7 を インストール
--> 依存性の処理をしています: policycoreutils = 2.5-34.el7 のパッケージ: policycoreutils-python-2.5-34.el7.x86_64
--> 依存性の処理をしています: setools-libs >= 3.3.8-4 のパッケージ: policycoreutils-python-2.5-34.el7.x86_64
--> 依存性の処理をしています: libsemanage-python >= 2.5-14 のパッケージ: policycoreutils-python-2.5-34.el7.x86_64
--> 依存性の処理をしています: audit-libs-python >= 2.1.3-4 のパッケージ: policycoreutils-python-2.5-34.el7.x86_64
--> 依存性の処理をしています: python-IPy のパッケージ: policycoreutils-python-2.5-34.el7.x86_64
--> 依存性の処理をしています: libqpol.so.1(VERS_1.4)(64bit) のパッケージ: policycoreutils-python-2.5-34.el7.x86_64
--> 依存性の処理をしています: libqpol.so.1(VERS_1.2)(64bit) のパッケージ: policycoreutils-python-2.5-34.el7.x86_64
--> 依存性の処理をしています: libapol.so.4(VERS_4.0)(64bit) のパッケージ: policycoreutils-python-2.5-34.el7.x86_64
--> 依存性の処理をしています: checkpolicy のパッケージ: policycoreutils-python-2.5-34.el7.x86_64
--> 依存性の処理をしています: libqpol.so.1()(64bit) のパッケージ: policycoreutils-python-2.5-34.el7.x86_64
--> 依存性の処理をしています: libapol.so.4()(64bit) のパッケージ: policycoreutils-python-2.5-34.el7.x86_64
---> パッケージ selinux-policy.noarch 0:3.13.1-192.el7_5.4 を 更新
---> パッケージ selinux-policy.noarch 0:3.13.1-266.el7 を アップデート
--> 依存性の処理をしています: libsemanage >= 2.5-13 のパッケージ: selinux-policy-3.13.1-266.el7.noarch
---> パッケージ selinux-policy-targeted.noarch 0:3.13.1-192.el7_5.4 を 更新
---> パッケージ selinux-policy-targeted.noarch 0:3.13.1-266.el7 を アップデート
--> トランザクションの確認を実行しています。
---> パッケージ audit-libs-python.x86_64 0:2.8.5-4.el7 を インストール
--> 依存性の処理をしています: audit-libs(x86-64) = 2.8.5-4.el7 のパッケージ: audit-libs-python-2.8.5-4.el7.x86_64
---> パッケージ checkpolicy.x86_64 0:2.5-8.el7 を インストール
---> パッケージ libsemanage.x86_64 0:2.5-11.el7 を 更新
---> パッケージ libsemanage.x86_64 0:2.5-14.el7 を アップデート
--> 依存性の処理をしています: libsepol >= 2.5-10 のパッケージ: libsemanage-2.5-14.el7.x86_64
--> 依存性の処理をしています: libselinux >= 2.5-14 のパッケージ: libsemanage-2.5-14.el7.x86_64
---> パッケージ libsemanage-python.x86_64 0:2.5-14.el7 を インストール
---> パッケージ policycoreutils.x86_64 0:2.5-22.el7 を 更新
---> パッケージ policycoreutils.x86_64 0:2.5-34.el7 を アップデート
--> 依存性の処理をしています: libselinux-utils >= 2.5-14 のパッケージ: policycoreutils-2.5-34.el7.x86_64
---> パッケージ python-IPy.noarch 0:0.75-6.el7 を インストール
---> パッケージ setools-libs.x86_64 0:3.3.8-4.el7 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ audit-libs.x86_64 0:2.8.1-3.el7 を 更新
--> 依存性の処理をしています: audit-libs(x86-64) = 2.8.1-3.el7 のパッケージ: audit-2.8.1-3.el7.x86_64
---> パッケージ audit-libs.x86_64 0:2.8.5-4.el7 を アップデート
---> パッケージ libselinux.x86_64 0:2.5-12.el7 を 更新
--> 依存性の処理をしています: libselinux(x86-64) = 2.5-12.el7 のパッケージ: libselinux-python-2.5-12.el7.x86_64
---> パッケージ libselinux.x86_64 0:2.5-15.el7 を アップデート
---> パッケージ libselinux-utils.x86_64 0:2.5-12.el7 を 更新
---> パッケージ libselinux-utils.x86_64 0:2.5-15.el7 を アップデート
---> パッケージ libsepol.x86_64 0:2.5-8.1.el7 を 更新
---> パッケージ libsepol.x86_64 0:2.5-10.el7 を アップデート
--> トランザクションの確認を実行しています。
---> パッケージ audit.x86_64 0:2.8.1-3.el7 を 更新
---> パッケージ audit.x86_64 0:2.8.5-4.el7 を アップデート
---> パッケージ libselinux-python.x86_64 0:2.5-12.el7 を 更新
---> パッケージ libselinux-python.x86_64 0:2.5-15.el7 を アップデート
--> 依存性解決を終了しました。

依存性を解決しました

=============================================================================================================================================================================================
 Package                                            アーキテクチャー                  バージョン                                           リポジトリー                                 容量
=============================================================================================================================================================================================
インストール中:
 containerd.io                                      x86_64                            1.2.13-3.2.el7                                       docker-ce-stable                             25 M
 docker-ce                                          x86_64                            3:19.03.8-3.el7                                      docker-ce-stable                             25 M
 docker-ce-cli                                      x86_64                            1:19.03.8-3.el7                                      docker-ce-stable                             40 M
依存性関連でのインストールをします:
 audit-libs-python                                  x86_64                            2.8.5-4.el7                                          base                                         76 k
 checkpolicy                                        x86_64                            2.5-8.el7                                            base                                        295 k
 container-selinux                                  noarch                            2:2.119.1-1.c57a6f9.el7                              extras                                       40 k
 libcgroup                                          x86_64                            0.41-21.el7                                          base                                         66 k
 libsemanage-python                                 x86_64                            2.5-14.el7                                           base                                        113 k
 policycoreutils-python                             x86_64                            2.5-34.el7                                           base                                        457 k
 python-IPy                                         noarch                            0.75-6.el7                                           base                                         32 k
 setools-libs                                       x86_64                            3.3.8-4.el7                                          base                                        620 k
依存性関連での更新をします:
 audit                                              x86_64                            2.8.5-4.el7                                          base                                        256 k
 audit-libs                                         x86_64                            2.8.5-4.el7                                          base                                        102 k
 libselinux                                         x86_64                            2.5-15.el7                                           base                                        162 k
 libselinux-python                                  x86_64                            2.5-15.el7                                           base                                        236 k
 libselinux-utils                                   x86_64                            2.5-15.el7                                           base                                        151 k
 libsemanage                                        x86_64                            2.5-14.el7                                           base                                        151 k
 libsepol                                           x86_64                            2.5-10.el7                                           base                                        297 k
 policycoreutils                                    x86_64                            2.5-34.el7                                           base                                        917 k
 selinux-policy                                     noarch                            3.13.1-266.el7                                       base                                        497 k
 selinux-policy-targeted                            noarch                            3.13.1-266.el7                                       base                                        7.0 M

トランザクションの要約
=============================================================================================================================================================================================
インストール  3 パッケージ (+ 8 個の依存関係のパッケージ)
更新                       ( 10 個の依存関係のパッケージ)

総ダウンロード容量: 101 M
Is this ok [y/d/N]: y
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
(1/21): audit-libs-2.8.5-4.el7.x86_64.rpm                                                                                                                             | 102 kB  00:00:00
(2/21): audit-2.8.5-4.el7.x86_64.rpm                                                                                                                                  | 256 kB  00:00:00
(3/21): audit-libs-python-2.8.5-4.el7.x86_64.rpm                                                                                                                      |  76 kB  00:00:00
(4/21): checkpolicy-2.5-8.el7.x86_64.rpm                                                                                                                              | 295 kB  00:00:00
(5/21): container-selinux-2.119.1-1.c57a6f9.el7.noarch.rpm                                                                                                            |  40 kB  00:00:00
warning: /var/cache/yum/x86_64/7/docker-ce-stable/packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID 621e9f35: NOKEY ]  0.0 B/s | 769 kB  --:--:-- ETA
containerd.io-1.2.13-3.2.el7.x86_64.rpm の公開鍵がインストールされていません
(6/21): containerd.io-1.2.13-3.2.el7.x86_64.rpm                                                                                                                       |  25 MB  00:00:00
(7/21): docker-ce-19.03.8-3.el7.x86_64.rpm                                                                                                                            |  25 MB  00:00:00
(8/21): libcgroup-0.41-21.el7.x86_64.rpm                                                                                                                              |  66 kB  00:00:00
(9/21): libselinux-2.5-15.el7.x86_64.rpm                                                                                                                              | 162 kB  00:00:00
(10/21): libselinux-python-2.5-15.el7.x86_64.rpm                                                                                                                      | 236 kB  00:00:00
(11/21): libselinux-utils-2.5-15.el7.x86_64.rpm                                                                                                                       | 151 kB  00:00:00
(12/21): libsemanage-2.5-14.el7.x86_64.rpm                                                                                                                            | 151 kB  00:00:00
(13/21): libsemanage-python-2.5-14.el7.x86_64.rpm                                                                                                                     | 113 kB  00:00:00
(14/21): libsepol-2.5-10.el7.x86_64.rpm                                                                                                                               | 297 kB  00:00:00
(15/21): docker-ce-cli-19.03.8-3.el7.x86_64.rpm                                                                                                                       |  40 MB  00:00:00
(16/21): policycoreutils-2.5-34.el7.x86_64.rpm                                                                                                                        | 917 kB  00:00:00
(17/21): policycoreutils-python-2.5-34.el7.x86_64.rpm                                                                                                                 | 457 kB  00:00:00
(18/21): python-IPy-0.75-6.el7.noarch.rpm                                                                                                                             |  32 kB  00:00:00
(19/21): selinux-policy-3.13.1-266.el7.noarch.rpm                                                                                                                     | 497 kB  00:00:00
(20/21): setools-libs-3.3.8-4.el7.x86_64.rpm                                                                                                                          | 620 kB  00:00:00
(21/21): selinux-policy-targeted-3.13.1-266.el7.noarch.rpm                                                                                                            | 7.0 MB  00:00:00
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計                                                                                                                                                          47 MB/s | 101 MB  00:00:02
https://download.docker.com/linux/centos/gpg から鍵を取得中です。
Importing GPG key 0x621E9F35:
 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
上記の処理を行います。よろしいでしょうか? [y/N]y
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  更新します              : libsepol-2.5-10.el7.x86_64                                                                                                                                  1/31
  更新します              : libselinux-2.5-15.el7.x86_64                                                                                                                                2/31
  更新します              : audit-libs-2.8.5-4.el7.x86_64                                                                                                                               3/31
  更新します              : libsemanage-2.5-14.el7.x86_64                                                                                                                               4/31
  更新します              : libselinux-utils-2.5-15.el7.x86_64                                                                                                                          5/31
  更新します              : policycoreutils-2.5-34.el7.x86_64                                                                                                                           6/31
  更新します              : selinux-policy-3.13.1-266.el7.noarch                                                                                                                        7/31
  インストール中          : libcgroup-0.41-21.el7.x86_64                                                                                                                                8/31
  更新します              : selinux-policy-targeted-3.13.1-266.el7.noarch                                                                                                               9/31
  インストール中          : libsemanage-python-2.5-14.el7.x86_64                                                                                                                       10/31
  インストール中          : audit-libs-python-2.8.5-4.el7.x86_64                                                                                                                       11/31
  インストール中          : setools-libs-3.3.8-4.el7.x86_64                                                                                                                            12/31
  更新します              : libselinux-python-2.5-15.el7.x86_64                                                                                                                        13/31
  インストール中          : python-IPy-0.75-6.el7.noarch                                                                                                                               14/31
  インストール中          : 1:docker-ce-cli-19.03.8-3.el7.x86_64                                                                                                                       15/31
  インストール中          : checkpolicy-2.5-8.el7.x86_64                                                                                                                               16/31
  インストール中          : policycoreutils-python-2.5-34.el7.x86_64                                                                                                                   17/31
  インストール中          : 2:container-selinux-2.119.1-1.c57a6f9.el7.noarch                                                                                                           18/31
  インストール中          : containerd.io-1.2.13-3.2.el7.x86_64                                                                                                                        19/31
  インストール中          : 3:docker-ce-19.03.8-3.el7.x86_64                                                                                                                           20/31
  更新します              : audit-2.8.5-4.el7.x86_64                                                                                                                                   21/31
  整理中                  : selinux-policy-targeted-3.13.1-192.el7_5.4.noarch                                                                                                          22/31
  整理中                  : selinux-policy-3.13.1-192.el7_5.4.noarch                                                                                                                   23/31
  整理中                  : policycoreutils-2.5-22.el7.x86_64                                                                                                                          24/31
  整理中                  : libsemanage-2.5-11.el7.x86_64                                                                                                                              25/31
  整理中                  : libselinux-utils-2.5-12.el7.x86_64                                                                                                                         26/31
  整理中                  : libselinux-python-2.5-12.el7.x86_64                                                                                                                        27/31
  整理中                  : libselinux-2.5-12.el7.x86_64                                                                                                                               28/31
  整理中                  : audit-2.8.1-3.el7.x86_64                                                                                                                                   29/31
  整理中                  : audit-libs-2.8.1-3.el7.x86_64                                                                                                                              30/31
  整理中                  : libsepol-2.5-8.1.el7.x86_64                                                                                                                                31/31
  検証中                  : 2:container-selinux-2.119.1-1.c57a6f9.el7.noarch                                                                                                            1/31
  検証中                  : containerd.io-1.2.13-3.2.el7.x86_64                                                                                                                         2/31
  検証中                  : audit-libs-2.8.5-4.el7.x86_64                                                                                                                               3/31
  検証中                  : checkpolicy-2.5-8.el7.x86_64                                                                                                                                4/31
  検証中                  : policycoreutils-2.5-34.el7.x86_64                                                                                                                           5/31
  検証中                  : 1:docker-ce-cli-19.03.8-3.el7.x86_64                                                                                                                        6/31
  検証中                  : python-IPy-0.75-6.el7.noarch                                                                                                                                7/31
  検証中                  : libselinux-utils-2.5-15.el7.x86_64                                                                                                                          8/31
  検証中                  : policycoreutils-python-2.5-34.el7.x86_64                                                                                                                    9/31
  検証中                  : setools-libs-3.3.8-4.el7.x86_64                                                                                                                            10/31
  検証中                  : audit-2.8.5-4.el7.x86_64                                                                                                                                   11/31
  検証中                  : selinux-policy-3.13.1-266.el7.noarch                                                                                                                       12/31
  検証中                  : libselinux-2.5-15.el7.x86_64                                                                                                                               13/31
  検証中                  : libsemanage-python-2.5-14.el7.x86_64                                                                                                                       14/31
  検証中                  : libsemanage-2.5-14.el7.x86_64                                                                                                                              15/31
  検証中                  : libselinux-python-2.5-15.el7.x86_64                                                                                                                        16/31
  検証中                  : libsepol-2.5-10.el7.x86_64                                                                                                                                 17/31
  検証中                  : 3:docker-ce-19.03.8-3.el7.x86_64                                                                                                                           18/31
  検証中                  : audit-libs-python-2.8.5-4.el7.x86_64                                                                                                                       19/31
  検証中                  : selinux-policy-targeted-3.13.1-266.el7.noarch                                                                                                              20/31
  検証中                  : libcgroup-0.41-21.el7.x86_64                                                                                                                               21/31
  検証中                  : libsemanage-2.5-11.el7.x86_64                                                                                                                              22/31
  検証中                  : libselinux-python-2.5-12.el7.x86_64                                                                                                                        23/31
  検証中                  : selinux-policy-3.13.1-192.el7_5.4.noarch                                                                                                                   24/31
  検証中                  : audit-libs-2.8.1-3.el7.x86_64                                                                                                                              25/31
  検証中                  : policycoreutils-2.5-22.el7.x86_64                                                                                                                          26/31
  検証中                  : audit-2.8.1-3.el7.x86_64                                                                                                                                   27/31
  検証中                  : selinux-policy-targeted-3.13.1-192.el7_5.4.noarch                                                                                                          28/31
  検証中                  : libsepol-2.5-8.1.el7.x86_64                                                                                                                                29/31
  検証中                  : libselinux-2.5-12.el7.x86_64                                                                                                                               30/31
  検証中                  : libselinux-utils-2.5-12.el7.x86_64                                                                                                                         31/31

インストール:
  containerd.io.x86_64 0:1.2.13-3.2.el7                           docker-ce.x86_64 3:19.03.8-3.el7                           docker-ce-cli.x86_64 1:19.03.8-3.el7

依存性関連をインストールしました:
  audit-libs-python.x86_64 0:2.8.5-4.el7      checkpolicy.x86_64 0:2.5-8.el7                  container-selinux.noarch 2:2.119.1-1.c57a6f9.el7      libcgroup.x86_64 0:0.41-21.el7
  libsemanage-python.x86_64 0:2.5-14.el7      policycoreutils-python.x86_64 0:2.5-34.el7      python-IPy.noarch 0:0.75-6.el7                        setools-libs.x86_64 0:3.3.8-4.el7

依存性を更新しました:
  audit.x86_64 0:2.8.5-4.el7      audit-libs.x86_64 0:2.8.5-4.el7 libselinux.x86_64 0:2.5-15.el7      libselinux-python.x86_64 0:2.5-15.el7  libselinux-utils.x86_64 0:2.5-15.el7
  libsemanage.x86_64 0:2.5-14.el7 libsepol.x86_64 0:2.5-10.el7    policycoreutils.x86_64 0:2.5-34.el7 selinux-policy.noarch 0:3.13.1-266.el7 selinux-policy-targeted.noarch 0:3.13.1-266.el7

完了しました!

こちらのバージジョンがインストールされたようです。

  • containerd.io.x86_64 0:1.2.13-3.2.el7
  • docker-ce.x86_64 3:19.03.8-3.el7
  • docker-ce-cli.x86_64 1:19.03.8-3.el7

Dockerのバージョンを指定する場合

バージョンを指定したい場合は以下のように確認をします。

yum list docker-ce --showduplicates | sort -r
[user01@vmcentos7 ~]$ yum list docker-ce --showduplicates | sort -r
利用可能なパッケージ
読み込んだプラグイン:fastestmirror, langpacks
インストール済みパッケージ
docker-ce.x86_64            3:19.03.8-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.8-3.el7                    @docker-ce-stable
docker-ce.x86_64            3:19.03.7-3.el7                    docker-ce-stable
docker-ce.x86_64            3:19.03.6-3.el7                    docker-ce-stable

以下省略

Dockerデーモンを起動する

インストールが完了したのでつぎにDockerを起動します。

sudo systemctl start docker
[user01@vmcentos7 ~]$ sudo systemctl start docker
[user01@vmcentos7 ~]$ ps aux | grep dockerd
root       4568  0.2  0.8 604988 69384 ?        Ssl  14:58   0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Dockerエンジンがちゃんと使えるかお試しイメージ「hello-world」で確認してみます。

sudo docker run hello-world
[user01@vmcentos7 ~]$ sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Status: Downloaded newer image for hello-world:latest

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がどのようにふるまったかを表示してくれたので、理解の助けになってありがたかったです。

  1. DockerクライアントがDockerデーモンに接続しました。
  2. DockerデーモンがDocker Hubから「hello-world」イメージをプルしました。 (amd64)
  3. Dockerデーモンは、現在読み取っている出力を生成する実行可能ファイルを実行するそのイメージから新しいコンテナーを作成しました。
  4. Dockerデーモンはその出力をDockerクライアントにストリーミングし、Dockerクライアントはそれを端末に送信しました。

ちなみに最初の一回目は最新のhello-worldイメージが存在しないのでダウンロードするログ2行目~6行目がでましたが二回目実行するとなくなりました。

[user01@vmcentos7 ~]$ sudo 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/

コマンド結果の最後にはもっと野心的に試したいなら「docker run -it ubuntu bash」をやれって書いてあったのでやってみます。

コンテナとしてUbuntuを起動してみる

Ubuntu環境をDockerコンテナ上で起動してみます。

sudo docker run -it ubuntu bash
[user01@vmcentos7 ~]$ sudo docker run -it ubuntu bash
root@e230fe0e211f:/#

プロンプトが変わりました。本当にUbuntuが起動したのか確認してみます。

cat /etc/lsb-release
root@e230fe0e211f:/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04 LTS"

確かにUbuntu20.04が立ち上がっていますね!

コンテナの状態をみる

一度exitでubuntuから抜けておきます。

最後にDockerのコマンドでコンテナの状態を見てみます。

sudo docker ps -a
[user01@vmcentos7 ~]$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
e230fe0e211f        ubuntu              "bash"              7 minutes ago       Exited (0) 3 minutes ago                        recursing_tesla 
5ea051bb4d1f        hello-world         "/hello"            7 minutes ago       Exited (0) 7 minutes ago                        cranky_wilson
954deacbbad6        hello-world         "/hello"            16 minutes ago      Exited (0) 16 minutes ago                       adoring_hodgkin 

まとめ

今回は初めてDockerを使ってみました。インストールから起動までは非常に簡単でした。

今後はDockerfileを書いてイメージを作成や、ボリュームのマウント、クラウドにホストさせてみたり、Kubernetesなどにも挑戦してみたいと思います。

最後までご覧いただきありがとうございました。

以上、やましー@データ活用クラウドエンジニア(@yamashi18041)でした。