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