c-bata web

@c_bata_ のメモ。python多め

DockerでVPS上にgitlabとjenkinsサーバをたてる

はじめに

研究室で借りているさくらのVPSがあって、研究で使うアプリケーション以外にgitlabとかjenkinsを動かしている。Dockerをローカルでしか動かしたことが無かったので、リスクの低いこういうところで実際にDocker使ってみる。

これまでは AnsibleGalaxyで人気のRole を探して中身も読まずにインストールしちゃっていたけど、さっき触ってたらどうインストールされてるのか混乱したのでDockerで分離できたら良さそうっていうのが2つ目の理由。

準備

環境はさくらのVPSCentOS 6が入ってます。 Installation on CentOS を参考にDockerをインストール。

# yum update
# cat >/etc/yum.repos.d/docker.repo <<-EOF
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
# yum -y install docker-io
# service docker start

Gitlab

こちらのDockerイメージが人気なので使ってみる。

2015/11/26 追記

公式のDockerイメージありました...

追記終わり

MySQLとRedisもdockerで管理することにした。

$ docker pull sameersbn/mysql:latest
$ docker pull sameersbn/redis:latest
$ docker pull sameersbn/gitlab:latest
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
sameersbn/mysql     latest              1aa894d249d8        23 hours ago        294.2 MB
sameersbn/gitlab    latest              a87dce14c499        2 days ago          675.7 MB
sameersbn/redis     latest              9e62c2099db1        9 days ago          196.9 MB

MySQL、Redis、Gitlabのコンテナの立ち上げ。passwordのところは適当に置き換えて下さい。

$ docker run \
--name=mysql -d \
-e 'DB_NAME=gitlab_production' \
-e 'DB_USER=gitlab' \
-e 'DB_PASS=password' \
sameersbn/mysql:latest
$ docker run \
--name=redis -d \
sameersbn/redis:latest
$ docker run \
--name=gitlab -d -it -p 10022:22 -p 10080:80 \
-e 'GITLAB_SSH_PORT=10022' \
-e 'GITLAB_PORT=10080' \
-e 'DB_NAME=gitlab_production' \
-e 'DB_USER=gitlab' \
-e 'DB_PASS=password' \
-e 'GITLAB_SECRETS_DB_KEY_BASE=gacH4taC0ceJ7I' \
--link=mysql:mysql \
--link=redis:redisio \
-v $(which docker):/bin/docker sameersbn/gitlab:latest
$ docker ps
CONTAINER ID        IMAGE                     COMMAND                CREATED             STATUS              PORTS                                                   NAMES
2198b686b6dc        sameersbn/gitlab:latest   "/sbin/entrypoint.sh   6 seconds ago       Up 4 seconds        443/tcp, 0.0.0.0:10022->22/tcp, 0.0.0.0:10080->80/tcp   gitlab
105589c338fb        sameersbn/redis:latest    "/sbin/entrypoint.sh   19 minutes ago      Up 19 minutes       6379/tcp                                                redis
52577c0c7aad        sameersbn/mysql:latest    "/sbin/entrypoint.sh   19 minutes ago      Up 19 minutes       3306/tcp                                                mysql

docker runのコマンドが長いのでdocker-compose使ったほうが良さそうだけど、今回はとりあえずこのままにしておく。

Jenkins

Jenkinsが公式にDocker imageを配布しているのでそれを使う。

https://hub.docker.com/_/jenkins/

$ docker pull jenkins
$ docker run \
--name jenkins -d \
-p 10081:8080 jenkins

アクセスして確認したら、ちゃんと動いてくれてました。手軽

おわりに

ポート番号指定するのはあれなのでnginxで gitlab.example.com とか jenkins.example.com とかにひも付けた。試してないけどこの辺は nginx-proxy 使ってもよさそう。

使いたいDocker Imageをyml形式で指定しておけば後は全部セットアップしてるAnsibleのRoleがあれば便利そう。無さそうだったら作ります。

参考資料

Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!]

Dockerエキスパート養成読本[活用の基礎と実践ノウハウ満載!]

gitlabとかはこの本で紹介されていたイメージをそのまま使用しました。