commit
1491dbfe86
@ -0,0 +1,55 @@
|
|||||||
|
FROM centos:7
|
||||||
|
MAINTAINER Andrey Arapov <andrey.arapov@nixaid.com>
|
||||||
|
|
||||||
|
WORKDIR /root
|
||||||
|
|
||||||
|
RUN yum -y update && \
|
||||||
|
yum -y install make gcc glibc-static
|
||||||
|
|
||||||
|
# Compile runit
|
||||||
|
# Deps: glibc-static
|
||||||
|
ENV RUNIT_NAME "runit-2.1.2"
|
||||||
|
ENV RUNIT_HASH "6fd0160cb0cf1207de4e66754b6d39750cff14bb0aa66ab49490992c0c47ba18"
|
||||||
|
|
||||||
|
RUN pushd /opt && \
|
||||||
|
curl -#L -o $RUNIT_NAME.tar.gz http://smarden.org/runit/$RUNIT_NAME.tar.gz && \
|
||||||
|
sha256sum $RUNIT_NAME.tar.gz |grep -qw $RUNIT_HASH && \
|
||||||
|
tar xf $RUNIT_NAME.tar.gz && \
|
||||||
|
rm -f $RUNIT_NAME.tar.gz && \
|
||||||
|
pushd admin/$RUNIT_NAME && \
|
||||||
|
find . -xdev -type f -name "fmt_ptime.c" -exec sed -i.orig 's;gmtime;localtime;g' '{}' \; && \
|
||||||
|
package/install && \
|
||||||
|
package/install-man
|
||||||
|
|
||||||
|
|
||||||
|
# Compile socklog
|
||||||
|
ENV SOCKLOG_NAME "socklog-2.1.0"
|
||||||
|
ENV SOCKLOG_HASH "aa869a787ee004da4e5509b5a0031bcc17a4ab4ac650c2ce8d4e488123acb455"
|
||||||
|
|
||||||
|
RUN pushd /opt && \
|
||||||
|
curl -#L -o $SOCKLOG_NAME.tar.gz http://smarden.org/socklog/$SOCKLOG_NAME.tar.gz && \
|
||||||
|
sha256sum $SOCKLOG_NAME.tar.gz |grep -qw $SOCKLOG_HASH && \
|
||||||
|
tar xf $SOCKLOG_NAME.tar.gz && \
|
||||||
|
rm -f $SOCKLOG_NAME.tar.gz && \
|
||||||
|
pushd admin/$SOCKLOG_NAME && \
|
||||||
|
package/install && \
|
||||||
|
package/install-man
|
||||||
|
|
||||||
|
|
||||||
|
# runit-docker - painlessly use Runit in Docker containers
|
||||||
|
RUN curl -#L -o runit-docker.tar.gz https://github.com/pixers/runit-docker/archive/master.tar.gz && \
|
||||||
|
tar xf runit-docker.tar.gz && \
|
||||||
|
cd runit-docker-master/ && \
|
||||||
|
make && \
|
||||||
|
make install && \
|
||||||
|
sed -i 's;runsvdir;runsvdir -P;g' /sbin/runit-docker
|
||||||
|
|
||||||
|
ENV TZ "Europe/Amsterdam"
|
||||||
|
# RUN ln -svf /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime
|
||||||
|
|
||||||
|
COPY service /etc/service/
|
||||||
|
RUN chmod +x -- /etc/service/*/run /etc/service/*/log/run
|
||||||
|
|
||||||
|
ENTRYPOINT ["/sbin/runit-docker"]
|
||||||
|
VOLUME ["/var/log/fakeapp1", \
|
||||||
|
"/var/log/fakeapp2"]
|
@ -0,0 +1,52 @@
|
|||||||
|
## show runit
|
||||||
|
|
||||||
|
This container is to show how one can use runit, svlogd and socklog in order to log the service activity.
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
$ docker run --rm -ti --name runit show-runit
|
||||||
|
/etc/service/showlog/run started
|
||||||
|
/etc/service/fakeapp3/log/run started
|
||||||
|
/etc/service/fakeapp2/log/run started
|
||||||
|
/etc/service/fakeapp1/log/run started
|
||||||
|
listening on /dev/log, gid=99, uid=99, starting.
|
||||||
|
2016-07-16_16:42:49.78418 [stdout] /etc/service/fakeapp1/fakeapp1.sh test: 1 ...
|
||||||
|
2016-07-16_16:42:51.77754 [stdout] /etc/service/fakeapp1/fakeapp1.sh test: 2 ...
|
||||||
|
2016-07-16_16:42:49.78307 [stdout] /etc/service/fakeapp2/fakeapp2.sh test: 1 ...
|
||||||
|
2016-07-16_16:42:49.78490 user.notice: Jul 16 16:42:49 /etc/service/fakeapp3/fakeapp3.sh: test: 1 ...
|
||||||
|
2016-07-16_16:42:51.78458 [stdout] /etc/service/fakeapp2/fakeapp2.sh test: 2 ...
|
||||||
|
2016-07-16_16:42:51.78676 user.notice: Jul 16 16:42:51 /etc/service/fakeapp3/fakeapp3.sh: test: 2 ...
|
||||||
|
2016-07-16_16:42:53.77904 [stdout] /etc/service/fakeapp1/fakeapp1.sh test: 3 ...
|
||||||
|
2016-07-16_16:42:53.78588 [stdout] /etc/service/fakeapp2/fakeapp2.sh test: 3 ...
|
||||||
|
2016-07-16_16:42:53.78935 user.notice: Jul 16 16:42:53 /etc/service/fakeapp3/fakeapp3.sh: test: 3 ...
|
||||||
|
2016-07-16_16:42:55.78062 [stdout] /etc/service/fakeapp1/fakeapp1.sh test: 4 ...
|
||||||
|
2016-07-16_16:42:55.78736 [stdout] /etc/service/fakeapp2/fakeapp2.sh test: 4 ...
|
||||||
|
2016-07-16_16:42:55.79176 user.notice: Jul 16 16:42:55 /etc/service/fakeapp3/fakeapp3.sh: test: 4 ...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Build
|
||||||
|
|
||||||
|
```
|
||||||
|
docker build --ulimit nofile=1024:2048 -t show-runit .
|
||||||
|
```
|
||||||
|
|
||||||
|
## Use
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run --rm -ti --name runit show-runit
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -d -ti --name runit show-runit
|
||||||
|
docker logs -f runit
|
||||||
|
docker stop runit
|
||||||
|
docker start runit
|
||||||
|
```
|
||||||
|
|
||||||
|
```
|
||||||
|
docker exec -ti runit bash
|
||||||
|
sv status /etc/service/*
|
||||||
|
sv stop /etc/service/fakeapp1
|
||||||
|
sv start /etc/service/fakeapp1
|
||||||
|
ls -la /var/log/fakeapp*
|
||||||
|
```
|
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# fake app that logs something
|
||||||
|
|
||||||
|
c=1
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
# stdout log
|
||||||
|
echo "[stdout] $0 test: $c ..."
|
||||||
|
|
||||||
|
# logger writes to syslog (/dev/log)
|
||||||
|
# logger -t $0 "test: $c ..."
|
||||||
|
|
||||||
|
c=$(($c+1))
|
||||||
|
sleep 2
|
||||||
|
done
|
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# file: fakeapp1/log/run
|
||||||
|
|
||||||
|
# Collect all logs which come to stdout from the app
|
||||||
|
exec 2>&1
|
||||||
|
echo $(realpath $0) started
|
||||||
|
|
||||||
|
mkdir /var/log/fakeapp1 2>/dev/null
|
||||||
|
exec svlogd -tt /var/log/fakeapp1
|
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
#exec sh -c "while true; do echo $0; sleep 1; done"
|
||||||
|
exec ./fakeapp1.sh
|
@ -0,0 +1,16 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# fake app that logs something
|
||||||
|
|
||||||
|
c=1
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
# stdout log
|
||||||
|
echo "[stdout] $0 test: $c ..."
|
||||||
|
|
||||||
|
# logger writes to syslog (/dev/log)
|
||||||
|
# logger -t $0 "test: $c ..."
|
||||||
|
|
||||||
|
c=$(($c+1))
|
||||||
|
sleep 2
|
||||||
|
done
|
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# file: fakeapp2/log/run
|
||||||
|
|
||||||
|
# Collect all logs which come to stdout from the app
|
||||||
|
exec 2>&1
|
||||||
|
echo $(realpath $0) started
|
||||||
|
|
||||||
|
mkdir /var/log/fakeapp2 2>/dev/null
|
||||||
|
exec svlogd -tt /var/log/fakeapp2
|
@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
#exec sh -c "while true; do echo $0; sleep 1; done"
|
||||||
|
exec ./fakeapp2.sh
|
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# fake app that logs something
|
||||||
|
|
||||||
|
c=1
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
# logger writes to syslog (/dev/log)
|
||||||
|
logger -t $0 "test: $c ..."
|
||||||
|
|
||||||
|
c=$(($c+1))
|
||||||
|
sleep 2
|
||||||
|
done
|
@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# file: fakeapp3/log/run
|
||||||
|
|
||||||
|
# Collect all logs which come to /dev/log (syslog) from the app
|
||||||
|
exec 2>&1
|
||||||
|
echo $(realpath $0) started
|
||||||
|
|
||||||
|
mkdir /var/log/fakeapp3 2>/dev/null
|
||||||
|
|
||||||
|
# savelog -n -c 7 /var/log/fakeapp3/current
|
||||||
|
# exec sh -c "chpst -Unobody socklog unix /dev/log | tee -a /var/log/fakeapp3/current"
|
||||||
|
|
||||||
|
exec sh -c "chpst -Unobody socklog unix /dev/log | svlogd -tt /var/log/fakeapp3"
|
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec 2>&1
|
||||||
|
|
||||||
|
exec ./fakeapp3.sh
|
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# file: showlog/run
|
||||||
|
|
||||||
|
# Make the logs visible on `docker logs` command
|
||||||
|
exec 2>&1
|
||||||
|
echo $(realpath $0) started
|
||||||
|
|
||||||
|
# A little timeout is required, since svlogd moves current log to an archive,
|
||||||
|
# and only after that it starts logging to the "new" current log.
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
exec tail -fq /var/log/fakeapp*/current 2>/dev/null
|
Loading…
Reference in new issue