LoginSignup
19

More than 5 years have passed since last update.

dockerでWebサイトを集約してみた一事例(CentOS7編)

Posted at

昨年、「dockerでWebサイトを集約してみた一事例」というのを書いたんだけど、同じようなことをCentOS7でやったので、前の記事のアップデートと、自分の備忘を兼ねて、書いておく。

最初に

「dockerでWebサイトを集約してみた一事例」でやったことを、CentOS7でやった。スクリプトがやっつけなので、dockerのバージョンアップで具合が悪くなってたとこもあるので、細かく修正もした。

逃れえぬ運命、Systemd

「UbuntuLTSで遊んでりゃいいや」と思っていたが、転職したので「CentOSですよね」みたいな感じになった。そして立ちはだかるCentOS7。CentOSを普段使いしてた人たちからさえ悲鳴が上がるという状況で、この老害生き残れるのか?と思ったけど、普段使いしてなかったせいか、いろんなことをきれいさっぱり忘れていて、素直に受け止められた。

Ubuntuの事例では、upstartのスクリプト書いてゴニョってたけど、今回はその部分がSystemdのサービス登録になる。

/etc/systemd/system/docker-containers-restart.service
[Unit]
Description=DockerContainersRestart
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/root/docker-containers-restart.sh

[Install]
WantedBy=multi-user.target
/root/docker-containers-restart.sh
#!/bin/bash
cat /etc/hosts | grep -v 172.17. > /tmp/hostsbase
docker start $(docker ps -a -q)
docker inspect $(docker ps -q) | grep '"IPAddress":' | tr -d "[:alpha:][:blank:]:,\"" > /tmp/list1
docker inspect $(docker ps -q) | grep '"Name": "/' | sed -e "s/    \"Name\": \"\///g" | tr -d ",\"" > /tmp/list2
paste -d " " /tmp/list1 /tmp/list2 >> /tmp/hostsbase
mv /tmp/hostsbase /etc/hosts

「grep '"IPAddress":'」のとこは前回から修正した。dockerのバージョンアップでinspectの結果が変化してたっぽく、知らん間に動かなくなってたので。ほんとは、ちゃんとパースするべきなんだろうけど。
依存関係の記述については、/usr/lib/systemd/system/nginx.serviceのものをコピーしている。その上で、/usr/lib/systemd/system/nginx.serviceをコピーして、依存関係だけ修正した、

/etc/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=docker-containers-restart.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

を作った。要点は、nginxを起動する用意ができたら、nginxを起動する前に、コンテナのリスタートと、/etc/hostsの修正をやってしまうというところ。ここはUbuntuの時、スタートアップ機構が並存してて、nginxの起動タイミングを制御できなくて不完全だった機構が、Systemdに統一された環境のおかげで、きれいに作れた。

Systemd、良いかも知んない。

定期バックアップ

daily.sh
#!/bin/bash

CONTAINERS=(`docker inspect $(docker ps -q) | grep '"Name": "/' | sed -e "s/    \"Name\": \"\///g" | tr -d ",\""`)

IMAGES=(`docker inspect $(docker ps -q) | grep '        "Image": "' | sed -e "s/        \"Image\": \"//g" | tr -d ",\"" | sed -e "s/:.*//g"`)

VERSION=(`env LANG=en_US.UTF-8 date +%a`)
if [ "`date +%d`" = "01" ] ; then
  VERSION=(`env LANG=en_US.UTF-8 date +%b`)
fi

for (( i = 0; i < ${#CONTAINERS[@]}; ++i ))
do
    docker commit ${CONTAINERS[$i]} ${IMAGES[$i]}:$VERSION
done

docker rmi $(docker images | awk '/^<none>/ { print $3 }')

grepのとことか、dateのロケールとか、ちょっと修正した。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19