
こんにちは!やましー@データ活用クラウドエンジニア(@yamashi18041)です!
IT業界にいれば一度は耳にしたことがあるDockerなどのコンテナ技術についての記事になります。
コンテナ仮想化技術導入のトレンドは今後も続いていきそうですね‼️
— やましー@データ活用クラウドエンジニア&プログラミング (@yamashi18041) May 14, 2020
私自身コンテナを扱ったことがなく実態がよくわかってないので今週末の休みを使ってガッツリ触ってみようと思います🤗それをネタにブログ書こ♪#駆け出しエンジニアと繋がりたい #プログラミング初心者 https://t.co/pBLVB0k2zG
実は恥ずかしながら、私はコンテナや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レジストリ
Dockerの重要そうな用語
- Dockerfile(Dockerイメージを作るための手順書、コード)
- マウント(永続的にデータを書き込めるようにする手段)
- バインドマウント(bind)(ホストと共有できる方法)
- ボリュームマウント(Volume)(コンテナ間で共有できる方法)
- 一時ファイルシステムのマウント(tmpfs)(そのうち消すデータ置き場)
- namespace(コンテナ同士干渉しないよう区画として扱うためのLinuxカーネルの仕組み)
その他よく聞く用語
- Kubernetes(k8s、クバネティス、またはクーベネティス)
複数のDockerのコンテナを管理したりするためのオーケストレーションツールです。k8sはKubernetesの最初のk、真ん中の8文字、最後のsからとった略称です。
yumを使ってDockerエンジンをインストールする


本家のサイトを参考にインストールを実施してみましたが、あっという間にできました。
インストール~コンテナ起動確認まで実行したコマンドはこちら
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がどのようにふるまったかを表示してくれたので、理解の助けになってありがたかったです。
- DockerクライアントがDockerデーモンに接続しました。
- DockerデーモンがDocker Hubから「hello-world」イメージをプルしました。 (amd64)
- Dockerデーモンは、現在読み取っている出力を生成する実行可能ファイルを実行するそのイメージから新しいコンテナーを作成しました。
- 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)でした。
コメント