🐯

KatacodaのCentOS PlaygroundでのDocker導入ステップ

2020/11/30に公開

KatacodaのCentOSプレイグラウンドのインスタンスに最新版Dockerを導入するためのステップをメモしておく。

https://www.katacoda.com/courses/centos/playground

KatacodaにはあらかじめDocker学習コースが多数用意されているが、あえてCentOSプレイグラウンドをベースにすることで学びを深められるかもしれないと思い試してみた。

https://www.katacoda.com/courses/docker

余談:「Deploying Your First Docker Container」という初歩のコースではUbuntu 16.04.4 LTS版でDockerが動いていた。

余談の内容を確認したい場合はクリック
$ uname -a
Linux 47e145770256 4.4.0-122-generic #146-Ubuntu SMP Mon Apr 23 15:34:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
(省略)

$ docker -v
Docker version 18.05.0-ce, build f150324

カーネルもDockerも新しめ。

CentOS Playgroundの起動後にOS情報、ロケールや日時、ネットワークの確認

KatacodaでCentOSを起動すると、プロンプトがroot@hostname(=任意の英数字の羅列)になる。hostnameはプレイグランド実行時に毎回変化する。学習環境がそれぞれ独立したコンテナで動作するのだろう。

[root@ddde72d84764 ~]#

諸々、基本情報を確認していく。以下、root@xxxのようなホスト情報は省略する。

# uname -a
Linux ba05f2715201 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 20 20:32:50 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

カーネルは、3.10.0-693.5.2.el7.x86_64。念のためOSのバージョンも確認。

# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

localeとdateの確認。

# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
# date
Thu Nov 26 07:01:46 UTC 2020

ネットワークの確認。起動の度にeth0のアドレスは変わるっぽい。

# ip a
1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
      valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 02:42:ac:11:00:1a brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.26/16 brd 172.17.255.255 scope global eth0
      valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:1a/64 scope link
      valid_lft forever preferred_lft forever
3: docker0: mtu 1500 qdisc noqueue state DOWN
    link/ether 02:42:91:7a:0e:a9 brd ff:ff:ff:ff:ff:ff
    inet 172.20.0.1/16 scope global docker0
      valid_lft forever preferred_lft forever

Dockerのバージョンとステータス確認。

# docker -v
Docker version 1.12.6, build 85d7426/1.12.6
# docker version
Client:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-1.12.6-61.git85d7426.el7.centos.x86_64
 Go version:      go1.8.3
 Git commit:      85d7426/1.12.6
 Built:           Tue Oct 24 15:40:21 2017
 OS/Arch:         linux/amd64

Server:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-1.12.6-61.git85d7426.el7.centos.x86_64
 Go version:      go1.8.3
 Git commit:      85d7426/1.12.6
 Built:           Tue Oct 24 15:40:21 2017
 OS/Arch:         linux/amd64

katacodaのCentOSプレイグランドのdockerバージョンはディストリビューション標準の1.12.6。

$ systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2020-11-30 04:33:05 UTC; 2h 32min ago
     Docs: http://docs.docker.com
 Main PID: 799 (dockerd-current)
   CGroup: /system.slice/docker.service
           ├─799 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=doc...
           └─811 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-...

初期状態でDockerは動作している。

アップデートの確認

yum check-update
(長いので省略)
Transaction Summary
==================================================================================
Install    8 Packages (+59 Dependent packages)
Upgrade  309 Packages

Total download size: 484 M

アップデートはした方が良さそうだけど、目的と用途による。
Katacodaのインスタンスは放っておくと無効化されてしまうので時間の無駄かも。

旧Docker削除と最新Docker導入

標準インストールで導入したDockerを削除。

# yum remove -y docker docker-client docker-common
(ログ省略)

# rm -rf /var/lib/docker /var/run/docker

Docker CE版のリポジトリを有効化して安定版をインストール。

# yum install -y yum-utils device-mapper-persistent-data lvm2
(ログ省略)

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

# yum install -y docker-ce docker-ce-cli containerd.io
(ログ省略)

最新版Dockerが導入できたかどうか諸々確認

# docker -v
Docker version 19.03.13, build 4484c46d9d
# docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

この時点で最新の19.03.13になっていることを確認。

systemctlコマンドでステータス確認。dead状態なので起動。常時起動設定は目的による。

# systemctl status docker

# systemctl start docker

# systemctl enable docker

Dockerが正しく動作しているかを確認するため、hello-worldイメージを作成して実行。

$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Trying to pull repository registry.access.redhat.com/hello-world ...
Trying to pull repository docker.io/library/hello-world ...
sha256:e7c70bb24b462baa86c102610182e3efcb12a04854e8c582838d92970a09f323: Pulling from docker.io/library/hello-world

0e03bdcc26d7: Pull complete
Digest: sha256:e7c70bb24b462baa86c102610182e3efcb12a04854e8c582838d92970a09f323
Status: Downloaded newer image for docker.io/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/

まとめのようなもの

Katacoda自体、仮想化技術で動いているようなので、仮想化が入れ子状態になるが、ちゃんと動作していることが確認できた。Webブラウザが動く環境で、これだけのことが実践できるのが素晴らしい。VirtualBoxやVagrantのような仮想端末を一から起動して使うより手っ取り早いケースも出てくるだろう。ちょっとしたコマンドやシェルスクリプトの動作確認に十分使える。

余談:実機にDocker最新版を導入する方法

実機でも同様の操作で導入可能。自分のサイトでまとめ済み。

https://linuc.spa-miz.com/2020/11/16/centos7-installing-the-latest-version-of-docker/

Discussion