docker-composeよ、さらば(dockerでV2利用)

docker-composeが非推奨になってEOLになってるの忘れてた。
代わりにdocker compose使えってか。

時間かかるかなぁって構えてたけど、あっさり終わった。

さらば、docker-compose。
もうバージョン上げることもない。

何が変わったんやろ

GAっていう言い方で解説されてる方がいた。
作者さんありがとう。

Docker Compose V2(Version 2) GA のまとめ - Qiita
概要2022年4月26日、Docker Compose Version 2 (以下「Compose V2」と省略)が GA(一般提供開始)になったと Docker Blog で発表 がありました。…

そういえば、今年の春頃、何気にaptしてたらdockerのバージョンが20から23に上がってたことあったな。
なんでか知らんけどコンテナの名前が勝手に変わってた。

作者さんのサイトによると、

  1. コマンドラインが、V1はdocker-composeで次のV2はdocker compose
  2. コンテナ名の命名規則が Compose V1 の「_」(アンスコ)から、Compose V2 は「-」(ハイフン)に変わる
  3. V1のdocker-compose.ymlファイルは、V2用にcompose.ymlに変更する必要あるけど、今はdocker-compose.ymlでも受け付ける

英文やけど、違いの解説もあった。

Migrate to Compose V2
How to migrate from Compose V1 to V2

--scaleとか--compatibilityの差があるでって書いてあるけど、使ってへんし関係なさそうやな。

自分の場合は運用シェル作って使ってるから、シェル本来の機能が使えるようにするだけでええ。

変更対処

春頃にコンテナの名前が変わったなって気づいたとき、dockerにcomposeの機能がくっついたのは知らんかった。

バージョン番号が23やったかと思ったら今は24みたい。

nari@nafslinux-ubu22:/docker$ docker version 
Client: Docker Engine - Community
 Version:           24.0.5
 API version:       1.43
 Go version:        go1.20.6
 Git commit:        ced0996
 Built:             Fri Jul 21 20:35:18 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.5
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.6
  Git commit:       a61e2b4
  Built:            Fri Jul 21 20:35:18 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.22
  GitCommit:        8165feabfdfe38c65b599c4993d227328c231fca
 runc:
  Version:          1.1.8
  GitCommit:        v1.1.8-0-g82f18fe
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
nari@nafslinux-ubu22:/docker$

docker composeにもバージョンがある。

nari@nafslinux-ubu22:/docker$ docker compose version 
Docker Compose version v2.20.2 
nari@nafslinux-ubu22:/docker$

自分の環境はコンテナの名前依存してないから、アンスコがハイフンになってもあんまり苦しいわけやない。

対処考えたらこんな感じ。

  1. docker-compose.ymlの定義に沿って、いったんコンテナ全停止
  2. docker-compose.ymlをcompose.ymlに書き換え
  3. compose.ymlを使うように運用スクリプトを更新

ほないってみよか。

docker-compose.ymlの定義に沿って、いったんコンテナ全停止

普通に停止。

nari@nafslinux-ubu22:/docker$ sh ./dockerStop.sh 
[+] Stopping 5/5 ✔ Container docker-sv_https-portal-1 Stopped 3.8s 
✔ Container docker-cl_ubu22gvis-1 Stopped 0.4s 
✔ Container docker-sv_jupyter-1 Stopped 0.5s 
✔ Container docker-sv_django-1 Stopped 10.2s 
✔ Container docker-sv_mariadb1011-1 Stopped 0.6s 
[+] Stopping 5/0 
✔ Container docker-cl_ubu22gvis-1 Stopped 0.0s 
✔ Container docker-sv_https-portal-1 Stopped 0.0s 
✔ Container docker-sv_mariadb1011-1 Stopped 0.0s 
✔ Container docker-sv_jupyter-1 Stopped 0.0s 
✔ Container docker-sv_django-1 Stopped 0.0s 
nari@nafslinux-ubu22:/docker$

スクリプトは省略するけど、停止してるだけ。

 /usr/bin/docker-compose stop

使い始めの頃、stopって書かなアカンのを、upに対するdownって書いてしもてコンテナ全部吹っ飛んだことあったなぁ。

docker-compose.ymlをcompose.ymlに書き換え

docker-compose.ymlの1行目には例えば「version: ‘3’」とか書いてて、書き方そのもののバージョン指定があった。

なんとcompose.ymlはそのバージョン指定だけを外した内容でいけた(そのうち何かに気づいて慌てて修正するかもしれんけど)。

LDAPとか扱わんようになったから、あんまり使わんコンテナも削除して整理したcompose.ymlのがコレ。

services:
  sv_jupyter:
    hostname: svjupyter
    build:
      context: ./nariDockerDat/sv_jupyter/py3
      dockerfile: sv_jupyter_Dockerfile
    entrypoint: >
      jupyter-lab
      --allow-root
      --ip=0.0.0.0
      --port=8888
      --no-browser
      --NotebookApp.token=''
      --notebook-dir=/workspace
    ports:
      - "21088:8888"
    volumes:
      - ./nariDockerDat/sv_jupyter/py3/root_jupyter:/root/.jupyter
      - ./nariDockerDat/sv_jupyter/workspace:/workspace

  sv_mariadb1011:
    hostname: svmariadb1011
    build:
      context: ./nariDockerDat/sv_mariadb11/
      dockerfile: sv_mariadb11_Dockerfile
    image: mariadb:1011
    ports:
      - "13306:3306"
    env_file:
      - ./nariDockerDat/sv_mariadb11/env_sv_mariadb11.txt
    volumes:
      - ./nariDockerDat/sv_mariadb11/data:/var/lib/mysql
      - ./nariDockerDat/sv_mariadb11conf:/etc/mysql/conf.d

  sv_https-portal:
    image: steveltn/https-portal:1
    ports:
      - "30080:80"
      - "30443:443"
    environment:
      DOMAINS: 'nafslinux.intra.gavann-it.com -> http://svdjango:8080'
      STAGE: 'local' # or 'production'
    volumes:
      - ./nariDockerDat/sv_django-ssl_certs:/var/lib/https-portal

  sv_django:
    image: sv_django:4
    build: ./nariDockerDat/sv_django-uwsgi-nginx
    hostname: svdjango
    volumes:
      - ./nariDockerDat/sv_django-uwsgi-nginx/app:/code/app
    ports:
      - "38080:8080"

  cl_ubu22gvis:
    image: gvis-ubu22:22gvis
    privileged: true
    hostname: clubu22
    ports:
      - "33389:3389"
    volumes:
      - ./nariDockerDat/cl_ubun22:/gvis
    tty: true
    shm_size: 512m
    

compose.ymlを使うように運用スクリプトを更新

ホンマは起動スクリプトの最初のほうにcssのコピーとかいろいろ前処理あるんやけど、compose使ってるとこだけ抜粋。

:(中略) 
/usr/bin/docker compose start sv_mariadb1011 
sleep 20 
/usr/bin/docker compose up --no-recreate -d 
exit

dockercomposeの間にあったハイフン外しただけですわな。

昔はdependとか書いてたこともあるけど、「起動の順位は守るけど、db待受できた状態まで待つかはしらんよ」ってことやったから、mariadbだけ先に起動して20秒だけ待たせて他のコンテナ起動してる。

これがoracleのコンテナやったら2分ぐらい待たせてた。

起動したらこんな感じ。

nari@nafslinux-ubu22:/docker$ sh ./dockerStart.sh 
[+] Running 1/1
 ✔ Container docker-sv_mariadb1011-1  Started                                                  0.4s 
[+] Running 5/5
 ✔ Container docker-sv_https-portal-1  Started                                                 1.2s 
 ✔ Container docker-sv_jupyter-1       Started                                                 1.1s 
 ✔ Container docker-sv_mariadb1011-1   Running                                                 0.0s 
 ✔ Container docker-cl_ubu22gvis-1     Started                                                 1.0s 
 ✔ Container docker-sv_django-1        Started                                                 1.0s 
nari@nafslinux-ubu22:/docker$ 

ずいぶん前に何かの理由で--no-recreateってつけたんやけど、なんでやったか忘れた。

10日ほど経って不具合ないから、それでもちゃんと動いてはくれてそう。

macの中のminikubeには影響ない

今はmacの中でminikube使って試してる。

minikubeはコントロールプレーンっていうか、根っこの機能がdockerコンテナとして動いてる。

brewで入れたら動くけど、kubectlをスクリプトの中に書いてPod操作とかに使ってるから、composeは使ってない。

ちょっと確認でminikube sshして気づいたけど、composeが使えんのやなぁ。

nari@gvis-mac minikube % minikube ssh 
                         _             _            
            _         _ ( )           ( )           
  ___ ___  (_)  ___  (_)| |/')  _   _ | |_      __  
/' _ ` _ `\| |/' _ `\| || , <  ( ) ( )| '_`\  /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )(  ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)

$ docker version 
Client:
 Version:           24.0.4
 API version:       1.43
 Go version:        go1.20.5
 Git commit:        3713ee1
 Built:             Fri Jul  7 14:49:50 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          24.0.4
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.5
  Git commit:       4ffc614
  Built:            Fri Jul  7 14:51:12 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.7.2
  GitCommit:        0cae528dd6cb557f7201036e9f43420650207b58
 runc:
  Version:          1.1.7
  GitCommit:        860f061b76bb4fc671f0f9e900f7d80ff93d4eb7
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
$ docker compose version
docker: 'compose' is not a docker command.
See 'docker --help'
$ 

こうしてdocker-composeから脱却完了ね。
linuxにcurlで取ってきたモジュールも潰した。

タイトルとURLをコピーしました