• kfei's avatar
    Gracefully shutdown services in Docker container · 9338c632
    kfei authored
    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 ...
    9338c632