From 71e6871737bebbb7164f1c0853120cd209428259 Mon Sep 17 00:00:00 2001 From: Jozef Vaclavik Date: Fri, 20 Mar 2015 20:03:14 +0100 Subject: Separate Dockerfile for Data and Application --- docker/Dockerfile | 4 ---- docker/README.md | 38 +++++++++++++++++++++++++++++--------- docker/assets/gitlab.rb | 37 ------------------------------------- docker/data/Dockerfile | 8 ++++++++ docker/data/assets/gitlab.rb | 37 +++++++++++++++++++++++++++++++++++++ 5 files changed, 74 insertions(+), 50 deletions(-) delete mode 100644 docker/assets/gitlab.rb create mode 100644 docker/data/Dockerfile create mode 100644 docker/data/assets/gitlab.rb diff --git a/docker/Dockerfile b/docker/Dockerfile index 4eb280f9554..6c351f727ff 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -26,11 +26,7 @@ RUN mkdir -p /opt/gitlab/sv/sshd/supervise \ # Expose web & ssh EXPOSE 80 22 -# Declare volumes -VOLUME ["/var/opt/gitlab", "/var/log/gitlab", "/etc/gitlab"] - # Copy assets -COPY assets/gitlab.rb /etc/gitlab/ COPY assets/wrapper /usr/local/bin/ # Wrapper to handle signal, trigger runit and reconfigure GitLab diff --git a/docker/README.md b/docker/README.md index 58982a238a8..b7e8b0db7e7 100644 --- a/docker/README.md +++ b/docker/README.md @@ -8,14 +8,15 @@ GitLab offers git repository management, code reviews, issue tracking, activity ![GitLab Logo](https://gitlab.com/uploads/appearance/logo/1/brand_logo-c37eb221b456bb4b472cc1084480991f.png) -How to use this image +How to use these images ====================== -At this moment GitLab doesn't have official Docker images. -Build your own based on the Omnibus packages with the following command (it assumes you're in the GitLab repo root directory): +At this moment GitLab doesn't have official Docker images. For convinience we will use suffix _xy where xy is current version of GitLab. +Build your own based on the Omnibus packages with the following commands (it assumes you're in the GitLab repo root directory): ```bash -sudo docker build --tag gitlab_image docker/ +sudo docker build --tag gitlab_data_image docker/data/ +sudo docker build --tag gitlab_app_image_xy docker/ ``` We assume using a data volume container, this will simplify migrations and backups. @@ -30,16 +31,16 @@ The directories on data container are: Create the data container with: ```bash -sudo docker run --name gitlab_data gitlab_image /bin/true +sudo docker run --name gitlab_data gitlab_data_image /bin/true ``` -After creating this run GitLab: +After creating data container run GitLab container: ```bash -sudo docker run --detach --name gitlab_app --publish 8080:80 --publish 2222:22 --volumes-from gitlab_data gitlab_image +sudo docker run --detach --name gitlab_app_xy --publish 8080:80 --publish 2222:22 --volumes-from gitlab_data gitlab_app_image_xy ``` -It might take a while before the docker container is responding to queries. You can follow the configuration process with `docker logs -f gitlab_app`. +It might take a while before the docker container is responding to queries. You can follow the configuration process with `sudo docker logs -f gitlab_app_xy`. You can then go to `http://localhost:8080/` (or `http://192.168.59.103:8080/` if you use boot2docker). You can login with username `root` and password `5iveL!fe`. @@ -54,7 +55,7 @@ This container uses the official Omnibus GitLab distribution, so all configurati To access GitLab configuration, you can start an interactive command line in a new container using the shared data volume container, you will be able to browse the 3 directories and use your favorite text editor: ```bash -docker run -ti -e TERM=linux --rm --volumes-from gitlab_data ubuntu +sudo docker run -ti -e TERM=linux --rm --volumes-from gitlab_data ubuntu vi /etc/gitlab/gitlab.rb ``` @@ -62,6 +63,25 @@ vi /etc/gitlab/gitlab.rb You can find all available options in [Omnibus GitLab documentation](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#configuration). +How to upgrade GitLab +======================== + +To updgrade GitLab to new versions, stop running container, create new docker image and container from that image. + +It Assumes that you're upgrading from 7.8 to 7.9 and you're in the updated GitLab repo root directory: + +```bash +sudo docker stop gitlab_app_78 +sudo docker build --tag gitlab_app_image_79 docker/ +sudo docker run --detach --name gitlab_app_79 --publish 8080:80 --publish 2222:22 --volumes-from gitlab_data gitlab_app_image_79 +``` + +On the first run GitLab will reconfigure and update itself. If everything runs OK don't forget to cleanup old container and image: + +```bash +sudo docker rm gitlab_app_78 +sudo docker rmi gitlab_app_image_78 +``` Troubleshooting ========================= diff --git a/docker/assets/gitlab.rb b/docker/assets/gitlab.rb deleted file mode 100644 index 7fddf309c01..00000000000 --- a/docker/assets/gitlab.rb +++ /dev/null @@ -1,37 +0,0 @@ -# External URL should be your Docker instance. -# By default, this example is the "standard" boot2docker IP. -# Always use port 80 here to force the internal nginx to bind port 80, -# even if you intend to use another port in Docker. -external_url "http://192.168.59.103/" - -# Prevent Postgres from trying to allocate 25% of total memory -postgresql['shared_buffers'] = '1MB' - -# Configure GitLab to redirect PostgreSQL logs to the data volume -postgresql['log_directory'] = '/var/log/gitlab/postgresql' - -# Some configuration of GitLab -# You can find more at https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#configuration -gitlab_rails['gitlab_email_from'] = 'gitlab@example.com' -gitlab_rails['gitlab_support_email'] = 'support@example.com' -gitlab_rails['time_zone'] = 'Europe/Paris' - -# SMTP settings -# You must use an external server, the Docker container does not install an SMTP server -gitlab_rails['smtp_enable'] = true -gitlab_rails['smtp_address'] = "smtp.example.com" -gitlab_rails['smtp_port'] = 587 -gitlab_rails['smtp_user_name'] = "user" -gitlab_rails['smtp_password'] = "password" -gitlab_rails['smtp_domain'] = "example.com" -gitlab_rails['smtp_authentication'] = "plain" -gitlab_rails['smtp_enable_starttls_auto'] = true - -# Enable LDAP authentication -# gitlab_rails['ldap_enabled'] = true -# gitlab_rails['ldap_host'] = 'ldap.example.com' -# gitlab_rails['ldap_port'] = 389 -# gitlab_rails['ldap_method'] = 'plain' # 'ssl' or 'plain' -# gitlab_rails['ldap_allow_username_or_email_login'] = false -# gitlab_rails['ldap_uid'] = 'uid' -# gitlab_rails['ldap_base'] = 'ou=users,dc=example,dc=com' diff --git a/docker/data/Dockerfile b/docker/data/Dockerfile new file mode 100644 index 00000000000..ea0175c4aa2 --- /dev/null +++ b/docker/data/Dockerfile @@ -0,0 +1,8 @@ +FROM busybox + +# Declare volumes +VOLUME ["/var/opt/gitlab", "/var/log/gitlab", "/etc/gitlab"] +# Copy assets +COPY assets/gitlab.rb /etc/gitlab/ + +CMD /bin/sh diff --git a/docker/data/assets/gitlab.rb b/docker/data/assets/gitlab.rb new file mode 100644 index 00000000000..7fddf309c01 --- /dev/null +++ b/docker/data/assets/gitlab.rb @@ -0,0 +1,37 @@ +# External URL should be your Docker instance. +# By default, this example is the "standard" boot2docker IP. +# Always use port 80 here to force the internal nginx to bind port 80, +# even if you intend to use another port in Docker. +external_url "http://192.168.59.103/" + +# Prevent Postgres from trying to allocate 25% of total memory +postgresql['shared_buffers'] = '1MB' + +# Configure GitLab to redirect PostgreSQL logs to the data volume +postgresql['log_directory'] = '/var/log/gitlab/postgresql' + +# Some configuration of GitLab +# You can find more at https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#configuration +gitlab_rails['gitlab_email_from'] = 'gitlab@example.com' +gitlab_rails['gitlab_support_email'] = 'support@example.com' +gitlab_rails['time_zone'] = 'Europe/Paris' + +# SMTP settings +# You must use an external server, the Docker container does not install an SMTP server +gitlab_rails['smtp_enable'] = true +gitlab_rails['smtp_address'] = "smtp.example.com" +gitlab_rails['smtp_port'] = 587 +gitlab_rails['smtp_user_name'] = "user" +gitlab_rails['smtp_password'] = "password" +gitlab_rails['smtp_domain'] = "example.com" +gitlab_rails['smtp_authentication'] = "plain" +gitlab_rails['smtp_enable_starttls_auto'] = true + +# Enable LDAP authentication +# gitlab_rails['ldap_enabled'] = true +# gitlab_rails['ldap_host'] = 'ldap.example.com' +# gitlab_rails['ldap_port'] = 389 +# gitlab_rails['ldap_method'] = 'plain' # 'ssl' or 'plain' +# gitlab_rails['ldap_allow_username_or_email_login'] = false +# gitlab_rails['ldap_uid'] = 'uid' +# gitlab_rails['ldap_base'] = 'ou=users,dc=example,dc=com' -- cgit v1.2.1