mattintosh note

どこかのエンジニアモドキの備忘録

2024-06-05: 現在ホビー関連の記事を hobby.mattintosh-note.jp に移行しています。現在掲載されている画像と今後掲載される画像は一部の環境から閲覧できなくなります。

Docker で CentOS 7 な Zabbix Server を立てる

Docker 覚えよーってことで Zabbix がすぐに使えるコンテナを作ることにした。

いまこんな状態。

  • LXC は使ってるけど Docker はほとんど使ってない
  • Mastodonインスタンスを作るときに Docker を触った
  • 知ってるよ!クジラのアレでしょアレ!!

つまりよく知らない。

Ubuntu に Docker を入れる

とりあえず Docker を使えるように。docker というパッケージはすでに Mac ライクなドックを実現するためのパッケージで使われているので Docker は docker.io というパッケージ。

$ sudo apt-get install docker.io

docker グループに所属していないと毎回 sudo することになるので usermodgpasswd で自分を docker グループに追加しておく。

$ sudo usermod -aG docker $UID

ここで一旦ログアウト。

イメージを入手する

docker images でローカルのイメージを見てみる。当然まだ何もない。

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

docker searchcentos にマッチするものを探してみる。デフォルトの表示件数は25件まで。

$ docker search centos
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                         The official build of CentOS.                   3475      [OK]
jdeathe/centos-ssh             CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8...   77                   [OK]
tutum/centos                   Simple CentOS docker image with SSH access      32
kinogmt/centos-ssh             CentOS with SSH                                 15                   [OK]
centos/postgresql-94-centos7   PostgreSQL 9.4 SQL database server              10
centos/mysql-57-centos7        MySQL 5.7 SQL database server                   8
centos/php-56-centos7          PHP 5.6 platform for building and running ...   6
centos/python-35-centos7       Python 3.5 platform for building and runni...   4
centos/mongodb-26-centos7      MongoDB 2.6 NoSQL database server               4
 :

オフィシャルなリポジトリだけに絞り込みたいときは -f|--filter オプションで is-official=true を追加する。

$ docker search -f is-official=true centos
NAME      DESCRIPTION                     STARS     OFFICIAL   AUTOMATED
centos    The official build of CentOS.   3475      [OK]

STARS が 3 以上のものに絞り込みたい場合は stars=3 とする。

$ docker search -f stars=3 centos
NAME                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                         The official build of CentOS.                   3475      [OK]
jdeathe/centos-ssh             CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8...   77                   [OK]
tutum/centos                   Simple CentOS docker image with SSH access      32
kinogmt/centos-ssh             CentOS with SSH                                 15                   [OK]
centos/postgresql-94-centos7   PostgreSQL 9.4 SQL database server              10
centos/mysql-57-centos7        MySQL 5.7 SQL database server                   8
centos/php-56-centos7          PHP 5.6 platform for building and running ...   6
centos/mysql-56-centos7        MySQL 5.6 SQL database server                   4
centos/mongodb-26-centos7      MongoDB 2.6 NoSQL database server               4
centos/python-35-centos7       Python 3.5 platform for building and runni...   4
centos/redis                   Redis built for CentOS                          3                    [OK]

せっかくなので ubuntu も検索してみる。CentOS より星の数が多い。

$ docker search -f stars=3 ubuntu
NAME                     DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                   Ubuntu is a Debian-based Linux operating s...   6269      [OK]
rastasheep/ubuntu-sshd   Dockerized SSH service, built on top of of...   91                   [OK]
ubuntu-upstart           Upstart is an event-based replacement for ...   74        [OK]
neurodebian              NeuroDebian provides neuroscience research...   37        [OK]
ubuntu-debootstrap       debootstrap --variant=minbase --components...   30        [OK]
32bit/ubuntu             Ubuntu for i386 (32bit)                         30
armhf/ubuntu             Ubuntu is a Debian-based Linux operating s...   27
nuagebec/ubuntu          Simple always updated Ubuntu docker images...   22                   [OK]
tutum/ubuntu             Simple Ubuntu docker images with SSH access     18
ppc64le/ubuntu           Ubuntu is a Debian-based Linux operating s...   10
sameersbn/ubuntu                                                         9                    [OK]
aarch64/ubuntu           Ubuntu is a Debian-based Linux operating s...   9
nimmis/ubuntu            This is a docker images different LTS vers...   7                    [OK]
i386/ubuntu              Ubuntu is a Debian-based Linux operating s...   7
libmesos/ubuntu                                                          3
darksheer/ubuntu         Base Ubuntu Image -- Updated hourly             3                    [OK]

よくわからない場合は https://hub.docker.com/explore/ を見に行けばいいんじゃないかな。

とりあえず CentOS 入れましょう。NAME[:TAG] 書式でタグが指定できます。タグの一覧は https://hub.docker.com/r/library/centos/tags/ とかで。

$ docker pull centos:latest

端末上でタグの一覧が見たければ https://registry.hub.docker.com/v1/repositories/${name}/tags の結果を jq でパース。

$ curl -s 'https://registry.hub.docker.com/v1/repositories/centos/tags' | jq -r .[].name
latest
5
5.11
6
6.6
6.7
6.8
6.9
7
7.0.1406
7.1.1503
7.2.1511
7.3.1611
centos5
centos5.11
centos6
centos6.6
centos6.7
centos6.8
centos6.9
centos7
centos7.0.1406
centos7.1.1503
centos7.2.1511
centos7.3.1611

docker images でイメージを見てみます。名前やタグを指定すれば絞り込みができます。

$ docker images centos:latest
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              36540f359ca3        10 days ago         192.5 MB

コンテナを作る

docker run でコンテナを作ります。

  • -i|--interactive:接続されていなくても標準入力を開いたままにします
  • -t|--tty:疑似端末を割り当てます
  • --rm:コンテナを自動的に削除します
$ docker run -ti centos
[root@dd4b64cdb392 /]# cat /etc/system-release
CentOS Linux release 7.3.1611 (Core)
[root@dd4b64cdb392 /]#

別の端末で docker ps を使って稼働中のコンテナを確認してみる。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
dd4b64cdb392        centos:latest       "/bin/bash"         38 seconds ago      Up 35 seconds                           hungry_blackwell

exit や Ctrl+d でコンテナを終了させる。デタッチだけであれば Ctrl+p, Ctrl+q。

今度は -d|--detach で起動。

$ docker run -dti centos
762ea423472ea002b3c28bb88841bc7a66ce5f3b2b7257404ecb022d1cc4d562
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
762ea423472e        centos              "/bin/bash"         7 seconds ago       Up 4 seconds                            modest_bose

docker exec でコマンドを与えればコンテナ内で実行してくれる。

$ docker exec modest_bose cat /etc/system-release
CentOS Linux release 7.3.1611 (Core)

アタッチ。

$ docker attach modest_bose
[root@762ea423472e /]#

別のシェルを起動してそっちでアタッチ。

$ docker exec -ti modest_bose /bin/bash
[root@762ea423472e /]#

デタッチしてまたアタッチの流れ。

$ docker run -ti centos
[root@f48847bbf999 /]# ここで Ctrl+p, Ctrl+q を押すとデタッチされる
$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
f48847bbf999        centos              "/bin/bash"         10 seconds ago      Up 6 seconds                            agitated_morse
$ docker attach agitated_morse
[root@f48847bbf999 /]#

コンテナ名は毎回変わるので固定したい場合は docker run --name my-container のように --name オプションでコンテナ名を指定すればよい。

コンテナが量産されるんだけど…

必要なものがあればコミットしときましょう。

$ docker commit コンテナ名 イメージ名

全部要らないならまとめて消せばいいんじゃないかな。

$ docker rm `docker ps -qa`

Zabbix サーバ用の Dockerfile を書くよ

Docker に簡単に慣れたところで Zabbix サーバを構築するための Dockerfile を書いてみることにした。

が、よくよく調べてみると docker build では --privileged オプションが使えないので systemd が動かないらしい。まぁなんとかなるだろ。

Dockerfile を作っている途中、何故か yum install zabbix-server-mysql をしても /usr/share/doc/zabbix-server-mysql-3.0.* が作成されず、SQL のテンプレートがコピーされない問題があった。yum install --downloadonlyyumdownloader zabbix-server-mysqlRPM を落としてきて RPM でインストールするとインストールされる…謎。

とりあえず今のところはローカル再インストールで済ませてる。

# yumdownloader zabbix-server-mysql
# rpm -ivh --replacepkgs zabbix-server-mysql-3.0.*.rpm
# rm -f zabbix-server-mysql-3.0.*.rpm

最初から入れるなら依存関係先に入れないと RPM が怒る。

# yum install -y http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
# yum install -y `yum deplist zabbix-server-mysql | awk '/provider:/{ print $2 }' | grep -v zabbix-server-mysql | sort -u`
# yumdownloader zabbix-server-mysql
# rpm -ivh zabbix-server-mysql-3.0.*.rpm
# rm -f zabbix-server-mysql-3.0.*.rpm

それか RPM をぶちまけるか。

# rpm2cpio zabbix-server-mysql-3.0.* | cpio -idmv

mysqld_safe はバックグラウンドで動かせないし、かなり無理矢理だけどとりあえずモノは出来た。Dockerfile は Gist で作業中。

$ git clone https://gist.github.com/6c7b79b48c11eec3181fc252dd5afb5a.git docker-test
$ cd docker-test
$ docker pull centos:centos7
$ docker build .
$ docker run -ti --name zabbix -p 80:80 -p 10051:10051 ${IMAGE_ID}

systemd で動くやつ作ろうよ

systemctl start zabbix-server したいじゃん?

centos:centos7 イメージからベースになる temp コンテナを作って --privileged/sbin/init を実行させておく。

$ docker run -dti --privileged --name temp centos:centos7 /sbin/init

temp コンテナで /bin/bash を起動。

$ docker exec -ti temp /bin/bash

コンテナの中にスクリプトをぶち込む。

localedef -i ja_JP -f UTF-8 /usr/lib/locale/ja_JP.UTF-8
yum install -y http://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent mariadb-server
yumdownloader zabbix-server-mysql
rpm -ivh --replacepkgs zabbix-server-mysql-3.0.*.rpm
rm -f zabbix-server-mysql-3.0.*.rpm
systemctl start mariadb
systemctl enable mariadb
echo 'create database zabbix character set utf8 collate utf8_bin;' | mysql -uroot
echo 'grant all on zabbix.* to zabbix@localhost;' | mysql -uroot
zcat /usr/share/doc/zabbix-server-mysql-3.0.*/create.sql.gz | mysql -uzabbix zabbix
sed -i'' '/# php_value date\.timezone/{s|# ||;s|Europe/Riga|Asia/Tokyo|}' /etc/httpd/conf.d/zabbix.conf
systemctl start httpd
systemctl enable httpd
systemctl start zabbix-server
systemctl enable zabbix-server
systemctl start zabbix-agent
systemctl enable zabbix-agent
exit

temp コンテナから zabbix3.0 イメージを作成。サイズは約600MB。

$ docker commit temp zabbix3.0
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
zabbix3.0           latest              a3c42c570541        21 minutes ago      602.8 MB

temp コンテナを停止して削除。

$ docker stop temp
$ docker rm temp

run するときは --previleged を忘れずに。

$ docker run --privileged -d -p80:80 zabbix3.0 /sbin/init

これでいつでも Zabbix に会えるね!!!(特に嬉しくはない)

f:id:mattintosh4:20170716214352p:plain

会社内での説明用に撮ったもの。YouTubeエディタいいね。