Docker+GitLabでカスタムロゴ

[Dockerを使ってのGitLab試行](http://qiita.com/yacchin1205/items/fa774011d72ead599eb5)では割と簡単にデプロイできたし、かなり有望な感じがするわけですが、やっぱり個人的にはロゴの目力が痛いわけです。

![gitlab.png](https://qiita-image-store.s3.amazonaws.com/0/28770/24875097-724d-985a-6fea-ea64e5a10ede.png)

そんな中、[Gitlabのロゴを差し替える](http://qiita.com/takanemu/items/019e220ce22d4d7735a2) という記事を発見。
DockerならばDockerfileを作ればわかりやすくカスタムイメージ作れんじゃないか、みたいに思って書いてみたのでメモ。

今回の画像、Dockerfileなどは以下に置いてあります。
https://github.com/yacchin1205/docker-gitlab-customlogo

#描く

まずは描きます。オリジナルは、

![original_logo.png](https://qiita-image-store.s3.amazonaws.com/0/28770/62e575b3-23b7-78ec-635d-23f1795af409.png)

なんですけど、https://about.gitlab.com/about/ にSmart animalって文言が見えたので、ああ、ケモミミだな・・・と。
サイズ合わせて、こんな感じに。

![yacchin1205_logo.png](https://qiita-image-store.s3.amazonaws.com/0/28770/6879d978-77e0-8af4-f4fd-d07de5ab2ad3.png)

別に疲れてないです。

##ファイルの準備

描いた絵をもとに、以下のファイルを作ります。

* brand_logo.png
* logo-black.png
* logo-white.png
* favicon.ico

サイズ、背景の透過などは[リポジトリ](https://github.com/yacchin1205/docker-gitlab-customlogo/tree/master/images)など参照。
ツールは、お絵かきはSAI、画像加工はFireworksを使ってます。

#ビルドと実行

GitLabイメージ `sameersbn/gitlab` に対して、画像ファイルだけ差し替えるような[Dockerfile](https://github.com/yacchin1205/docker-gitlab-customlogo/blob/master/Dockerfile)を書きました。

使用方法はこんな感じ。

```sh
git clone https://github.com/yacchin1205/docker-gitlab-customlogo.git
cd docker-gitlab-customlogo/
docker build -t docker-gitlab-customlogo .
```

あとは、`sameersbn/gitlab` の代わりに、イメージ `docker-gitlab-customlogo` を指定してGitLabコンテナを起動すればよい。

##コマンド一発でコンテナ起動

[先の記事](http://qiita.com/yacchin1205/items/fa774011d72ead599eb5#5%E7%A7%92%E3%81%A7%E8%A9%A6%E3%81%99%E6%96%B9%E6%B3%95)の通り、

```
docker run --name='gitlab' -it --rm \
-e 'GITLAB_PORT=10080' -e 'GITLAB_SSH_PORT=10022' \
-p 10022:22 -p 10080:80 \
-v /var/run/docker.sock:/run/docker.sock \
-v $(which docker):/bin/docker \
docker-gitlab-customlogo
```

で、 `http://(Dockerホストのアドレス):10080` をブラウザで開く。

![gitlab-customlogo.png](https://qiita-image-store.s3.amazonaws.com/0/28770/dbe757cb-fe89-3dab-3f4d-c1c3e1c37592.png)

うむ・・・！

##コンテナを1つ1つ起動

こちらも[先の記事](http://qiita.com/yacchin1205/items/fa774011d72ead599eb5#%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B)と同じ要領。

```sh
docker run --name gitlab-redis -d sameersbn/redis:latest
docker run --name gitlab-mysql -d -e 'DB_NAME=gitlabhq_production' -e 'DB_USER=gitlab' -e 'DB_PASS=password' -v /vagrant/gitlab/mysql:/var/lib/mysql sameersbn/mysql:latest
docker run -d -p 10080:80 -e 'GITLAB_PORT=10080' -e 'GITLAB_HOST=192.168.33.10' -v /vagrant/gitlab/git:/home/git/data --link gitlab-mysql:mysql --link gitlab-redis:redisio docker-gitlab-customlogo
```

なお、上記コマンドで**すでに一度起動したことがある場合**、 `/vagrant/gitlab/git` ディレクトリ配下に `tmp` ディレクトリが作成され、そこに画像ファイルがコピーされている場合があります。
(`tmp/public/assets/brand_logo-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.png`など)

この場合、以前起動した際のロゴ画像ファイルが利用されてしまうようですが、`tmp` をリネームなどして再度コンテナ起動をすると、新たな画像ファイルを用いて `tmp` ディレクトリを作ってくれるよう。

##余談: Dockerfileの作り

Dockerfileはごくごくシンプルなのですが、今回気にしてみたのは、以下の部分。

```text:Dockerfile
RUN test -e /home/git/gitlab/app/assets/images/brand_logo.png && \
    test -e /home/git/gitlab/app/assets/images/logo-white.png && \
    test -e /home/git/gitlab/app/assets/images/logo-black.png && \
    test -e /home/git/gitlab/app/assets/images/favicon.ico
```

ベースにしているイメージは逐一アップデートされていくので、リソースに関するパスなどはいつまで同じかわかりません。こういう状況では、**一見ビルドできているけど実は反映されてません** みたいなことが簡単に発生しうるなと。
そこで、DockerfileでチェックするコードをRUNしておけば、とりあえず期待するファイルがベースイメージ中に存在するかどうかくらいはチェックできるかなあ、と。

これで目力に負けることなく動作検証できます。