CentOS7 に docker を入れる備忘録

Server
Photo by hyt.

CentOS7 に docker を入れる備忘録です.今回はホントに単なる備忘録です.

CentOS7 の最小構成からの導入です.

CentOS7 on Hyper-V インストール備忘録
ローカル環境で使う CentOS7 on Hyper-V のインストールについての備忘録.方針はとりあえず必要最低限のみ使えれば良い状態にすること.大したことに使うわけではないので,仮想マシンは次の通り設定.項目値備考世代2起動時にTSC ...

入れるだけなら簡単ですね.念のため,依存パッケージの情報も載せておきます.

$ cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core) 

$ sudo yum install docker
....
(1/26): PyYAML-3.10-11.el7.x86_64.rpm                      | 153 kB   00:00     
(2/26): atomic-registries-1.22.1-26.gitb507039.el7.centos. |  35 kB   00:00     
(3/26): audit-libs-python-2.8.4-4.el7.x86_64.rpm           |  76 kB   00:00     
(4/26): container-selinux-2.74-1.el7.noarch.rpm            |  38 kB   00:00     
(5/26): containers-common-0.1.31-8.gitb0b750d.el7.centos.x |  21 kB   00:00     
(6/26): checkpolicy-2.5-8.el7.x86_64.rpm                   | 295 kB   00:00     
(7/26): docker-common-1.13.1-94.gitb2f74b2.el7.centos.x86_ |  96 kB   00:00     
(8/26): container-storage-setup-0.11.0-2.git5eaf76c.el7.no |  35 kB   00:00     
(9/26): libyaml-0.1.4-11.el7_0.x86_64.rpm                  |  55 kB   00:00     
(10/26): libsemanage-python-2.5-14.el7.x86_64.rpm          | 113 kB   00:00     
(11/26): oci-systemd-hook-0.1.18-3.git8787307.el7_6.x86_64 |  34 kB   00:00     
(12/26): oci-umount-2.3.4-2.git87f9237.el7.x86_64.rpm      |  32 kB   00:00     
(13/26): docker-client-1.13.1-94.gitb2f74b2.el7.centos.x86 | 3.9 MB   00:00     
(14/26): libcgroup-0.41-20.el7.x86_64.rpm                  |  66 kB   00:00     
(15/26): python-IPy-0.75-6.el7.noarch.rpm                  |  32 kB   00:00     
(16/26): policycoreutils-python-2.5-29.el7_6.1.x86_64.rpm  | 456 kB   00:00     
(17/26): python-backports-1.0-8.el7.x86_64.rpm             | 5.8 kB   00:00     
(18/26): python-backports-ssl_match_hostname-3.5.0.1-1.el7 |  13 kB   00:00     
(19/26): python-pytoml-0.1.14-1.git7dea353.el7.noarch.rpm  |  18 kB   00:00     
(20/26): python-setuptools-0.9.8-7.el7.noarch.rpm          | 397 kB   00:00     
(21/26): subscription-manager-rhsm-certificates-1.21.10-3. | 207 kB   00:00     
(22/26): yajl-2.0.4-4.el7.x86_64.rpm                       |  39 kB   00:00     
(23/26): python-ipaddress-1.0.16-2.el7.noarch.rpm          |  34 kB   00:00     
(24/26): setools-libs-3.3.8-4.el7.x86_64.rpm               | 620 kB   00:00     
(25/26): docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64.rpm |  18 MB   00:01     
(26/26): oci-register-machine-0-6.git2b44233.el7.x86_64.rp | 1.1 MB   00:01     
--------------------------------------------------------------------------------
合計                                               9.1 MB/s |  25 MB  00:02 
...

$ sudo systemctl start docker
$ $ sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

終わったらとりあえず適当なコマンドを実行してみます.

$ docker images
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied

う〜ん.permission が無いと言われてしまいました.もちろん sudo 付きなら実行できます.

$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

試しに /etc/passwd を覗いてみると,

$ cat /etc/group
.....
dockerroot:x:994:

のような記述があるので,

$ sudo usermod -aG dockerroot hyt
$ cat /etc/group
...
dockerroot:x:994:hyt

として,再度適当なコマンドを実行してみます.

$ docker images
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied

うーん.ダメみたいです.仕方ないのでググってみると,

CentOS7でsudoなしでdockerを利用するちょっとした工夫 - Qiita
CentOS7でsudoなしでdockerを利用するちょっとした工夫概要トゥ~ン…(プロフェッショナル風)家のサーバをCentOS6.8からCentOS7にした。Dockerを入れた。Ro…

にありますね.

$ ls -alF /var/run/docker.sock 
srw-rw----. 1 root root 0  3月 24 23:52 /var/run/docker.sock=

$ sudo chgrp dockerroot /var/run/docker.sock 
$ ls -alF /var/run/docker.sock 
srw-rw----. 1 root dockerroot 0  3月 24 23:52 /var/run/docker.sock=
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

確かに実行できます.しかしこれだと再起動すると元に戻ってしまう気がします.試しに再起動してみると……

$ sudo systemctl stop docker
$ sudo systemctl start docker
$ ls -alF /var/run/docker.sock 
srw-rw----. 1 root root 0  3月 25 00:07 /var/run/docker.sock=

戻ってますね.指定グループでサービスを実行するよう docker の systemd の設定ファイルを書き換えないといけないようです.と言うことで,

$ sudo vi /etc/systemd/system/multi-user.target.wants/docker.service 
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer

[Service]
Type=notify
NotifyAccess=main
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd-current \
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
          --init-path=/usr/libexec/docker/docker-init-current \
          --seccomp-profile=/etc/docker/seccomp.json \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY \
          $REGISTRIES
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0
Restart=on-abnormal
KillMode=process
User=root
Group=dockerroot

[Install]
WantedBy=multi-user.target

のように User と Group の部分を追加して再起動すると,

$ sudo systemctl daemon-reload
$ sudo systemctl stop docker
$ sudo systemctl start docker
$ ls -alF /var/run/docker.sock
srw-rw----. 1 root dockerroot 0  3月 25 00:14 /var/run/docker.sock=
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

今度は無事実行できました.

最後はお約束の “Hello World” です.

$ docker pull hello-world
Using default tag: latest
Trying to pull repository docker.io/library/hello-world ... 
latest: Pulling from docker.io/library/hello-world
1b930d010525: Pull complete 
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for docker.io/hello-world:latest
$ 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 って必要性を感じてなかったんですが,そうか,docker 使うと環境を汚してもすぐに元に戻せるなぁ……とふと気が付いたので,これからボチボチ使っていこうと思います.

以上!

Server
スポンサーリンク
Following hyt!
タイトルとURLをコピーしました