把Gitlab迁移到Docker容器里

摘要:
把Gitlab迁移到Docker容器里Apr9,2015.|By:任怀林公司的gitlab一直是运行在ovm的虚拟机里的,版本还是6.7.5。版本有点老了,最近在研究docker,于是想把gitlab迁移到dockercontainer里去。2安装gitlab我们先运行MySQL,$sudodockerpullsameersbn/mysql:latest在host主机上创建mysql的数据目录。运行gitlab容器,进行设置,容器会进行数据库的migration等操作。把这个文件scp到dockergitlab那台机器的/opt/gitlab/data/backups登录到gitlab的container$sudodockerexec-itgitlabbash在容器里执行下面的命令$cd/home/git/gitlab$sudo-ugit-Hbundleexecrakegitlab:backup:restoreRAILS_ENV=production$exit这个样数据就全部到新的gitlab上了。后来发现修改config/gitlab.yml是不生效的,重启container后就会恢复默认值。

把Gitlab迁移到Docker容器里

Apr 9, 2015. | By: 任怀林

公司的gitlab一直是运行在ovm的虚拟机里的,版本还是6.7.5。版本有点老了,最近在研究docker,于是想把gitlab迁移到docker container里去。发现真的有人已经做了gitlab的image了,真心赞。

1 规划

规划:
一个容器运行gitlab
一个容器运行MySQL,然后 link到gitlab上。
一个容器运行Redis,然后 link到gitlab上。

2 安装gitlab

我们先运行MySQL,

$ sudo docker pull sameersbn/mysql:latest

在host主机上创建mysql的数据目录。

$ sudo mkdir -p /opt/mysql/data

启动MySQL容器。

$ sudo docker run --name mysql -d 
    -v /opt/mysql/data:/var/lib/mysql 
    sameersbn/mysql:latest

连接到MySQL上,修改授权信息

$ sudo docker exec -it mysql bash

创建数据库并授权。

CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER 
ON `gitlabhq_production`.* TO 'gitlab'@'172.17.%.%' IDENTIFIED BY 'dbpassword';
FLUSH PRIVILEGES;
3 配置redis

Pull image

$ sudo docker pull sameersbn/redis:latest

run redis
sh $ sudo docker run --name=redis -d sameersbn/redis:latest

4 Gitlab

Pull 先把老版的imagepull回来

$ sudo docker pull sameersbn/gitlab:6.7.5

创建数据目录

$ sudo mkdir -p /opt/gitlab/data

这个目录会映像到窗口的/home/git/data目录上,所以这里保存了所有的数据,请一定不要删除这里的内容。

运行gitlab容器,进行设置,容器会进行数据库的migration等操作。

$ sudo docker run --name gitlab -i -t --rm --link mysql:mysql 
  -e "DB_USER=gitlab" -e "DB_PASS=dbpassword" 
  -e "DB_NAME=gitlabhq_production" 
  -v /opt/gitlab/data:/home/git/data 
  sameersbn/gitlab:6.7.5 app:rake gitlab:setup

运行gitlab容器

$ sudo docker run --name gitlab -d -P --link mysql:mysql 
  -e "DB_USER=gitlab" -e "DB_PASS=dbpassword" 
  -e "DB_NAME=gitlabhq_production" 
  -v /opt/gitlab/data:/home/git/data 
  sameersbn/gitlab:6.7.5
# 从原来gitlab里导出备份
$ cd /home/git/gitlab
$ sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production

导出的文件放在/home/git/gitlab/tmp/backups这个目录下。

把这个文件 scp到 docker gitlab那台机器的/opt/gitlab/data/backups

登录到gitlab的container

$ sudo docker exec -it gitlab bash

在容器里执行下面的命令

$ cd /home/git/gitlab
$ sudo -u git -H  bundle exec rake gitlab:backup:restore RAILS_ENV=production
$ exit

这个样数据就全部到新的gitlab上了。
你会发现跟原来的一样。

下面我们来升级gitlab到新版。

$ sudo docker stop gitlab
$ sudo docker rm gitlab
$ sudo docker run --name gitlab -d -P --link mysql:mysql 
  --link redis:redisio 
  -e "DB_USER=gitlab" -e "DB_PASS=dbpassword" 
  -e "DB_NAME=gitlabhq_production" 
  -v /opt/gitlab/data:/home/git/data 
  sameersbn/gitlab:latest

配置好以后,把它保存成一个镜像。

$ sudo docker commit -m "update gitlab.yml ,change host,set timezone to BeiJing" -a "china-ops gitlab v7.9.4" 6af1d0739ae0 china-ops/gitlab:7.9.4

我原来的想法是修改config/gitlab.yml,把host,timezone等修改好,然后存成一个新的image。
后来发现修改config/gitlab.yml是不生效的,重启container后就会恢复默认值。后来看了文档才知道,
hostname等是通过环境变量来控制的。

用这个镜像来启动一个container

$ sudo docker run --name gitlab -d  
  -p 80:80  -p 8443:443 
  --link mysql:mysql 
  --link redis:redisio 
  -e "DB_USER=gitlab" -e "DB_PASS=dbpassword" 
  -e "DB_NAME=gitlabhq_production" 
  -e "GITLAB_HOST=gitlab.china-ops.com" 
  -e "GITLAB_TIMEZONE=Beijing" 
  -e 'GITLAB_BACKUPS=daily' 
  -e "GITLAB_GRAVATAR_ENABLED=false" 
  -v /opt/gitlab/data:/home/git/data 
  china-ops/gitlab:7.9.4

参数-e 'GITLAB_BACKUPS=daily' 是备份策略,我们设置为每天

默认的密码:
username: admin@local.host
password: 5iveL!fe

参考: 
https://github.com/openstack/keystone/blob/master/tools/sample_data.sh
https://github.com/gc3-uzh-ch/gridka-school/blob/master/tutorial/nova_api.rst
Docker FAQ —— Docker 使用常见问题(持续更新中)

免责声明:文章转载自《把Gitlab迁移到Docker容器里》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[Python之路] 使用epoll实现高并发HTTP服务器利用fetch进行POST传参下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mysql 连接sleep状态问题解决。

昨日mysql总是出问题,各种程序在运行时,出现了连接已断开的问题。 导致此问题的原因: 1. 最大连接数 2. 网络问题 3. mysql服务器资源问题 然而,上面最常见的3个问题都没有出现。后来查看了mysql 的连接状态(show processlist),发现有大量的sleep状态,而且sleep时间很长 这是想到了,是不是mysql防止睡眠时间太...

Git 常用命令速查表(图文+表格)

一、 Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态git commit 提交git branch -a 查看所有的分支git branch -r 查看远程所有分支git commit -am "init" 提交并且加注释git remote add origin git@192.168.1.119:ndsh...

关于Spring的问题(一)

一、核心容器(应用上下文) 模块 这是基本的Spring模块,提供spring 框架的基础功能,BeanFactory 是 任何以spring为基础的应用的核心。Spring 框架建立在此模块之上,它使Spring成为一个容器。 二、BeanFactory – BeanFactory 实现举例 Bean 工厂是工厂模式的一个实现,提供了控制反转功能,用来把...

小米监控 open-falcon部署

具体详情请参考官方文档  http://book.open-falcon.org/zh_0_2/quick_install/    centos6.8    建议centos7系统  否则后面按照官方文档来是有很多问题的   需要解决Python依赖问题    Python2.7 版本以上,由于centos6.8  pyhton默认版本是 2.6 环境准备...

Debian普通用户添加sudo权限

1、Debian默认没有sudo功能,因此需要自己安装:# apt-get install sudo 2、# chmod +w /etc/sudoers 3、# vim /etc/sudoers,添加如下行 root ALL=(ALL:ALL) ALL toney ALL=(ALL:ALL) ALL...

Mysql储存过程1: 设置结束符与储存过程创建

#显示储存过程 show procedure status; #设置结束符 delimiter $; #创建储存过程 create procedure procedure_name() begin --sql语句 end$ create procedure myshow() begin select user(),databas...