はじめに
はじめてDockerに触れてみます。Docker Desktopを使ってGitLabを構築してみました。
今回は初めてなので、違いを知るためにコンテナ単体とcomposeと2パターンで試してみましたが
複数のコンテナを連携できて便利なので、今後はcomposeを使っていこうと思っています。
環境
Windowsのバージョン
エディション:Windows 10 Home
バージョン :20H2
OSビルド :19042.928
Dockerのバージョン
PS C:\Users\xxx> docker version
Client:
Cloud integration: 1.0.14
Version: 20.10.6
API version: 1.41
Go version: go1.16.3
Git commit: 370c289
Built: Fri Apr 9 22:49:36 2021
OS/Arch: windows/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.6
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: 8728dd2
Built: Fri Apr 9 22:44:56 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.4
GitCommit: 05f951a3781f4f2c1911b05e61c160e9c30eaa8e
runc:
Version: 1.0.0-rc93
GitCommit: 12644e614e25b05da6fd08a38ffa0cfe1903fdec
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Docker Composeのバージョン
PS C:\Users\xxx> docker-compose version
docker-compose version 1.29.1, build c34c88b2
docker-py version: 5.0.0
CPython version: 3.9.0
OpenSSL version: OpenSSL 1.1.1g 21 Apr 2020
手順(コンテナ単体版)
流れ
- gitlab-ceイメージの取得
- 取得したイメージを使って、コンテナの作成と起動
- しばらく待ってから、GitLabへアクセス
gitlab-ceイメージの取得
- 実行するコマンド:
docker pull gitlab/gitlab-ce:latest
gitlab/gitlab-ce
はイメージ名、コロンに続くlatest
がタグになります。
どんなタグがあるかというと、「Docker Hub」に載ってます。
PS C:\Users\xxx> docker pull gitlab/gitlab-ce:latest
latest: Pulling from gitlab/gitlab-ce
345e3491a907: Pull complete
~~省略~~
a5e82faf9eb6: Pull complete
Digest: sha256:3421d0b39f305bacf63176bf73760fe1352f352472c6f02e7a6b4b19365d73d6
Status: Downloaded newer image for gitlab/gitlab-ce:latest
docker.io/gitlab/gitlab-ce:latest
取得したイメージを使って、コンテナの作成と起動
- フォーマット:
docker run [オプション] イメージ名 [コマンド] [引数...]
- 実行するコマンド:
docker run -d -p 8080:80 --name gitlab gitlab/gitlab-ce:latest
-d
はデタッチ。バックグラウンド起動です。
-p 8080:80
でHostの8080ポートを、コンテナの80ポートに割り当てています。
--name gitlab
は、起動するコンテナにgitlab
という名前をつけています。
PS C:\Users\xxx> docker run -d -p 8080:80 --name gitlab gitlab/gitlab-ce:latest
33a2cdb39603140ac9c0bed339bf500a8063a1edad483d5e794a1f1adad73ea7
コンテナのステータスを確認すると、Hostの8080ポートがコンテナの80ポートに割り当たっていることや
NAMES
がgitlab
になっていることが確認できます。
PS C:\Users\xxx> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
33a2cdb39603 gitlab/gitlab-ce:latest "/assets/wrapper" 19 seconds ago Up 17 seconds (health: starting) 22/tcp, 443/tcp, 0.0.0.0:8080->80/tcp, :::8080->80/tcp gitlab
P
手順(docker compose版)
次はdocker composeを使った手順です。
docker composeとは
docker composeとは、複数のコンテナからなるサービスを構築をする機能です。
docker-compose.yml
というファイルを用意して、コンテナごとに定義を用意してやり
docker-compose up -d
を実行するだけで起動できます。
今回はgitlabの単一コンテナを例にした手順ですが、ゆくゆくgitlab runnerコンテナと連携して
CI/CDできる環境を構築するつもりなので、そういった時にdocker composeは便利になります。
流れ
-
docker-compose.yml
の用意 - イメージの取得と、コンテナの作成と起動
- ブラウザでアクセス
docker-compose.yml
の用意
docker-compose.yml
は、「ここ」に用意されています。
ほぼそのままですが、portを変更しています。
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.example.com'
ports:
- '8080:80'
- '443:443'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
ディレクトリ構成はこんな感じ
PS D:\xxx\docker\gitlab> ls
ディレクトリ: D:\xxx\docker\gitlab
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2021/05/16 15:48 368 docker-compose.yml
DockerComposeの状態確認
docker-compose ps
を実行して確認します。
まだ作成も起動もしていないので、何も現れません。
PS D:\xxx\docker\gitlab> docker-compose ps -a
Name Command State Ports
------------------------------
コンテナの作成と起動
docker-compose up -d
を実行します。
もし、イメージを取得してなければ、自動で取得してくれます。
(実行例)
docker-compose up -d
Docker Compose is now in the Docker CLI, try `docker compose up`
Pulling web (gitlab/gitlab-ce:latest)...
latest: Pulling from gitlab/gitlab-ce
a70d879fa598: Pull complete
(中略)
f02a0cd519df: Pull complete
Digest: sha256:526e5d4da70f1b19ca4b95e431b8383d42c1cae21af0a002331cbf3650a2e8d9
Status: Downloaded newer image for gitlab/gitlab-ce:latest
Creating docker_web_1 ... done
DockerComposeの状態確認
起動したコンテナが現れました。
(実行例)
docker-compose ps -a
Name Command State Ports
-----------------------------------------------------------------------------------------------------------------------
docker_web_1 /assets/wrapper Up (health: starting) 0.0.0.0:22->22/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:8080->80/tcp
ブラウザでアクセス
数分待ってから、localhost
にアクセス
どういうわけか443ポートだと接続できるんですが
8080ポートだとERR_EMPTY_RESPONSEとなって接続できない。
気が向いたら後日調べてみようと思います。