把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容器里的更多相关文章

  1. gitlab数据迁移到docker容器

    需求:想把服务器上的gitlab迁移到docker容器里面注意:gitlab的迁移,必须保持gitlab的版本一致,此处使用的是:8.4.3,数据库版本和类型一致,此处使用的是postgresql 9 ...

  2. Docker容器里时间与宿主机不同步

    docker容器里时间设置: 第一种: Dockerfile文件中添加一行:RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime或者 第二种: ...

  3. docker容器里设置中文时区

    本文讨论docker容器里中文时区的问题,总所周知docker hub上的镜像默认都是英文时区的,在国人使用过程当中需要将时区设置成中文,我原来光配置/etc/localtime了date显示的时间也 ...

  4. 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行

    实操:将一个spring boot项目部署到docker容器里运行 实验需要的环境: 腾讯云+Ubuntu 16.04 x64+idea+插件docker integration+daocloud 第 ...

  5. python服务不能在docker容器里运行的问题

    在开发过程中,我们将mysql.redis.celery等服务在docker容器里跑,项目在本地运行,便于debug调试 docker-compose -f docker-compose-dev.ym ...

  6. windows下建立netcore控制台程序,然后传送到centos7下的docker容器里运行

    1.首先,在window下用vs2017开发netcore控制台项目. 2.把建立好的项目传送到centos7下面的容器里. docker cp sharefoldersforwindows/ 359 ...

  7. docker - 容器里安装ssh

    docker安装ssh 通过命令行安装 pull ubuntu镜像 docker pull ubuntu:latest 启动并进入bash docker run -it -d ubuntu:laste ...

  8. Docker容器里的进程为什么要前台运行?相同的问题:docker运行apache为什么带FOREGROUND参数?docker运行nginx为什么带`daemon off`参数?

    <第一本Docker书>里面,讲到Docker容器启动web服务时,都指定了前台运行的参数. 例如apache: ENTRYPOINT [ "/usr/sbin/apache2& ...

  9. Docker容器里的进程为什么要前台运行

    <第一本Docker书>里面,讲到Docker容器启动web服务时,都指定了前台运行的参数,例如apache: ENTRYPOINT [ "/usr/sbin/apache2&q ...

随机推荐

  1. C# 之TripleDESCryptoServiceProvider类加密/解密程序

    这篇博文的编写基于以下博客地址提供的知识: TripleDESCryptoServiceProvider 加密解密 基于该博客,我的毕业设计中密码存储加密字符串这一问题得到解决.

  2. 网络编程并发 多进程 进程池,互斥锁,信号量,IO模型

    进程:程序正在执行的过程,就是一个正在执行的任务,而负责执行任务的就是cpu 操作系统:操作系统就是一个协调.管理和控制计算机硬件资源和软件资源的控制程序. 操作系统的作用: 1:隐藏丑陋复杂的硬件接 ...

  3. yum 的 group的信息

    查找 yum源中有哪些group及其详细信息 1:yum groupinfo '*' | less 2:yum groupinfo '*' | less +/sendmail-cf 将 sendmai ...

  4. OpenCV3 SVM ANN Adaboost KNN 随机森林等机器学习方法对OCR分类

    转摘自http://www.cnblogs.com/denny402/p/5032839.html opencv3中的ml类与opencv2中发生了变化,下面列举opencv3的机器学习类方法实例: ...

  5. hdu 1874 畅通工程续 floyed

    裸题 题意:求任意两点之间的最短路径 坑点:测试数据同一条路径有可能出现多次,然后值不一样,注意筛选最小边 #include <iostream> #include <cstdio& ...

  6. install svn server in Ubuntu

    1. #安装服务 apt-get install subversionapt-get install libapache2-svnapt-get install apache2apt-get inst ...

  7. 二维数组的查找(JAVA)

    二维数组查找 解题思路:找到该二维数组的特殊点,易知该二维数组左下角的那个点很特殊.从这个点往右看,数值都在变大:而往上看,数值都在变小.所以 我们可以将这个点的索引设为起点(i,j),当比目标数大时 ...

  8. Redis缓存系统(一)Java-Jedis操作Redis,基本操作以及 实现对象保存

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/jiangtao_st/article/details/37699473 源码下载: http://d ...

  9. visio画图有感

    昨天在和一个同事看流程图,在我还在考虑图的含义时他说这个图太乱了,如果要团队成员看也会很费劲,并找出觉得画的好的案例. 对比两个图我发现了一个最大的差别是好的图形状都是水平或垂直对齐的,连接线也都是水 ...

  10. spark submit参数调优

    在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...