Dockerでbitbucket-serverを上げてみる


## やること

さっそく（今度こそ）手軽なDockerの環境が出来たので、勉強がてらに何か入れてみます。
今回は、Stashから変わったばかりの、bitbucket-serverを上げてみることにしました。

- Ref. [Stash は Bitbucket Server になりました](https://ja.atlassian.com/software/bitbucket/server)

## イメージの取得

Docker Hubにはatlassian公式のものも含め、Atlassian製品がいくつか上がっています。
今回の利用はこちらから。

- https://hub.docker.com/r/atlassian/bitbucket-server/


```
% docker pull atlassian/bitbucket-server # しばらく待つ

# 持って来れました！
% docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
atlassian/bitbucket-server   latest              e1065872791c        6 days ago          763.5 MB
hello-world                  latest              8889088cb38d        9 weeks ago         960 B
```

### コンテナ内とDokerホスト内のディレクトリを共有

イメージが取得できたので、[ドキュメント](https://hub.docker.com/r/atlassian/bitbucket-server/)に従って、dockerコンテナの操作を行います。

この操作は行わなくてもいいのですが、コンテナやイメージ削除の際にせっかくコミットしたリポジトリのデータも消えてしまうと残念です。

ということで、docker コンテナ内でBitbucket Serverのデータが書き出されるディレクトリを、Dockerホスト側のディレクトリにマウントさせて、データの保全を計るため、このおまじないをかけます。


```
# Dockerホストにマウント & パーミッション変更
% docker run -u root -v /data/bitbucket:/var/atlassian/application-data/bitbucket atlassian/bitbucket-server chown -R daemon  /var/atlassian/application-data/bitbucket
```

### Dockerホスト側は？

この時点で、Dockerホスト（boot2docker) 側の /data/bitbucket フォルダが出来ています。
Dockerのコンテナが止まったり、コンテナ＆イメージが削除されてしまっても、boot2docker側のフォルダにデータが残ることになります:)

```
% docker stop ...Bitbucket ServerコンテナのID....
% docke-machine ssh default # Dockerホスト内にssh

# ここからはDockerホスト内部（boot2docker)

docker@default:/data/bitbucket$ ls -F
analytics-logs/ bin/            caches/         export/         lib/            log/            plugins/        shared/         tmp/

```

### Bitcuekct Server起動します！

データの欠損はひとまず心配しなくてよさそうなので、早速起動してみます。
必要なものは入っている状態なので、[ドキュメント](https://hub.docker.com/r/atlassian/bitbucket-server/)に従って、起動させます。

```
# Macのターミナル上から
# Daemonモードでプロセス起動
% docker run -v /data/bitbucket:/var/atlassian/application-data/bitbucket --name="bitbucket" -d -p 7990:7990 -p 7999:7999 atlassian/bitbucket-server
adaa96da2820d55e2d473c4ed72e00d7c1c2111dd4da07e87caa65dc8d1b058c

% docker ps
CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                            NAMES
adaa96da2820        atlassian/bitbucket-server   "./bin/start-bitbucke"   5 minutes ago       Up 5 minutes        0.0.0.0:7990->7990/tcp, 0.0.0.0:7999->7999/tcp   bitbucket

```
docker psで確認してみると、ひっそりと起動しているようです。


### Webから接続してみます！

Dockerコンテナ内 7990 で起動 -> Dockerホスト側の7990 にポートフォワードされていますが、わたしの環境はDocker Toolboxを使っていますので、Macからアクセスするには、そのまま http://localhost:7990/ ではNG。

Virtualboxのポートフォワードでもいいのですが、Dockerホストのポートが解放されていれば、DockerホストのIPを頼りに接続でokです。

```
% docker-machine ip default
192.168.99.100
```
では、このipでMac上のブラウザから見てみます。

![bitbucket-server-on-docker.jpg](https://qiita-image-store.s3.amazonaws.com/0/27976/7c176eaa-81a3-4958-0ed1-c75494aba54d.jpeg "bitbucket-server-on-docker.jpg")

Kitematicからも、Bitbucket Serverのコンテナの状況が確認できました。

### 設定 & ログイン！

めでたく起動しましたので、評価用ライセンスキーを取得して、アプリケーションを有効化します。
設定完了後には、初期アカウントで再ログインになります。

ログイン直後は、以下のような画面に...。（おひとりさま利用なのが申し訳ないです）


![after-login.png](https://qiita-image-store.s3.amazonaws.com/0/27976/70e5383f-362f-6173-085e-78d0d47fcabd.png "after-login.png")

### プロジェクトとリポジトリを作成

Bitbucket-Serverの場合は、Stashと同じく、まずはプロジェクトを作成します。（チームのワークスペースみたいなものです）
リポジトリは、このプロジェクトの下に紐づきます。

![create-project.jpg](https://qiita-image-store.s3.amazonaws.com/0/27976/ac53ef5b-589a-019a-beea-2f4ba7dfd74c.jpeg "create-project.jpg")

プロジェクト作成後に、リポジトリを作成します。

![create-repository.jpg](https://qiita-image-store.s3.amazonaws.com/0/27976/b53bfc92-e07d-7bf5-d17f-527507636c36.jpeg "create-repository.jpg")


## コマンドラインからアクセス！

では、リポジトリが出来ましたので、早速 git clone します。ここでは、簡単にhttpでcloneします。

```
% git clone http://自分のアカウント@192.168.99.100:7990/scm/akp/angular.git
Cloning into 'angular'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

% cd angular/
% ls
% git remote -v
origin	http://自分のアカウント@192.168.99.100:7990/scm/akp/angular.git (fetch)
origin	http://自分のアカウント@192.168.99.100:7990/scm/akp/angular.git (push)

```

README を加えて、masterにpush してみます。
SourceTreeで確認しました :)

![browse-sourcetree.png](https://qiita-image-store.s3.amazonaws.com/0/27976/cf4087b0-802d-10cf-7b68-5c5d450f6539.png "browse-sourcetree.png")

## おひとりさまコードレビュー

画面上から、おひとりさまですがコードレビューの確認をしてみます。
インラインでのコメントも大丈夫！

![code-review.png](https://qiita-image-store.s3.amazonaws.com/0/27976/5a9c288f-955a-9ad4-30db-3f29f24c4d61.png "code-review.png")

と言うかんじで、あっさり確認ができました！

## 感想など

Docker ToolBoxのおかげで、楽に環境を作ることが出来まして、大助かり！
評価版ライセンスは必要ですが、これなら動作確認しやすいですね。

特にプラグイン周りの確認は、格段にしやすいと思います。

また、Bitbucket Serverのプロセスがデーモンで起動し続けてくれているので、Dockerホストが停止しない＆コンテナが起動しているままなら、PCをサスペンドさせて、翌朝再度アクセスしても、ちゃんと続けて利用できました。

次に機会があれば、データの移行を行ってみたいと思います。