#検証のためのサーバーをDockerで作りたい
ということでPlay with Dockerで遊んでみました!
●必要なもの
dockerアカウント
ブラウザ(Chrome推奨)
●作ったもの
https://hub.docker.com/r/tt15/centos-syslog
#Play with Docker操作
https://labs.play-with-docker.com
Play with DockerにDockerアカウントでログイン(Chrome推奨のよう)
+ ADD NEW INSTANCE を押すとDocker環境が立ち上がります
(IPアドレスは自動で振られ、インスタンス同士、インターネットへのpingは可能)
右側の画面でDockerコマンドを打ち、環境を構築していきます。
$ docker pull centos:centos7
centos7: Pulling from library/centos
ab5ef0e58194: Pull complete
Digest: sha256:4a701376d03f6b39b8c2a8f4a8e499441b0d567f9ab9d58e4991de4472fb813c
Status: Downloaded newer image for centos:centos7
docker.io/library/centos:centos7
docker pullでDocker Hub上にあるイメージをダウンロードできます。
*メモ
”公開しているユーザー”:”タグと呼ばれるバージョンのようなもの”という感じです。
▼▼▼▼▼▼▼▼▼
$ docker run -it -d --privileged --name centos -p 514:514/udp centos:centos7 /sbin/init
484bc681a2d879c94ecabc8401756fee3828f5d16c9ed8dfffb3937d91506100
docker runでpullしたイメージを立ち上げます。ちなみに、docker psで今起動しているイメージが確認できます。
*メモ
-itはttyのため
-dを入れないと次のプロンプトが出てこない
--privilegedはsudo的なもの
--nameでわかりやすい名前をつけておかないとランダムでつけられる
-pでsyslogに使うポートを開けておく
pullしたイメージを引数として
/sbin/initを実行する、これをしないと後で使うsystemctlコマンドが使えなかった
▼▼▼▼▼▼▼▼▼
$ docker exec -it centos /bin/bash
[root@484bc681a2d8 /]#
docker execでrunしているイメージ上のコマンドを実行できる。
*メモ
-itでttyを使って対話的な処理が可能、ということだと思う。。
/bin/bashでlsとかcatとか打てますよね。
ちなみにCtrl+Cでdocker側に戻れます。
#CentOS操作
[root@484bc681a2d8 /]# yum -y install rsyslog
[root@484bc681a2d8 /]# yum -y install net-tools
それぞれ実行後にドバドバとダウンロードの様子が出ます。
syslogdに必要なパッケージをインストール。
CentOSのネットワーク情報を表示するコマンドのパッケージもインストール。後の動作確認で利用。
あとはrsyslogの設定を最小限して完成です。
*メモ
net-toolsは廃止予定らしく非推奨とのこと。代替コマンドのssが使えなかったしnetstatが慣れているので利用しました。
#rsyslog.conf操作
[root@484bc681a2d8 /]# vi /etc/rsyslog.conf
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
rsyslogをインストールしたのでrsyslog.confがあるはず。
全ての設定が#でコメントアウトされているので上の4箇所の部分の#を削除。
vi的にはxでカーソル右隣の文字を削除できます。
保存はexcキーの後、:を押して、wq!を入力。
▼▼▼▼▼▼▼▼▼
[root@484bc681a2d8 /]# systemctl restart rsyslog
[root@484bc681a2d8 /]# netstat -antup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 879/rsyslogd
tcp6 0 0 :::514 :::* LISTEN 879/rsyslogd
udp 0 0 0.0.0.0:514 0.0.0.0:* 879/rsyslogd
udp6 0 0 :::514 :::* 879/rsyslogd
rsyslogを再起動すると、変更したrsyslog.confが読み込まれる。
netstat -antupでTCP、UDPの接続状況が表示できる。ポート514でrsyslogが起動していることがわかる。
*メモ
-antupは-a,-n,,,それぞれのオプションをくっつけて書いたもの。
-aは全て
-nは数字での表示
-tはTCP
-uはUDP
-pはプロセスIDの表示
これでrsyslogの受信側は準備完了!
#検証
ここまでと同じ流れでもう1つ**+ ADD NEW INSTANCE**して、rsyslogを立ち上げる。
送信側を立ち上げる時に違うのはrsyslog.confの設定部分のみ!
[root@484bc681a2d8 /]# vi /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none* @192.168.0.1:514
*.info;mail.none;authpriv.none;cron.none* @@192.168.0.1:514
rsyslog.confの一番最後にこの二行を追加。
IPアドレスは実環境のものに変更するのを忘れずに。
あとは、設定後のrestartも!
*メモ
@がUDP、@@がTCPって雑だなぁ。。
▼▼▼▼▼▼▼▼▼
[root@484bc681a2d8 /]# logger
test1
test2
test3
送信側にて、loggerコマンドでlogを送りつけられるようです。
受信側の/var/log/messagesに送られるので見てみましょう。
[root@484bc681a2d8 /]# tail /var/log/messages
Mar 15 07:05:43 484bc681a2d8 root: test1
Mar 15 07:05:45 484bc681a2d8 root: test2
Mar 15 07:05:46 484bc681a2d8 root: test3
tailはテキストファイルの最終行から表示するコマンド。
ちゃんと送れてる!!
#感想
Play with Dockerを使うと送信側、受信側がサクッと作れるので楽でした!
ブラウザだけで完結するのもありがたい。
4時間が過ぎてもDocker Hub上に作ったイメージをpushしておけばどこからでもdocker pullできます。(docker login, docker tag, docker pushでいけます)