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 使うと環境を汚してもすぐに元に戻せるなぁ……とふと気が付いたので,これからボチボチ使っていこうと思います.
以上!