オープニング

ディスカバリーチャンネル「インターネッツ!大海原!!」MCを務めるのは毎度おなじみジャッカルと、

ジェシーよ~♪
インターネットという大海に生息する高度な精度を誇るOSSにクローズアップし、どんなものなのかを触れ合うことで理解するシリーズ。
シリーズ第一回目は鯨さんがトレードマークのDocker。昨今巷で聞くCloud Native。その話題にいつも顔を見せるのがこのDocker。
今回はDockerにクローズアップし、その生態系に迫ります。どんな顔を見せてくれるのでしょうか。楽しみですね。
この記事では以下の事を説明します。
- Dockerとはなんぞや
- Dockerイメージとはなんぞや
- Docker Hubとはなんぞや
- Dockerを使ってみる
- pullするとはなんぞや
Dockerとは
Dockerとは一言でいえばコンテナ型の仮想マシンを実現するためのツールです。
これではイミフですよね。なので一つ一つ段階を追ってみていきましょう。
ハードウェア環境の構築や開発環境の構築といった時間のかかる作業を省いてアプリ開発ができればうれしいですよね。作業工数が減り、作られた製品の単価は安くなり、素早く他社より早くサービスをリリースできます。しかし、これを実現するためにアプリケーション単位で分離でき、開発する環境を作っては壊しのトライアンドエラーを何度も行えるような仕組みが必要です。

コンテナ型の仮想マシンはこの仕組みが実現できるってわけだ!

Wow!そのためのツールとしてDockerが登場するって訳ね!
Dockerはアプリの開発環境と実行環境をパッケージ化して素早く配置したり削除することができます。
このアプリの開発環境と実行環境をパッケージ化たものをDockerイメージと言います。
皆が使えるイメージの保管場所の提供
Dockerの特徴の一つにDockerイメージの保管場所を提供しているサービスがあります。保管場所の事を一般的にレジストリといいます。そしてこのDockerイメージが貯められた保管場所の事をDocker Hubといいます。これはインターネットからアクセスできるのでこの保管されたDockerイメージを取得できますし、Docker Hubにアップロードもできます。
Dockerエディション
Dockerエンジンは大きく分けて2つです。有料のものと無料のものです。またDockerエンジンとはアプリケーションのパッケージ化やコンテナ実行を行うものです。
有料のものがDocker Enterprise Edition (Docker EE)、
無料のものがDocker Community Edition (Docker CE)です。
Dockerをラズベリーパイにインストール
では、Dockerがなんたるかが少しわかったところでDockerをラズベリーパイにインストールしてみます。(ぶっちゃけ言うとラズベリーパイとDockerってあんま相性良くない気がします。)
以下のコマンドを打ってみてください。https://get.docker.comに行けばわかりますが、スクリプトになっており、そのスクリプトを実行しています。
$ curl -sSL https://get.docker.com | sh
上記コマンドを実行したら以下のようになると思います。指が指しているところでdocker-ceがインストールされています。上記でも説明した無料のdockerです。
$ curl -sSL https://get.docker.com | sh
# Executing docker install script, commit: 3d8fe77c2c46c5b7571f94b42793905e5b3e42e4
+ sudo -E sh -c apt-get update -qq >/dev/null
+ sudo -E sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sudo -E sh -c curl -fsSL "https://download.docker.com/linux/raspbian/gpg" | apt-key add -qq - >/dev/null
Warning: apt-key output should not be parsed (stdout is not a terminal)
+ sudo -E sh -c echo "deb [arch=armhf] https://download.docker.com/linux/raspbian buster stable" > /etc/apt/sources.list.d/docker.list
+ sudo -E sh -c apt-get update -qq >/dev/null
+ [ -n ]
+ sudo -E sh -c apt-get install -y -qq --no-install-recommends docker-ce >/dev/null 👈ここ
+ sudo -E sh -c docker version
Client: Docker Engine - Community
Version: 20.10.2
API version: 1.41
Go version: go1.13.15
Git commit: 2291f61
Built: Mon Dec 28 16:18:13 2020
OS/Arch: linux/arm
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.2
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 8891c58
Built: Mon Dec 28 16:15:48 2020
OS/Arch: linux/arm
Experimental: false
containerd:
Version: 1.4.3
GitCommit: 269548fa27e0089a8b8278fc4fc781d7f65a939b
runc:
Version: 1.0.0-rc92
GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
docker-init:
Version: 0.19.0
GitCommit: de40ad0
If you would like to use Docker as a non-root user, you should now consider
adding your user to the "docker" group with something like:
sudo usermod -aG docker appare99
Remember that you will have to log out and back in for this to take effect!
WARNING: Adding a user to the "docker" group will grant the ability to run
containers which can be used to obtain root privileges on the
docker host.
Refer to https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
for more information.
バージョン確認してみましょう。
$ docker -v
Docker version 20.10.2, build 2291f61
イメージをpullする
前述したDocker Hubの説明で「保管されたDockerイメージを取得できる」と記載しました。
Docker Hubに保管されたDockerイメージを取得することをpullといいます。保管庫からイメージを引っ張ってくるイメージですね。
pullは以下のコマンドで行います。今回はCentOS 7のイメージをpullしてきます。
$ sudo docker pull centos:centos7 👈このコマンド
centos7: Pulling from library/centos
193bcbf05ff9: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
pullしてきたイメージを確認してみましょう。
$ sudo docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 8c52f2d0416f 22 months ago 175MB
これまでで以下のような事をしました。今の状態です。

このイメージをコンテナとして起動することでコンテナ内で作業することができるようになります。以下のコマンドを実行してみましょう。
$ sudo docker run -it centos:centos7 /bin/bash
[root@d3ff0338b004 /]#
今の状態はイメージをコンテナとして起動し、そのコンテナ内に入っている状態です。以下のようなイメージです。

この状態でOSの確認をしてみましょう。CentOS系は以下のコマンド
[root@d3ff0338b004 /]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (AltArch)
コンテナの外で確認すると以下のような感じ。ラズベリーパイはDebian系のOSなので以下のようになります。
$ cat /etc/debian_version
10.7
つまり以下の画像のようにコンテナ内にCentOSという別のOS空間ができていることになります。

こんな簡単に別のOSの空間を用意することができました。
これがDockerの強みです。
まとめ
今回はここまでといたします。Dockerどうでしたか。実際に手を動かしてみるとそんなに難しくないと思います。
そして実際に手を動かすからこそ理解が深まります。これからどんどんDockerの生態について詳しく触れていきたいと思います。
というか、ジャッカルとジェシー2回しか出てこなかったな。。。
