【サブPC 自宅サーバ化計画 CENTOS7版】DOCKERの再構築 その2

【サブPC 自宅サーバ化計画 CENTOS7版】DOCKERの再構築 その1 の続き

昨日のDockerのエラーについては、いろいろ調べてみると、カーネルのバージョンが古いんじゃね?という情報があった。英語ページで機械翻訳して読んだだけなので、合ってるか自信ないが…(https://github.com/NVIDIA/nvidia-docker/issues/918)

docker: Error response from daemon: OCI runtime create failed: container_linux.go:344: starting container process caused "process_linux.go:293: copying bootstrap data to pipe caused \"write init-p: broken pipe\"": unknown.

Docker Docsの英語ページには、以下のような記述があって、

“To install Docker CE, you need a maintained version of CentOS 7. Archived versions aren’t supported or tested.”

CentOS
Learn how to install Docker Engine on CentOS. These instructions cover the different installation methods, how to uninst...

日本語では「Docker CE をインストールするには、メンテナンスされている CentOS 7 が必要です。アーカイブされた(過去の)バージョンはサポートやテストを行っていません。」と訳されているのだが、7系の最新版(7.6)がいるということだったのか?

とりあえず、yum updateをかけて、全パッケージの更新をかけてみる。

$ sudo yum update
(中略)
$ uname -r
3.10.0-327.13.1.el7.x86_64 # 現時点でのカーネルバージョン

#ブートローダーの設定確認
$ sudo grep "^menuentry" /boot/grub2/grub.cfg
menuentry 'CentOS Linux (3.10.0-957.5.1.el7.x86_64) 7 (Core)' ... 
#↑ yum update で更新されたカーネル
menuentry 'CentOS Linux (3.10.0-327.13.1.el7.x86_64) 7 (Core)' ...
menuentry 'CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)' ...
menuentry 'CentOS Linux (0-rescue-1dd79c729f984e52b5d8529e639bd41d) 7 (Core)' ...
$ sudo grub2-editenv list
saved_entry=CentOS Linux (3.10.0-957.5.1.el7.x86_64) 7 (Core) 
#↑ すでにアップデートしたカーネルに変わってる

$ shutdown -r now

(システム再起動)

$ uname -r
3.10.0-957.5.1.el7.x86_64

カーネルのアップデートが出来たので、docker-ceを再インストールして、hello-worldを実行してみると、今度はうまく行った。

$ sudo yum remove docker-ce
$ sudo yum install docker-ce
$ sudo systemctl start docker
$ sudo systemctl enable docker
$ sudo 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のディレクトリを変える。なんか、設定ファイルの場所も変わっているみたい。ExecStartという設定項目があるので、それにディレクトリの記述を追加する。

$ sudo vi /lib/systemd/system/docker.service
[Service]
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -g /path/to/docker-dir
# 赤字部分を追加

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ systemctl status docker
 docker.service - Docker Application Container Engine
 CGroup: /system.slice/docker.service
 mq6891 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -g /path/to/docker-dir
#↑ 設定したディレクトリが反映されている

もういちど、run hello-worldを実行した後で、新しく作ったDockerディレクトリのcontainersを見てみると、コンテナが作られているようだ。

今度は、tomcatのサーバーを立ててみる。以前に作ったDockerfileを流用しようとしたが、どうも、tomcatのtarファイルが無くなっているようだったので、該当箇所だけ書き換えて、リトライ。

$ sudo docker build -t image-name . → カレントディレクトリのDockerfileを元にイメージの作成
$ sudo docker images → イメージの一覧を表示し、作成できていることを確認
$ sudo docker run -it -d -p 18080:8080 --name container-name image-name
→ コンテナを起動。[-p 18080:8080]のオプションで、ホストの18080番ポートとコンテナ側の8080番ポートをリンクさせている。
$ sudo docker ps -a → コンテナの状態を確認

ここまで行なって、エラーが出ていなければコンテナ作成は完了。
ブラウザから、http://(ホストOSのIP or URL):18080 にアクセスして、Tomcatの画面が表示されればOK。

これでいろいろコンテナを作ってみることが出来るようになった。

コメント

タイトルとURLをコピーしました