把Gitlab迁移到Docker容器里
把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容器里的更多相关文章
- gitlab数据迁移到docker容器
需求:想把服务器上的gitlab迁移到docker容器里面注意:gitlab的迁移,必须保持gitlab的版本一致,此处使用的是:8.4.3,数据库版本和类型一致,此处使用的是postgresql 9 ...
- Docker容器里时间与宿主机不同步
docker容器里时间设置: 第一种: Dockerfile文件中添加一行:RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime或者 第二种: ...
- docker容器里设置中文时区
本文讨论docker容器里中文时区的问题,总所周知docker hub上的镜像默认都是英文时区的,在国人使用过程当中需要将时区设置成中文,我原来光配置/etc/localtime了date显示的时间也 ...
- 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行
实操:将一个spring boot项目部署到docker容器里运行 实验需要的环境: 腾讯云+Ubuntu 16.04 x64+idea+插件docker integration+daocloud 第 ...
- python服务不能在docker容器里运行的问题
在开发过程中,我们将mysql.redis.celery等服务在docker容器里跑,项目在本地运行,便于debug调试 docker-compose -f docker-compose-dev.ym ...
- windows下建立netcore控制台程序,然后传送到centos7下的docker容器里运行
1.首先,在window下用vs2017开发netcore控制台项目. 2.把建立好的项目传送到centos7下面的容器里. docker cp sharefoldersforwindows/ 359 ...
- docker - 容器里安装ssh
docker安装ssh 通过命令行安装 pull ubuntu镜像 docker pull ubuntu:latest 启动并进入bash docker run -it -d ubuntu:laste ...
- Docker容器里的进程为什么要前台运行?相同的问题:docker运行apache为什么带FOREGROUND参数?docker运行nginx为什么带`daemon off`参数?
<第一本Docker书>里面,讲到Docker容器启动web服务时,都指定了前台运行的参数. 例如apache: ENTRYPOINT [ "/usr/sbin/apache2& ...
- Docker容器里的进程为什么要前台运行
<第一本Docker书>里面,讲到Docker容器启动web服务时,都指定了前台运行的参数,例如apache: ENTRYPOINT [ "/usr/sbin/apache2&q ...
随机推荐
- spring集成jedis简单实例
jedis是redis的java客户端,spring将redis连接池作为一个bean配置. redis连接池分为两种,一种是“redis.clients.jedis.ShardedJedisPool ...
- flask中如何生成迁移文件
在flask网站开发中,如果直接对数据库进行修改的话,风险比较高,最好的是由迁移文件生成,这样确保了数据的误操作. 在Flask中可以使用Flask-Migrate扩展,来实现数据迁移.并且集成到Fl ...
- s21day06 python笔记
s21day06 python笔记 一.昨日内容回顾及补充 回顾 补充 列表独有功能 reverse:反转 v = [1,2,3,4,5] v.reverse() #[5,4,3,2,1] sort: ...
- Vue: 用 key 管理可复用的元素
<div id="login"> <template v-if="loginType === 'username'"> <labe ...
- jenkins构建完成后,执行的命令行的东西也会自动结束的解决办法
问题: 把添加VPN的指令写在脚本里,然后用jenkins执行这个脚本,jenkins执行的结果是成功的,但是在机器上看,并没有执行成功. 问题分析: 其实在机器上执行过添加VPN的操作,只是在j ...
- exactly-once和kafka
Exactly-Once的概念是指"恰好一次",简单讲就是同一个数据只会被处理一次,应用有机质保证不会重复处理同一条数据(如果数据因为因为网络业务异常被发送多次):Exactly- ...
- Hanlp1.7版本的新增功能一览
Hanlp1.7版本在去年下半年的时候就随大快的DKH1.6版本同时发布了,截至目前1.7大版本也更新到了1.7.1了.本篇分别就1.7.0和1.7.1中新增的功能做一个简单的汇总介绍. HanLP ...
- zookeeper的WEB客户端zkui使用
转载自:http://blog.csdn.net/csolo/article/details/53694665 前面几篇实践说明了zookeeper如何配置和部署,如何开发,因为大多是后台操作,对于维 ...
- Android jni中回调java的方法
在上一篇的基础上,添加在C++代码中回调java方法. 代码如下: Demo.java 中添加callback函数, 打印一条log. package com.example.scarecrow.dy ...
- CentOS 7下给nginx安装SSL证书
0. DNS要能解析你的网址(域名解析和主机解析,例如example.com和www.example.com都要能解析.注意泛解析记录*.example.com可以存在但在本文中暂时无法用于https ...