diff options
author | Sytse Sijbrandij <sytse@gitlab.com> | 2015-05-06 17:40:02 +0300 |
---|---|---|
committer | Sytse Sijbrandij <sytse@gitlab.com> | 2015-05-06 17:40:02 +0300 |
commit | 48f22a39e7275551c35cc84d11caf5df1a581e0e (patch) | |
tree | 1c312d4c99b5f7f673d69bf60e22298b3989eb62 | |
parent | 3f2282300d9c97e8c0c1df955bdd13d7ee1dc96e (diff) | |
parent | 6518c728acca65732f89a22a5cbbb75fe3f238f6 (diff) |
Merge branch 'single-docker-image' into 'master'
Single docker image
See merge request !1805
-rw-r--r-- | docker/README.md | 112 | ||||
-rw-r--r-- | docker/app/Dockerfile (renamed from docker/Dockerfile) | 0 | ||||
-rwxr-xr-x | docker/app/assets/wrapper (renamed from docker/assets/wrapper) | 0 | ||||
-rw-r--r-- | docker/single/Dockerfile | 35 | ||||
-rwxr-xr-x | docker/single/assets/wrapper | 16 | ||||
-rw-r--r-- | docker/single/marathon.json | 31 | ||||
-rw-r--r-- | docker/troubleshooting.md | 10 |
7 files changed, 173 insertions, 31 deletions
diff --git a/docker/README.md b/docker/README.md index a54739ae3d3..537855624a6 100644 --- a/docker/README.md +++ b/docker/README.md @@ -5,21 +5,72 @@ GitLab offers git repository management, code reviews, issue tracking, activity Learn more on [https://about.gitlab.com](https://about.gitlab.com) +Single and app and data images +=================== -How to build and use images yourself +Normally docker uses a single image for one applications. +But GitLab stores repositories and uploads in the filesystem. +This means that upgrades of a single image are hard. +That is why we recommend using separate app and data images. +We'll first describe how to use a single image. +After that we'll describe how to use the app and data images. + +Single image +================= + +Run the below commands from the GitLab repo root directory. +People using boot2docker should run the commands without sudo. + +Build the image with: + +``` +sudo docker build --tag gitlab-ce docker/single/ +``` + +Run the image with: + +``` +sudo docker run --detach --name gitlab-ce --publish 8080:80 --publish 2222:22 gitlab-ce +``` + +You can then go to [http://localhost:8080/](http://localhost:8080/) or [http://192.168.59.103:8080/](http://192.168.59.103:8080/) if you use boot2docker. + +You can login with username `root` and password `5iveL!fe`. +Next time, you can just use `sudo docker start gitlab-ce` and `sudo docker stop gitlab-ce`. + +Publish the image with: + +```bash +sudo docker commit -m "Initial commit" -a "Sytse Sijbrandij" gitlab-ce sytse/gitlab-ce:7.10.1 +sudo docker push sytse/gitlab-ce:7.10.1 +``` + +Use the published image with: + +```bash +sudo docker pull sytse/gitlab-ce:7.10.1 +sudo docker run --detach --name gitlab-ce --publish 8080:80 --publish 2222:22 sytse/gitlab-ce:7.10.1 +``` + +Troubleshoot with: + +``` +sudo docker run -ti -e TERM=linux --name gitlab-ce-troubleshoot --publish 8080:80 --publish 2222:22 sytse/gitlab-ce:7.10.1 bash /usr/local/bin/wrapper +``` + +Build and use app and data images ====================== At this moment GitLab doesn't have official Docker images. There are unofficial images at the bottom of this document. -But in this section we'll build our own. -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. -Run these from the GitLab repo root directory. -People using boot2docker should run it without sudo. +For convinience we will use suffix _xy where xy is current version of GitLab. +Run the below commands from the GitLab repo root directory. +People using boot2docker should run the commands without sudo. ```bash -sudo docker build --tag gitlab_data_image docker/data/ -sudo docker build --tag gitlab_app_image_xy docker/ +sudo docker build --tag gitlab-data docker/data/ +sudo docker build --tag gitlab-app:7.10.1 docker/app/ ``` We assume using a data volume container, this will simplify migrations and backups. @@ -34,13 +85,13 @@ The directories on data container are: Create the data container with: ```bash -sudo docker run --name gitlab_data gitlab_data_image /bin/true +sudo docker run --name gitlab-data gitlab-data /bin/true ``` After creating data container run GitLab container: ```bash -sudo docker run --detach --name gitlab_app_xy --publish 8080:80 --publish 2222:22 --volumes-from gitlab_data gitlab_app_image_xy +sudo docker run --detach --name gitlab-app::7.10.1 --publish 8080:80 --publish 2222:22 --volumes-from gitlab-data gitlab-app:7.10.1 ``` 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`. @@ -50,7 +101,7 @@ You can then go to [http://localhost:8080/](http://localhost:8080/) or [http://1 You can login with username `root` and password `5iveL!fe`. Next time, you can just use `sudo docker start gitlab_app` and `sudo docker stop gitlab_app`. -How to configure GitLab +Configure GitLab ======================== This container uses the official Omnibus GitLab distribution, so all configuration is done in the unique configuration file `/etc/gitlab/gitlab.rb`. @@ -58,7 +109,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 -sudo 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 ``` @@ -66,7 +117,7 @@ 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 +Upgrade GitLab with app and data images ======================== To updgrade GitLab to new versions, stop running container, create new docker image and container from that image. @@ -74,41 +125,40 @@ To updgrade GitLab to new versions, stop running container, create new docker im 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 +sudo docker stop gitlab-app +sudo docker rm gitlab-app +sudo docker build --tag gitlab-app:7.10.1 docker/app/ +sudo docker run --detach --name gitlab-app --publish 8080:80 --publish 2222:22 --volumes-from gitlab_data gitlab-app:7.10.1 ``` -On the first run GitLab will reconfigure and update itself. If everything runs OK don't forget to cleanup old container and image: +On the first run GitLab will reconfigure and update itself. If everything runs OK don't forget to cleanup image: ```bash -sudo docker rm gitlab_app_78 -sudo docker rmi gitlab_app_image_78 +sudo docker rmi gitlab-app:7.8.1 ``` -Troubleshooting -========================= -Please see the [troubleshooting](troubleshooting.md) file in this directory. - - -Publish the images to Dockerhub +Publish app and data images to Dockerhub ========================= Login to Dockerhub with `sudo docker login` and run the following (replace '7.9.2' with the version you're using and 'Sytse Sijbrandij' with your name): ```bash -sudo docker commit -m "Initial commit" -a "Sytse Sijbrandij" gitlab_app_xy sytse/gitlab-ce:7.9.2 -sudo docker push sytse/gitlab-ce:7.9.2 +sudo docker commit -m "Initial commit" -a "Sytse Sijbrandij" gitlab-app:7.10.1 sytse/gitlab-app:7.10.1 +sudo docker push sytse/gitlab-app:7.10.1 sudo docker commit -m "Initial commit" -a "Sytse Sijbrandij" gitlab_data sytse/gitlab_data sudo docker push sytse/gitlab_data ``` -Use images published to Dockerhub +Use app and data images published to Dockerhub ================================ This examples uses the unofficial images made by GitLab CEO Sytse. ```bash -sudo docker pull sytse/gitlab_data -sudo docker pull sytse/gitlab-ce:7.9.2 -sudo docker run --name gitlab_data_volume sytse/gitlab_data /bin/true -sudo docker run --detach --name gitlab_app_7_9_2 --publish 8080:80 --publish 2222:22 --volumes-from gitlab_data_volume sytse/gitlab-ce:7.9.2 +sudo docker pull sytse/gitlab-data +sudo docker pull sytse/gitlab-app:7.10.1 +sudo docker run --name gitlab-data sytse/gitlab-data /bin/true +sudo docker run --detach --name gitlab_app --publish 8080:80 --publish 2222:22 --volumes-from gitlab_data sytse/gitlab-app:7.10.1 ``` + +Troubleshooting +========================= +Please see the [troubleshooting](troubleshooting.md) file in this directory. diff --git a/docker/Dockerfile b/docker/app/Dockerfile index df828a2a349..df828a2a349 100644 --- a/docker/Dockerfile +++ b/docker/app/Dockerfile diff --git a/docker/assets/wrapper b/docker/app/assets/wrapper index 9e6e7a05903..9e6e7a05903 100755 --- a/docker/assets/wrapper +++ b/docker/app/assets/wrapper diff --git a/docker/single/Dockerfile b/docker/single/Dockerfile new file mode 100644 index 00000000000..8cdc24cf045 --- /dev/null +++ b/docker/single/Dockerfile @@ -0,0 +1,35 @@ +FROM ubuntu:14.04 +MAINTAINER Sytse Sijbrandij + +# Install required packages +RUN apt-get update +ENV DEBIAN_FRONTEND noninteractive +RUN apt-get install -yq --no-install-recommends \ + ca-certificates \ + openssh-server \ + wget + +# Download & Install GitLab +# If the Omnibus package version below is outdated please contribute a merge request to update it. +# If you run GitLab Enterprise Edition point it to a location where you have downloaded it. +RUN TMP_FILE=$(mktemp); \ + wget -q -O $TMP_FILE https://downloads-packages.s3.amazonaws.com/ubuntu-14.04/gitlab-ce_7.10.1~omnibus.2-1_amd64.deb \ + && dpkg -i $TMP_FILE \ + && rm -f $TMP_FILE + +# Manage SSHD through runit +RUN mkdir -p /opt/gitlab/sv/sshd/supervise \ + && mkfifo /opt/gitlab/sv/sshd/supervise/ok \ + && printf "#!/bin/sh\nexec 2>&1\numask 077\nexec /usr/sbin/sshd -D" > /opt/gitlab/sv/sshd/run \ + && chmod a+x /opt/gitlab/sv/sshd/run \ + && ln -s /opt/gitlab/sv/sshd /opt/gitlab/service \ + && mkdir -p /var/run/sshd + +# Expose web & ssh +EXPOSE 80 22 + +# Copy assets +COPY assets/wrapper /usr/local/bin/ + +# Wrapper to handle signal, trigger runit and reconfigure GitLab +CMD ["/usr/local/bin/wrapper"] diff --git a/docker/single/assets/wrapper b/docker/single/assets/wrapper new file mode 100755 index 00000000000..966b2cab4a1 --- /dev/null +++ b/docker/single/assets/wrapper @@ -0,0 +1,16 @@ +#!/bin/bash + +function sigterm_handler() { + echo "SIGTERM signal received, try to gracefully shutdown all services..." + gitlab-ctl stop +} + +trap "sigterm_handler; exit" TERM + +function entrypoint() { + /opt/gitlab/embedded/bin/runsvdir-start & + gitlab-ctl reconfigure # will also start everything + gitlab-ctl tail # tail all logs +} + +entrypoint diff --git a/docker/single/marathon.json b/docker/single/marathon.json new file mode 100644 index 00000000000..2c15315e7aa --- /dev/null +++ b/docker/single/marathon.json @@ -0,0 +1,31 @@ +{ + "id": "/gitlab", + "ports": [0,0], + "cpus": 2, + "mem": 2048.0, + "disk": 10240.0, + "container": { + "type": "DOCKER", + "docker": { + "network": "HOST", + "image": "sytse/gitlab-ce:7.10.1" + }, + "volumes": [ + { + "containerPath": "/var/opt/gitlab", + "hostPath": "/var/opt/gitlab", + "mode": "RW" + }, + { + "containerPath": "/var/log/gitlab", + "hostPath": "/var/log/gitlab", + "mode": "RW" + }, + { + "containerPath": "/var/opt/gitlab", + "hostPath": "/var/opt/gitlab", + "mode": "RW" + } + ] + } +}
\ No newline at end of file diff --git a/docker/troubleshooting.md b/docker/troubleshooting.md index b1b70de5997..5827f2185db 100644 --- a/docker/troubleshooting.md +++ b/docker/troubleshooting.md @@ -61,3 +61,13 @@ head /proc/sys/kernel/shmmax /proc/sys/kernel/shmall free -m ``` + +# Cleanup + +Remove ALL docker containers and images (also non GitLab ones): + +``` +docker rm $(docker ps -a -q) +docker rmi $(docker images -q) +``` + |