docker用来隔离应用还是很方便的,一来本身的操作较为简单,二来资源占用也比虚拟机要小得多,三来也较为安全,因为像数据库这样的应用不会再全局暴露端口,同时应用间的通信通过加密和端口转发,更加安全。

Gitlab是目前比较流行的开源类Github代码管理平台。Gitlab使用Rails开发,使用PostgreSQL或MySQL数据库,Redis做缓存。一般自己搭建私有代码仓库,Gitlab通常是首选。这里简单介绍一下dockerized Gitlab。

Gitlab的docker镜像早已有人做好了,并且维护相当不错。大家可以前往其GitHub仓库了解该镜像的情况。官方repo的readme中已经有详细的安装配置方案,这里我简单的梳理一下部署流程。

安装Docker

这里以Ubuntu 14.04发行版为例,在bash中输入一下命令安装最新的docker:

sudo apt-get purge docker.io
curl -s https://get.docker.io/ubuntu/ | sudo sh
sudo apt-get update
sudo apt-get install lxc-docker

注意: 如果你使用了阿里云最新推出的Docker镜像,那么可以省略本节的步骤。因为阿里云的这个镜像已经自带了1.2版的docker,版本比较新,可以直接使用。

安装docker-gitlab

使用如下命令可以使Docker下载对应版本的Gitlab镜像:

docker pull sameersbn/gitlab:7.5.3

上面的命令下载7.5.3版的Gitlab,如果想下载最新版本,可以输入以下命令:

docker pull sameersbn/gitlab:latest

待下载完成后就算完成安装了。
也可以Clone刚才的提到的仓库,然后在本机上build镜像:

git clone https://github.com/sameersbn/docker-gitlab.git
cd docker-gitlab
docker build --tag="$USER/gitlab" .

注意上面最后一行命令结尾有一个"."符号,不要掉了。

安装PostgreSQL

Gitlab推荐使用PostgreSQL作为数据库。既然使用了docker,那么我们为何不考虑把所有的组件都用docker包装起来?我们一样可以下载PostgreSQL的镜像完成安装,这种安装更加便捷。

首先输入以下命令下载PostgreSQL镜像:

docker pull sameersbn/postgresql:latest

然后我们要为数据库默认的表空间建立目录以存放数据:

mkdir -p /opt/postgresql/data

这里/opt/postgresql/data部分可以替换成你自己希望建立的地址。
如果是使用SELinux,那么还需要改变一下这个目录的安全设置:

sudo chcon -Rt svirt_sandbox_file_t /opt/postgresql/data

如果没有使用SELinux,可以跳过上面一条命令。

最后使用以下命令行启动数据库:

docker run --name=postgresql -d \
  -e 'DB_NAME=gitlabhq_production' -e 'DB_USER=gitlab' -e 'DB_PASS=password' \
  -v /opt/postgresql/data:/var/lib/postgresql \
  sameersbn/postgresql:latest

这里,"-e"选项后面的内容请不要随意变更,这里的配置都是Gitlab默认的数据库配置,如果没有在后面Gitlab镜像启动的设置里面做相应的修改的话,这里的修改会让程序无法正常运行。

安装Redis

同样,我们可以使用docker来安装Redis:

docker pull sameersbn/redis:latest

然后启动它:

docker run --name=redis -d sameersbn/redis:latest

启动gitlab

在最终启动Gitlab之前,我们还需要为Gitlab创建一个目录用来存放提交上来的代码,docker-gitlab内部使用/home/git/data这个目录存放代码,我们在容器外部创建一个目录然后在启动的时候挂载到这个路径即可:

mkdir -p /opt/gitlab/data
mkdir -p /opt/gitlab/backups

同样,如果使用SELinux,需要修改目录的安全配置:

sudo chcon -Rt svirt_sandbox_file_t /opt/gitlab/data
sudo chcon -Rt svirt_sandbox_file_t /opt/gitlab/backups

在完成上面所有的步骤以后,我们可以用以下命令启动Gitlab:

docker run --name='gitlab' -d \
  -e 'GITLAB_PORT=10080' -e 'GITLAB_SSH_PORT=10022' \
  -e 'GITLAB_BACKUPS=monthly' \
  -p 10022:22 -p 10080:80 \
  -v /opt/gitlab/data:/home/gitl/data \
  -v /opt/gitlab/backups:/home/git/data/backups
  sameersbn/gitlab:7.5.3

上面的命令将使用10080作为Gitlab的Web访问端口,10022将作为ssh push和pull代码的端口。
在本地可以使用浏览器打开http://localhost:10080来访问Gitlab,初始登录网站使用root账户,用户名为root,密码为:5iveL!fe,登录后需要立即修改密码。

这里解释一下各参数:

-d: 后台运行
-e:配置Gitlab运行的环境变量,这个参数很重要,具体有哪些环境变量,后面列举
-p: 端口转发规则
-v: 共享目录挂载,即docker容器内外数据共享

Gitlab的环境变量配置比较多,这里列举一下比较重要的Gitlab的环境变量:

    • GITLAB_HOST: 这个是Gitlab服务器的hostname,你需要将此设定为网站的域名或者ip(不带端口号),默认值为localhost,这个值会被Gitlab用来生成repo的链接,所以必须要设置。否则,在创建的repo中,会发现所有的repo链接都是以localhost为hostname。
    • GITLAB_PORT Gitlab网站的访问端口,这里的设置要结合端口转发一起设置,否则会导致网站无法访问,默认值为80
    • GITLAB_SSH_PORT Gitlab的SSH代码提交方式使用的SSH端口,这里的设置要结合端口转发一起设置,否则会导致代码无法提交,默认值为22。如果是在VPS上部署,这个值请使用别的端口,比如上面提到的10022端口,否则会与VPS原本的SSH端口产生冲突,造成SSH无法登录VPS
    • GITLAB_BACKUPS Gitlab的自动备份配置,有disabledailyweeklymonthly四个可选值,默认为disable。建议打开自动备份
    • GITLAB_BACKUP_DIR Gitlab自动备份目录,默认值为/home/git/data/backups

docker下部署gitlab的更多相关文章

  1. 设想 Docker 下部署 KVM

    设想 Docker 下部署 KVM 一.安装 $ yum -y install kvm # kvm base , must $ yum -y install libvirt -y # libvirtd ...

  2. 在Docker下部署Nginx

    在Docker下部署Nginx 在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过80端口访问默认的网站 设置记录访问和错误日志的路径 设置静态网站的路径 通过proxy_p ...

  3. Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)

    场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/deta ...

  4. 3.Docker Compose 部署 GitLab

    什么是 GitLab GitLab 是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目.它拥有与 Githu ...

  5. docker 下安装gitlab

    1.找到docker镜像 docker search gitlab 2.下载gitlab镜像 docker pull  gitlab/gitlab-ce/ 3.通常会将 GitLab 的配置 (etc ...

  6. Docker快速部署gitlab

    环境: Centos7.5 安装Docker 1.移除旧版本: $ sudo yum remove docker \ docker-client \ docker-client-latest \ do ...

  7. docker下运行Gitlab CE+Jenkins+Nexus3+docker-registry-frontend

    DevOps - Gitlab CE - Jenkins - Nexus Gitlab CE https://hub.docker.com/r/gitlab/gitlab-ce/ https://do ...

  8. 使用Docker快速部署Gitlab

    使用Docker部署Gitlab 1. 下载gitlab镜像 docker pull gitlab/gitlab-ce 2. 运行gitlab实例 GITLAB_HOME=`pwd`/data/git ...

  9. Docker下部署springboot项目

    1.背景 如何在docker容器环境下部署一个springboot项目? 2.具体步骤 第一步:准备一个springboot项目的xxxx.jar包 jar包中用于测试的一个接口如下 第二步:编写Do ...

随机推荐

  1. android Adapter剖析理解

    UI控件都是跟Adapter(适配器)打交道的 Adapter: 是用来帮助控件填充数据的中间桥梁 (在开发中大多数Textview控件的内容是依靠数据库传递并显示的如:新闻类) Adapter: 将 ...

  2. 【基础】PHP变量及变量作用域

    新学PHP,比较有意思的语法,记录下. 1. 变量的作用域 作用域只分两个Global和Local,Global相对于整个.php文件来讲,Local是本地最小范围,是距离变量最近的范围,如:在函数中 ...

  3. Google Developers中国网站

    正于北京举办的谷歌开发者大会上,谷歌宣布,Google Developers中国网站 (developers.google.cn) 正式发布! 谷歌表示,Google Developers中国网站是特 ...

  4. ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded

    The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramewor ...

  5. C# DevExpress 的gridControl或gridView数据导出失败解决方法

    来自:http://blog.csdn.net/lybwwp/article/details/8049464 谢谢 在使用DevExpress 的GridPanel控件的时候出现了一个莫名其妙的现象, ...

  6. 响应式SharePoint模版页

    一张好的皮肤显然的会给你的项目加分不少.特别是大部分的项目,UI甚至可以决定成败. SharePoint在这方面一直都做得不好,曾经我有好多项目都是坐在美工旁边来一起修改样式.痛苦的经历. 不久以前, ...

  7. Python基础(3)--列表和元组

    Python包含6种内建序列:列表.元组.字符串.Unicode字符串.buffer对象.xrange对象 本篇主要讨论最常用的两种类型:列表.元组 本文地址:http://www.cnblogs.c ...

  8. 二叉堆(binary heap)

    堆(heap) 亦被称为:优先队列(priority queue),是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.在队列中,调度程序反复提取队列中第一个作业并运行,因 ...

  9. 【读书笔记】iOS-安全地传输用户密码的方法

    正确做法:事先生成一对用于加密的公私钥,客户端在登录时,使用公钥将用户的密码加密后,将密文传输到服务器.服务器使用私钥将密码解密,然后加盐之后多次请求MD5,之后再和服务器原来存储的用同样方法处理过的 ...

  10. iOS:交换Button中图片与文字的左右位置

    titleEdgeInsets属性和 imageEdgeInsets属性只是在画这个button出来的时候用来调整image和label位置的属性,并不影响button本身的大小.它们只是image和 ...