zoukankan      html  css  js  c++  java
  • 把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 使用常见问题(持续更新中)

  • 相关阅读:
    maven打包成jar文件与打包成tar.gz文件
    maven命令错误:-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME
    Nginx监听多个端口配置实例 Linux
    怎么修改redis-cli访问的地址
    eclipse的.properties文件中文显示问题
    Linux关闭防火墙命令red hat/CentOs7
    CentOS 7防火墙快速开放端口配置方法
    Window下Beego环境搭建和bee工具使用
    .netcore2.1 使用middleware对api请求头进行验证
    .netcore2.1 统一接口返回属性名称
  • 原文地址:https://www.cnblogs.com/moonvan/p/6278097.html
Copyright © 2011-2022 走看看