Merge branch 'update-docker' into 'master'
Update docker guide and add docker-compose.yml /cc @JobV @sytses See merge request !1473
This commit is contained in:
commit
2714d5b814
|
@ -0,0 +1,2 @@
|
|||
app:
|
||||
image: gitlab/gitlab-ce:latest
|
|
@ -1 +0,0 @@
|
|||
*.md
|
|
@ -1,50 +0,0 @@
|
|||
FROM ubuntu:14.04
|
||||
MAINTAINER Sytse Sijbrandij
|
||||
|
||||
# Install required packages
|
||||
RUN apt-get update -q \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \
|
||||
ca-certificates \
|
||||
openssh-server \
|
||||
wget \
|
||||
apt-transport-https \
|
||||
vim \
|
||||
nano
|
||||
|
||||
# Download & Install GitLab
|
||||
# If you run GitLab Enterprise Edition point it to a location where you have downloaded it.
|
||||
RUN echo "deb https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/gitlab_gitlab-ce.list
|
||||
RUN wget -q -O - https://packages.gitlab.com/gpg.key | apt-key add -
|
||||
RUN apt-get update && apt-get install -yq --no-install-recommends gitlab-ce
|
||||
|
||||
# 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
|
||||
|
||||
# Disabling use DNS in ssh since it tends to slow connecting
|
||||
RUN echo "UseDNS no" >> /etc/ssh/sshd_config
|
||||
|
||||
# Prepare default configuration
|
||||
RUN ( \
|
||||
echo "" && \
|
||||
echo "# Docker options" && \
|
||||
echo "# Prevent Postgres from trying to allocate 25% of total memory" && \
|
||||
echo "postgresql['shared_buffers'] = '1MB'" ) >> /etc/gitlab/gitlab.rb && \
|
||||
mkdir -p /assets/ && \
|
||||
cp /etc/gitlab/gitlab.rb /assets/gitlab.rb
|
||||
|
||||
# Expose web & ssh
|
||||
EXPOSE 443 80 22
|
||||
|
||||
# Define data volumes
|
||||
VOLUME ["/etc/gitlab", "/var/opt/gitlab", "/var/log/gitlab"]
|
||||
|
||||
# Copy assets
|
||||
COPY assets/wrapper /usr/local/bin/
|
||||
|
||||
# Wrapper to handle signal, trigger runit and reconfigure GitLab
|
||||
CMD ["/usr/local/bin/wrapper"]
|
172
docker/README.md
172
docker/README.md
|
@ -1,169 +1,7 @@
|
|||
# GitLab Docker images
|
||||
|
||||
The GitLab docker image is [available on Docker Hub](https://registry.hub.docker.com/u/gitlab/gitlab-ce/).
|
||||
|
||||
## After starting a container
|
||||
|
||||
After starting a container you can 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.
|
||||
|
||||
It might take a while before the docker container is responding to queries.
|
||||
|
||||
You can check the status with something like `sudo docker logs -f gitlab`.
|
||||
|
||||
You can login to the web interface with username `root` and password `5iveL!fe`.
|
||||
|
||||
Next time, you can just use docker start and stop to run the container.
|
||||
|
||||
## Run the image
|
||||
|
||||
Run the image:
|
||||
```bash
|
||||
sudo docker run --detach \
|
||||
--publish 8443:443 --publish 8080:80 --publish 2222:22 \
|
||||
--name gitlab \
|
||||
--restart always \
|
||||
--volume /srv/gitlab/config:/etc/gitlab \
|
||||
--volume /srv/gitlab/logs:/var/log/gitlab \
|
||||
--volume /srv/gitlab/data:/var/opt/gitlab \
|
||||
gitlab/gitlab-ce:latest
|
||||
```
|
||||
|
||||
This will download and start GitLab CE container and publish ports needed to access SSH, HTTP and HTTPS.
|
||||
All GitLab data will be stored as subdirectories of `/srv/gitlab/`.
|
||||
The container will automatically `restart` after system reboot.
|
||||
|
||||
After this you can login to the web interface as explained above in 'After starting a container'.
|
||||
|
||||
## Where is the data stored?
|
||||
|
||||
The GitLab container uses host mounted volumes to store persistent data:
|
||||
- `/srv/gitlab/data` mounted as `/var/opt/gitlab` in the container is used for storing *application data*
|
||||
- `/srv/gitlab/logs` mounted as `/var/log/gitlab` in the container is used for storing *logs*
|
||||
- `/srv/gitlab/config` mounted as `/etc/gitlab` in the container is used for storing *configuration*
|
||||
|
||||
You can fine tune these directories to meet your requirements.
|
||||
|
||||
### Configure GitLab
|
||||
|
||||
This container uses the official Omnibus GitLab distribution, so all configuration is done in the unique configuration file `/etc/gitlab/gitlab.rb`.
|
||||
|
||||
To access GitLab configuration, you can start an bash in a new the context of running container, you will be able to browse all directories and use your favorite text editor:
|
||||
```bash
|
||||
sudo docker exec -it gitlab /bin/bash
|
||||
```
|
||||
|
||||
You can also edit just `/etc/gitlab/gitlab.rb`:
|
||||
```bash
|
||||
sudo docker exec -it gitlab vi /etc/gitlab/gitlab.rb
|
||||
```
|
||||
|
||||
**You should set the `external_url` to point to a valid URL.**
|
||||
|
||||
**You may also be interesting in [Enabling HTTPS](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md#enable-https).**
|
||||
|
||||
**To receive e-mails from GitLab you have to configure the [SMTP settings](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/smtp.md),
|
||||
because Docker image doesn't have a SMTP server.**
|
||||
|
||||
**Note** that GitLab will reconfigure itself **at each container start.** You will need to restart the container to reconfigure your GitLab:
|
||||
|
||||
```bash
|
||||
sudo docker restart gitlab
|
||||
```
|
||||
|
||||
For more options for configuring the container please check [Omnibus GitLab documentation](https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md#configuration).
|
||||
|
||||
## Diagnose potential problems
|
||||
|
||||
Read container logs:
|
||||
```bash
|
||||
sudo docker logs gitlab
|
||||
```
|
||||
|
||||
Enter running container:
|
||||
```bash
|
||||
sudo docker exec -it gitlab /bin/bash
|
||||
```
|
||||
|
||||
From within container you can administrer GitLab container as you would normally administer Omnibus installation: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/README.md.
|
||||
|
||||
### Upgrade GitLab to newer version
|
||||
|
||||
To upgrade GitLab to new version you have to do:
|
||||
1. pull new image,
|
||||
```bash
|
||||
sudo docker stop gitlab
|
||||
```
|
||||
|
||||
1. stop running container,
|
||||
```bash
|
||||
sudo docker rm gitlab
|
||||
```
|
||||
|
||||
1. remove existing container,
|
||||
```bash
|
||||
sudo docker pull gitlab/gitlab-ce:latest
|
||||
```
|
||||
|
||||
1. create the container once again with previously specified options.
|
||||
```bash
|
||||
sudo docker run --detach \
|
||||
--publish 8443:443 --publish 8080:80 --publish 2222:22 \
|
||||
--name gitlab \
|
||||
--restart always \
|
||||
--volume /srv/gitlab/config:/etc/gitlab \
|
||||
--volume /srv/gitlab/logs:/var/log/gitlab \
|
||||
--volume /srv/gitlab/data:/var/opt/gitlab \
|
||||
gitlab/gitlab-ce:latest
|
||||
```
|
||||
|
||||
On the first run GitLab will reconfigure and update itself.
|
||||
|
||||
### Run GitLab CE on public IP address
|
||||
|
||||
You can make Docker to use your IP address and forward all traffic to the GitLab CE container.
|
||||
You can do that by modifying the `--publish` ([Binding container ports to the host](https://docs.docker.com/articles/networking/#binding-ports)):
|
||||
|
||||
> --publish=[] : Publish a container᾿s port or a range of ports to the host format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
|
||||
|
||||
To expose GitLab CE on IP 1.1.1.1:
|
||||
|
||||
```bash
|
||||
sudo docker run --detach \
|
||||
--publish 1.1.1.1:443:443 --publish 1.1.1.1:80:80 --publish 1.1.1.1:22:22 \
|
||||
--name gitlab \
|
||||
--restart always \
|
||||
--volume /srv/gitlab/config:/etc/gitlab \
|
||||
--volume /srv/gitlab/logs:/var/log/gitlab \
|
||||
--volume /srv/gitlab/data:/var/opt/gitlab \
|
||||
gitlab/gitlab-ce:latest
|
||||
```
|
||||
|
||||
You can then access GitLab instance at http://1.1.1.1/ and https://1.1.1.1/.
|
||||
|
||||
### Build the image
|
||||
|
||||
This guide will also let you know how to build docker image yourself.
|
||||
Please run the command from the GitLab repo root directory.
|
||||
People using boot2docker should run all the commands without sudo.
|
||||
|
||||
```bash
|
||||
sudo docker build --tag gitlab/gitlab-ce:latest docker/
|
||||
```
|
||||
|
||||
### Publish the image to Dockerhub
|
||||
|
||||
- Ensure the containers are running
|
||||
- Login to Dockerhub with `sudo docker login`
|
||||
|
||||
```bash
|
||||
sudo docker login
|
||||
sudo docker push gitlab/gitlab-ce:latest
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
Please see the [troubleshooting](troubleshooting.md) file in this directory.
|
||||
|
||||
Note: We use `fig.yml` to have compatibility with fig and because docker-compose also supports it.
|
||||
|
||||
Our docker image runs chef at every start to generate GitLab configuration.
|
||||
* The official GitLab Community Edition Docker image is [available on Docker Hub](https://registry.hub.docker.com/u/gitlab/gitlab-ce/).
|
||||
* The official GitLab Enterprise Edition Docker image is [available on Docker Hub](https://registry.hub.docker.com/u/gitlab/gitlab-ee/).
|
||||
* The complete usage guide can be found in [Using GitLab Docker images](http://doc.gitlab.com/omnibus/docker/)
|
||||
* The Dockerfile used for building public images is in [Omnibus Repository](https://gitlab.com/gitlab-org/omnibus-gitlab/tree/master/docker)
|
||||
* Check the guide for [creating Omnibus-based Docker Image](http://doc.gitlab.com/omnibus/build/README.html#Build-Docker-image)
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
#!/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
|
||||
}
|
||||
|
||||
if [[ ! -e /etc/gitlab/gitlab.rb ]]; then
|
||||
cp /assets/gitlab.rb /etc/gitlab/gitlab.rb
|
||||
chmod 0600 /etc/gitlab/gitlab.rb
|
||||
fi
|
||||
|
||||
entrypoint
|
|
@ -1,2 +0,0 @@
|
|||
app:
|
||||
build: .
|
|
@ -1,31 +0,0 @@
|
|||
{
|
||||
"id": "/gitlab",
|
||||
"ports": [0,0],
|
||||
"cpus": 2,
|
||||
"mem": 2048.0,
|
||||
"disk": 10240.0,
|
||||
"container": {
|
||||
"type": "DOCKER",
|
||||
"docker": {
|
||||
"network": "HOST",
|
||||
"image": "gitlab/gitlab-ce:latest"
|
||||
},
|
||||
"volumes": [
|
||||
{
|
||||
"containerPath": "/etc/gitlab",
|
||||
"hostPath": "/var/data/etc/gitlab",
|
||||
"mode": "RW"
|
||||
},
|
||||
{
|
||||
"containerPath": "/var/opt/gitlab",
|
||||
"hostPath": "/var/data/opt/gitlab",
|
||||
"mode": "RW"
|
||||
},
|
||||
{
|
||||
"containerPath": "/var/log/gitlab",
|
||||
"hostPath": "/var/data/log/gitlab",
|
||||
"mode": "RW"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -1,84 +0,0 @@
|
|||
# Troubleshooting
|
||||
|
||||
This is to troubleshoot https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/245
|
||||
But it might contain useful commands for other cases as well.
|
||||
|
||||
The configuration to add the postgres log in vim is:
|
||||
postgresql['log_directory'] = '/var/log/gitlab/postgresql'
|
||||
|
||||
# Commands
|
||||
|
||||
```bash
|
||||
sudo docker build --tag gitlab/gitlab-ce:latest docker/
|
||||
|
||||
sudo docker rm -f gitlab
|
||||
|
||||
sudo docker exec -it gitlab vim /etc/gitlab/gitlab.rb
|
||||
|
||||
sudo docker exec gitlab tail -f /var/log/gitlab/reconfigure.log
|
||||
|
||||
sudo docker exec gitlab tail -f /var/log/gitlab/postgresql/current
|
||||
|
||||
sudo docker exec gitlab cat /var/opt/gitlab/postgresql/data/postgresql.conf | grep shared_buffers
|
||||
|
||||
sudo docker exec gitlab cat /etc/gitlab/gitlab.rb
|
||||
```
|
||||
|
||||
# Interactively
|
||||
|
||||
```bash
|
||||
# First start a GitLab container without starting GitLab
|
||||
# This is almost the same as starting the GitLab container except:
|
||||
# - we run interactively (-t -i)
|
||||
# - we define TERM=linux because it allows to use arrow keys in vi (!!!)
|
||||
# - we choose another startup command (bash)
|
||||
sudo docker run --ti \
|
||||
-e TERM=linux
|
||||
--publish 80443:443 --publish 8080:80 --publish 2222:22 \
|
||||
--name gitlab \
|
||||
--restart always \
|
||||
--volume /srv/gitlab/config:/etc/gitlab \
|
||||
--volume /srv/gitlab/logs:/var/log/gitlab \
|
||||
--volume /srv/gitlab/data:/var/opt/gitlab \
|
||||
gitlab/gitlab-ce:latest \
|
||||
bash
|
||||
|
||||
# Configure GitLab to redirect PostgreSQL logs
|
||||
echo "postgresql['log_directory'] = '/var/log/gitlab/postgresql'" >> /etc/gitlab/gitlab.rb
|
||||
|
||||
# Prevent Postgres from allocating 25% of total memory
|
||||
echo "postgresql['shared_buffers'] = '1MB'" >> /etc/gitlab/gitlab.rb
|
||||
|
||||
# You can now start GitLab manually from Bash (in the background)
|
||||
# Maybe the command below is still missing something to run in the background
|
||||
gitlab-ctl reconfigure > /var/log/gitlab/reconfigure.log & /opt/gitlab/embedded/bin/runsvdir-start &
|
||||
|
||||
# Inspect PostgreSQL config
|
||||
cat /var/opt/gitlab/postgresql/data/postgresql.conf | grep shared_buffers
|
||||
|
||||
# And tail the logs (PostgreSQL log may not exist immediately)
|
||||
tail -f /var/log/gitlab/reconfigure.log /var/log/gitlab/postgresql/current
|
||||
|
||||
# And get the memory
|
||||
cat /proc/meminfo
|
||||
head /proc/sys/kernel/shmmax /proc/sys/kernel/shmall
|
||||
free -m
|
||||
|
||||
```
|
||||
|
||||
# Cleanup
|
||||
|
||||
Remove ALL docker containers and images (also non GitLab ones).
|
||||
**Be careful, because the `-v` also removes volumes attached to the images.**
|
||||
|
||||
```bash
|
||||
# Remove all containers with attached volumes
|
||||
docker rm -v $(docker ps -a -q)
|
||||
|
||||
# Remove all images
|
||||
docker rmi $(docker images -q)
|
||||
|
||||
# Remove GitLab persistent data
|
||||
rm -rf /srv/gitlab
|
||||
```
|
||||
|
Loading…
Reference in New Issue