Mac
GitLab
docker

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

目次

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

GitLabのサーバ上で管理したくないファイルがあるため、自前のサーバにGitLabを構築します。
下記を見ながらやってみます。

DockerをMacにインストールする (更新:2018/5/14)

Dockerを使う

今回はDockerを使って構築していきます。

とりあえずMac上で構築して、あとでサーバにコンテナを移します。

Docker for Macをインストール

公式サイトからインストールします。

Install Docker for Mac | Docker Documentation

なんかログインしないとダメみたい...

Boostnote.png

アカウントを作る

  1. create Accountを選択

    Boostnote-2.png

  2. Docker ID, Email, Passwordを入力してSign Up

    Boostnote-3.png

  3. メールを確認し、Confirm

    Boostnote-4.png

わーい!ダウンロードできるようになった。

Boostnote-5.png

dmgファイルをダウンロードして、開くと...

かわいい。

Boostnote-6.png

Docker.appを開くとパスワードの入力を促させるので入力。

かわいい。

Boostnote-7.png

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

$ 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
※ここでずっとDocker is startingから進まない場合はDocker -> Preferences -> ResetのReset to factory defaultsで工場出荷状態に戻すと治ります。

しばらく待ってメニューバーを見てみると...

Boostnote-9.png
Docker is running

わーい!動いた動いた!

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

$ 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

イメージを起動

イメージを起動します。

$ 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を書かないと、コンテナ起動時に下記のようなエラーが出る。

$ 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
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できなかったみたい。

$ 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
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 {コンテナ名}でコンテナを削除。