summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSytse Sijbrandij <sytse@gitlab.com>2015-05-06 14:40:02 +0000
committerSytse Sijbrandij <sytse@gitlab.com>2015-05-06 14:40:02 +0000
commit48f22a39e7275551c35cc84d11caf5df1a581e0e (patch)
tree1c312d4c99b5f7f673d69bf60e22298b3989eb62
parent3f2282300d9c97e8c0c1df955bdd13d7ee1dc96e (diff)
parent6518c728acca65732f89a22a5cbbb75fe3f238f6 (diff)
downloadgitlab-ce-48f22a39e7275551c35cc84d11caf5df1a581e0e.tar.gz
Merge branch 'single-docker-image' into 'master'
Single docker image See merge request !1805
-rw-r--r--docker/README.md112
-rw-r--r--docker/app/Dockerfile (renamed from docker/Dockerfile)0
-rwxr-xr-xdocker/app/assets/wrapper (renamed from docker/assets/wrapper)0
-rw-r--r--docker/single/Dockerfile35
-rwxr-xr-xdocker/single/assets/wrapper16
-rw-r--r--docker/single/marathon.json31
-rw-r--r--docker/troubleshooting.md10
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)
+```
+