Docker 覚えよーってことで Zabbix がすぐに使えるコンテナを作ることにした。
いまこんな状態。
つまりよく知らない。
Ubuntu に Docker を入れる
とりあえず Docker を使えるように。docker
というパッケージはすでに Mac ライクなドックを実現するためのパッケージで使われているので Docker は docker.io
というパッケージ。
$ sudo apt-get install docker.io
docker
グループに所属していないと毎回 sudo
することになるので usermod
か gpasswd
で自分を docker
グループに追加しておく。
$ sudo usermod -aG docker $UID
ここで一旦ログアウト。
イメージを入手する
docker images
でローカルのイメージを見てみる。当然まだ何もない。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE
docker search
で centos
にマッチするものを探してみる。デフォルトの表示件数は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 --downloadonly
か yumdownloader zabbix-server-mysql
で RPM を落としてきて 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 に会えるね!!!(特に嬉しくはない)
会社内での説明用に撮ったもの。YouTubeエディタいいね。