Made a single docker file.

This commit is contained in:
Sytse Sijbrandij 2015-05-06 15:32:29 +02:00
parent 7af59c54fc
commit e8edd20bfd
7 changed files with 183 additions and 41 deletions

View file

@ -5,21 +5,74 @@ 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 --publish 8080:80 --publish 2222:22 sytse/gitlab-ce:7.10.1 bash
/opt/gitlab/embedded/bin/runsvdir-start & gitlab-ctl reconfigure
gitlab-ctl start
```
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 +87,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 +103,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 +111,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 +119,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 +127,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
```
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: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 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-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.
Publish the 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_data sytse/gitlab_data
sudo docker push sytse/gitlab_data
```
Use 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
```

35
docker/single/Dockerfile Normal file
View file

@ -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"]

16
docker/single/assets/wrapper Executable file
View file

@ -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

View file

@ -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"
}
]
}
}

View file

@ -61,3 +61,11 @@ head /proc/sys/kernel/shmmax /proc/sys/kernel/shmall
free -m
```
Remove ALL docker containers and images (also non GitLab ones):
```
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
```