docker run
のパラメタが多いと設定変更して再実行しづらかったりメンテが大変なので、YAMLに書いてdocker-compose
で実行すれば色々と便利です。
ということで、お題として以下のGitLab CEを起動するdocker run
をdocker-compose
で動かせるようにしてみます。
元のdocker run
$ sudo docker run --detach \ --hostname gitlab-ce.example.org \ --env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab-ce.example.org:8443'; nginx['listen_port']=8443; gitlab_rails['registry_enabled']=true; registry_external_url 'https://gitlab-ce.example.org:25000'" \ --publish 8443:8443 --publish 25000:25000 \ --name gitlab-registry \ --restart always \ --volume /opt/gitlab-reg/config:/etc/gitlab:Z \ --volume /opt/gitlab-reg/logs:/var/log/gitlab:Z \ --volume /opt/gitlab-reg/data:/var/opt/gitlab:Z \ --volume /opt/gitlab-reg/registry:/var/opt/gitlab/gitlab-rails/shared/registry:Z \ --volume /opt/gitlab-cert:/etc/gitlab/ssl \ gitlab/gitlab-ce:12.7.4-ce.0
これにちょっとパラメタ追加したり変更して再実行したりするの、まぁめんどいよね、というお話。
docker-composeのインストール
debian系だとapt
で入るけど、yum
だとリポジトリにないので、公式の手順通りGitHubからダウンロードしてインストールする。
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 617 100 617 0 0 1720 0 --:--:-- --:--:-- --:--:-- 1718 100 16.3M 100 16.3M 0 0 3150k 0 0:00:05 0:00:05 --:--:-- 4093k $ ls -l /usr/local/bin/docker-compose -rw-r--r--. 1 root root 17176256 2月 28 07:12 /usr/local/bin/docker-compose $ sudo chmod 775 /usr/local/bin/docker-compose $ docker-compose version docker-compose version 1.25.4, build 8d51620a docker-py version: 4.1.0 CPython version: 3.7.5 OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
Compose fileを書く
みんな大好きYAML
docker run
で指定してるパラメタを基本そのまま書けばいい。
-d(--detach)
のみはコンテナの動作自体の動作ではなく、docker-compose
の引数に指定する必要があるのでここには書かない。
--- version: '3' services: gitlab-registry: image: gitlab/gitlab-ce:12.7.4-ce.0 hostname: gitlab-ce.example.org restart: always ports: - "8443:8443" - "25000:25000" environment: GITLAB_OMNIBUS_CONFIG: "external_url 'https://gitlab-ce.example.org:8443'; nginx['listen_port']=8443; gitlab_rails['registry_enabled']=true; registry_external_url 'https://gitlab-ce.example.org:25000'" volumes: - /opt/gitlab-reg/config:/etc/gitlab:Z - /opt/gitlab-reg/logs:/var/log/gitlab:Z - /opt/gitlab-reg/data:/var/opt/gitlab:Z - /opt/gitlab-reg/registry:/var/opt/gitlab/gitlab-rails/shared/registry:Z - /opt/gitlab-cert:/etc/gitlab/ssl
リファレンスはこちら
起動
元コンテナの停止
docker run
で既に実行済みのコンテナがあれば止めておく(同じ設定で動かすのでportとかコンフリクトする)
[zaki@registry gitlab]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 64248b188a0e gitlab/gitlab-ce:12.7.4-ce.0 "/assets/wrapper" 3 weeks ago Up 43 minutes (healthy) 22/tcp, 80/tcp, 0.0.0.0:8443->8443/tcp, 443/tcp, 0.0.0.0:25000->25000/tcp gitlab-registry [zaki@registry gitlab]$ sudo docker stop gitlab-registry gitlab-registry [zaki@registry gitlab]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [zaki@registry gitlab]$
docker-compose up
ここで(必要に応じて)-d
を付ける
[zaki@registry gitlab]$ sudo /usr/local/bin/docker-compose up -d Creating network "gitlab_default" with the default driver Creating gitlab_gitlab-registry_1 ... done [zaki@registry gitlab]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 651cc6c71558 gitlab/gitlab-ce:12.7.4-ce.0 "/assets/wrapper" 14 seconds ago Up 13 seconds (health: starting) 22/tcp, 80/tcp, 0.0.0.0:8443->8443/tcp, 443/tcp, 0.0.0.0:25000->25000/tcp gitlab_gitlab-registry_1
あとは起動するまで少し待てばOK
[zaki@registry gitlab]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 651cc6c71558 gitlab/gitlab-ce:12.7.4-ce.0 "/assets/wrapper" 3 minutes ago Up 2 minutes (healthy) 22/tcp, 80/tcp, 0.0.0.0:8443->8443/tcp, 443/tcp, 0.0.0.0:25000->25000/tcp gitlab_gitlab-registry_1
停止・その他コマンド
頻度が高いものをピックアップ
composeファイルを編集して再起動(コンテナ再作成)
running状態のままおもむろにdocker-compose up
すれば再作成される。便利
# docker-compose up -d Recreating gitlab_gitlab-registry_1 ... done
Recreatingの通り、起動中だったコンテナは破棄されて、新しいコンテナが起動する。
データを永続化したい場合はvolumes
設定をお忘れなく。
停止・削除する(down)
# docker-compose down
コンテナが停止して更に削除される。
(docker ps -a
しても残らない)
ホストOSに設定したvolumeは消えないのでご安心を。。
再度実行するにはup
する。
ポートのpublish
設定など変更する場合はこちら。
停止する(stop)
# docker-compose stop
停止しただけなので、docker ps -a
すれば見える。
停止中コンテナの起動(start)
stopされたコンテナを再起動する
# docker-compose start
ログを見る(logs)
# docker-compose logs
特定のコンテナのログのみ見るには、サービス名を指定。
# docker-compose logs gitlab-registry
tail -f
的に見るには-f
追加。
# docker-compose logs -f
SSH
2020.12.12追記:
ここまでSSHの設定に増えれてなかったので、以下の記事で追加