CentOS 7 でのインストール方法について

インストール

CentOS 7だとyumでインストールできますが、デフォルトのレポジトリではバージョンが古くなります。

新しいバージョンを使いたい場合は、dockerのレポジトリを使ってインストールします

デフォルト版

CentOS 7 のデフォルトレポジトリからyumでインストールする場合、以下を実行します。

# yum install docker

最新の安定版

最新の安定版を使いたい場合は、以下のdocker docsのページを参考にインストールします。 安定板(stable)以外にnightly repositoryを使う方法も書いてあります。

注意 yumでデフォルトのインストールを行っている場合、削除する必要があります。

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

yum-utils、device-mapper-persistent-data、lvm2 の3つが必要なのでインストールします。

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

dockerのレポジトリを追加します。

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
実行すると以下のようになります。
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
読み込んだプラグイン:fastestmirror
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-ce (Docker Engine - Community)をインストールします。

sudo yum install docker-ce docker-ce-cli containerd.io
実行すると以下のようになります。
# yum install docker-ce docker-ce-cli containerd.io
…
=====================================================================================================
 Package                    アーキテクチャー
                                            バージョン                リポジトリー               容量
======================================================================================================
インストール中:
 containerd.io              x86_64          1.2.6-3.3.el7             docker-ce-stable           26 M
 docker-ce                  x86_64          3:19.03.2-3.el7           docker-ce-stable           24 M
 docker-ce-cli              x86_64          1:19.03.2-3.el7           docker-ce-stable           39 M
依存性関連でのインストールをします:
 container-selinux          noarch          2:2.107-3.el7             extras                     39 k
 libseccomp                 x86_64          2.3.1-3.el7               base                       56 k

トランザクションの要約
======================================================================================================
インストール  3 パッケージ (+2 個の依存関係のパッケージ)
・・・
・・・
完了しました!

サービス管理

サービスの起動・停止

CentOS 7の場合、デフォルトではSystemdで管理されていますので、Systemdの設定を行います。

まずdockerサービスを起動させます。

# systemctl start docker.service

サービスを停止する場合は以下になります。

# systemctl stop docker.service

サービスを再起動する場合は以下になります。

# systemctl restart docker.service

システム起動時に自動起動させたい場合は、以下を実行します。

# systemctl enable docker.service

システム起動時に自動起動しないようにする場合は以下になります。

# systemctl disable docker.service

サービスの状態確認

dockerサービスの状態を確認する場合は、systemctlのstatusコマンドで可能です。 以下はActive: active (running) となっていますので、稼動中になります。

# systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2016-04-05 08:48:31 JST; 51min ago
     Docs: http://docs.docker.com
 Main PID: 4281 (docker)
   CGroup: /system.slice/docker.service
           mq4281 /usr/bin/docker daemon --selinux-enabled

 4月 05 08:48:31 localhost.localdomain docker[4281]: time="2016-04-05T08:48:...
 4月 05 08:48:31 localhost.localdomain docker[4281]: time="2016-04-05T08:48:...
 4月 05 08:48:31 localhost.localdomain docker[4281]: time="2016-04-05T08:48:...
 4月 05 08:48:31 localhost.localdomain docker[4281]: time="2016-04-05T08:48:...
 4月 05 08:48:31 localhost.localdomain docker[4281]: time="2016-04-05T08:48:...
 4月 05 08:48:31 localhost.localdomain docker[4281]: ........
 4月 05 08:48:31 localhost.localdomain docker[4281]: time="2016-04-05T08:48:...
 4月 05 08:48:31 localhost.localdomain docker[4281]: time="2016-04-05T08:48:...
 4月 05 08:48:31 localhost.localdomain docker[4281]: time="2016-04-05T08:48:...
 4月 05 08:48:31 localhost.localdomain systemd[1]: Started Docker Applicatio...
Hint: Some lines were ellipsized, use -l to show in full.

動作確認

とりあえず動作を確認したい場合、以下を実行します。

sudo docker run hello-world

正常だと以下のようになります。

# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete 
Digest: sha256:b8ba256769a0ac28dd126d584e0a2011cd2877f3f76e093a7ae560f2a5301c00
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/

その他

環境の初期化方法

Dockerのデフォルトでは、全てのデータを/var/lib/docker/に保存します。 そのため、/var/lib/docker/以下のファイル、ディレクトリを全て削除すると、dockerをインストールした直後の初期状態に戻すことができます。 ただし、稼動中のコンテナやサービスがあると問題があるので、一旦全て停止させてから削除します。 作業手順は以下のようになります。

  • dockerの稼動コンテナを全て停止
  • dockerサービスを停止
  • /var/lib/docker/にあるファイル、ディレクトリを全て削除

参考 /var/lib/docker/は以下のようになっていました。

# ls -l /var/lib/docker
合計 20
drwx------  6 root root 4096  4月  5 01:42 containers
drwx------  5 root root   50  3月 26 02:00 devicemapper
drwx------ 24 root root 4096  4月  4 21:44 graph
-rw-r--r--  1 root root 5120  4月  5 08:48 linkgraph.db
-rw-------  1 root root  462  4月  4 21:44 repositories-devicemapper
drwx------  2 root root    6  4月  4 21:44 tmp
drwx------  2 root root    6  3月 26 01:48 trust
drwx------  2 root root    6  3月 26 01:48 volumes

稼動コンテナを全て停止する場合、docker psコマンドで稼動コンテナを確認して、全コンテナを停止します。

# docker ps
その後、dockerサービスを停止して、/var/lib/docker/以下のファイル、ディレクトリを全て削除します。
# systemctl stop docker.service
# rm -rf /var/lib/docker/*