把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 使用常見問題(持續更新中)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM