dockerを使ってmacOSにGitlabを構築する

# 目次
<!-- TOC depthFrom:1 depthTo:6 withLinks:1 updateOnSave:1 orderedList:0 -->

- [Dockerを使ってGitLabのサーバを構築](#dockerを使ってgitlabのサーバを構築)
	- [Dockerを使う](#dockerを使う)
		- [Docker for Macをインストール](#docker-for-macをインストール)
			- [アカウントを作る](#アカウントを作る)
	- [GitLabのimgを使う](#gitlabのimgを使う)
		- [イメージを起動](#イメージを起動)
		- [設定の適用](#設定の適用)
	- [ブラウザで確認](#ブラウザで確認)
- [エラー集](#エラー集)
	- [Error response from daemon: Mounts denied:](#error-response-from-daemon-mounts-denied)
	- [Error starting userland proxy: Bind for 0.0.0.0:22: unexpected error (Failure EADDRINUSE)](#error-starting-userland-proxy-bind-for-000022-unexpected-error-failure-eaddrinuse)
- [dockerコマンド(備忘録)](#dockerコマンド備忘録)
	- [docker container ls](#docker-container-ls)
	- [docker ps](#docker-ps)
	- [docker start](#docker-start)
	- [docker stop](#docker-stop)
	- [docker restart](#docker-restart)
	- [docker rm](#docker-rm)

<!-- /TOC -->

# Dockerを使ってGitLabのサーバを構築

GitLabのサーバ上で管理したくないファイルがあるため、自前のサーバにGitLabを構築します。
下記を見ながらやってみます。  
[DockerをMacにインストールする (更新：2018/5/14)](https://qiita.com/kurkuru/items/127fa99ef5b2f0288b81)

## Dockerを使う

今回はDockerを使って構築していきます。  
とりあえずMac上で構築して、あとでサーバにコンテナを移します。  

### Docker for Macをインストール

公式サイトからインストールします。  
[Install Docker for Mac | Docker Documentation](https://docs.docker.com/docker-for-mac/install/)  

なんかログインしないとダメみたい...  
![Boostnote.png](https://qiita-image-store.s3.amazonaws.com/0/173800/2b4e8165-a5e5-942c-fcea-03afc1662ffc.png)

#### アカウントを作る

1.  create Accountを選択  
    ![Boostnote-2.png](https://qiita-image-store.s3.amazonaws.com/0/173800/bdd86090-5c30-ddcb-9376-416315c7df06.png)


2.  Docker ID, Email, Passwordを入力してSign Up  
    ![Boostnote-3.png](https://qiita-image-store.s3.amazonaws.com/0/173800/d8c739fa-8ca4-b9bd-2f4f-b61a87c98633.png)

3.  メールを確認し、Confirm  
    ![Boostnote-4.png](https://qiita-image-store.s3.amazonaws.com/0/173800/6e503614-43a6-d3da-d351-0248d5d8a6a5.png)

わーい！ダウンロードできるようになった。  
![Boostnote-5.png](https://qiita-image-store.s3.amazonaws.com/0/173800/a7e2b7fa-6eb4-9b10-44f2-265d20069387.png)

dmgファイルをダウンロードして、開くと...  
かわいい。  
![Boostnote-6.png](https://qiita-image-store.s3.amazonaws.com/0/173800/c1834415-c474-f07a-2c88-27eef96ae00b.png)

Docker.appを開くとパスワードの入力を促させるので入力。  
かわいい。  
![Boostnote-7.png](https://qiita-image-store.s3.amazonaws.com/0/173800/138766b9-3d7c-8d40-d561-e9d1b01e93a4.png)

インストールできたか`docker version`でチェックしてみます。  

```shell
$ docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:13:02 2018
 OS/Arch:      darwin/amd64
 Experimental: false
 Orchestrator: swarm
Error response from daemon: Bad response from Docker engine
```

`Error responce from daemon: Bad responce from Docker engine`と出ています。  
まだDockerが起動し終わっていないみたいです。  

メニューバーからDockerメニューをよく見たら`Docker is starting`ってなってます。  
![Boostnote-8.png](https://qiita-image-store.s3.amazonaws.com/0/173800/b6a826d6-7b1c-2674-84fa-ae8050090fa0.png)
※ここでずっと`Docker is starting`から進まない場合はDocker -> Preferences -> Resetの`Reset to factory defaults`で工場出荷状態に戻すと治ります。  

しばらく待ってメニューバーを見てみると...  
![Boostnote-9.png](https://qiita-image-store.s3.amazonaws.com/0/173800/fef2c018-1b79-dea0-0208-1ee6274325de.png)
`Docker is running`  
わーい！動いた動いた！  

ということでもう一度`docker version`を実行してみた。  

```shell
$ docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:13:02 2018
 OS/Arch:      darwin/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: true
```

ちゃんと動いてるみたい。  

## GitLabのimgを使う

とりあえず下記を読んでやってみます。  
[GitLab Docker images | GitLab](https://docs.gitlab.com/omnibus/docker/)

#### イメージを起動

イメージを起動します。  

```shell
$ sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /Users/{ユーザ名}/docker/gitlab/config:/etc/gitlab \
    --volume /Users/{ユーザ名}/docker/gitlab/logs:/var/log/gitlab \
    --volume /Users/{ユーザ名}/docker/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest
```

imageファイルが見つからなかったので勝手にpullしてくれてるみたい。  
~~かわいい。~~ かしこい。  

※上記のサイトでは`--volume`のpathが`/srv/gitlab`となっているが、この場合ルートディレクトリへの書き込み権限がなくてエラーが出るので`/Users/{ユーザ名}`に`docker`というディレクトリを作成しています。  

#### 設定の適用

起動したら、`docker exec -it gitlab gitlab-ctl reconfigure`で設定を適用します。  
これは、`gitlab`というコンテナの中で`gitlab-ctl reconfigure`を実行するコマンドです。  

## ブラウザで確認

このあと <http://localhost> に接続すると初回起動として`root`のパスワードを設定する画面が表示されます。  

**おしまい**  

# エラー集

## Error response from daemon: Mounts denied:

`--volume`にはDocker -> Preferences -> File ShareingにあるPathを書かないと、コンテナ起動時に下記のようなエラーが出る。  

```shell
$ sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest
```

```shell
docker: Error response from daemon: Mounts denied:
The paths /srv/gitlab/data and /srv/gitlab/logs and /srv/gitlab/config
are not shared from OS X and are not known to Docker.
You can configure shared paths from Docker -> Preferences... -> File Sharing.
See https://docs.docker.com/docker-for-mac/osxfs/#namespaces for more info.
```

DockerとMacが共有してるディレクトリのなかに`/srv/gitlab/data` `/srv/gitlab/logs` `/srv/gitlab/config` がなかったのが原因です。  

※上でも書きましたが書き込み権限のないディレクトリを入力するとうまくいきません。  

## Error starting userland proxy: Bind for 0.0.0.0:22: unexpected error (Failure EADDRINUSE)

PORTの22番がbindできなかったみたい。  

```shell
$ sudo docker run --detach \
    --hostname gitlab.example.com \
    --publish 443:443 --publish 80:80 --publish 22:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest
```

```shell
docker: Error response from daemon: driver failed programming external connectivity on endpoint gitlab (4533fb961ec3f699b4acaf26e6035a4f426e99f0d1c3fe7142b3f4304bf148ff): Error starting userland proxy: Bind for 0.0.0.0:22: unexpected error (Failure EADDRINUSE).
```

環境設定 -> 共有 -> リモートログインを消したらいけました。  

# dockerコマンド(備忘録)

## docker container ls

起動中のコンテナを表示。  
`docker container ls -a`で全てのコンテナも表示。  

## docker ps

起動中のプロセスを表示。  
`docker po -a`で全てのプロセスを表示。

## docker start

`docker start {コンテナ名}`でコンテナを起動。  

## docker stop

`docker stop {コンテナ名}`でコンテナを停止。  

## docker restart

`docker restart {コンテナ名}`でコンテナを再起動。  

## docker rm

`docker rm {コンテナ名}`でコンテナを削除。