The problem is `docker stop` only sends SIGTERM to the PID 1 inside the
container, and the PID 1 (`/bin/sh -c ...`) does not take care of
signals. Hence the services (e.g., postgresql, redis, sidekiq, etc)
never have chances to graceful shutdown. Docker just kills the container
after its 10 seconds timeout by default.
What this commit does:
1) Add a wrapper as the default executable of Docker container. Which
starts services through `runit`, reconfigure Gitlab by `gitlab-ctl`
and gracefully shutdown all services when a SIGTERM is received.
2) Create an `assets` directory for assets.
3) Add `.dockerignore` file.
Now you'll see the following log messages after `docker stop`:
```
SIGTERM signal received, try to gracefully shutdown all services...
ok: down: logrotate: 1s, normally up
ok: down: nginx: 0s, normally up
ok: down: postgresql: 1s, normally up
ok: down: redis: 0s, normally up
ok: down: sidekiq: 0s, normally up
ok: down: unicorn: 0s, normally up
```
Signed-off-by: kfei <kfei@kfei.net>
1) Add `--no-install-recommends` option to `apt-get install`, this
avoids lots of (~30MB) unnecessary packages.
2) Add `ca-certificates` package for `wget` fetching stuffs from Amazon
S3.
3) There is no need to run `apt-get clean` for an image derived from
official Ubuntu since they already cleaned (see also:
http://goo.gl/B2SQRB) all the garbages produced by `apt-get`.
Signed-off-by: kfei <kfei@kfei.net>