なんとなく k8s や Docker をここ数年触ってはいるものの、まだまだ理解が足りないため。 気ままにツールや仕組みを触ることで上達を目指す。 まずは、日本語でメモを取る

Docker

Finch (OSS Client for container development)

https://github.com/runfinch/finch

  • integrated with nerdctl
    • CLI for containerd : ビルド、ラン、プッシュ、プルを依存
    • containerd 向けの CLI なので、 containerd にも依存
      • docker の高レベルランタイム(実行環境)
    • VM の管理は Lima

使い方

  • brew install –cask finch

使ってみた

# セットアップ :    (めっちゃ時間かかる)
finch vm init

# remote image 実行 / ポートをバインド (rm は停止済みコンテナを自動で削除する)
finch run --name nginx -p 8080:80 --rm docker.io/library/nginx

# status 確認 (ポートのバインドを確認する)
finch ps
CONTAINER ID    IMAGE                             COMMAND                   CREATED          STATUS    PORTS                   NAMES
f08d5ca20212    docker.io/library/nginx:latest    "/docker-entrypoint.…"    2 minutes ago    Up        0.0.0.0:8080->80/tcp    nginx

# 中に入って bash を実行する
finch exec -it f08d5ca20212 /bin/bash

コマンド確認(適当にピックアップ)

finch --help
  • image 作成系
    • build
    • builder
    • commit
    • pull
    • push
    • rmi
  • compose
  • log 系
    • events : Get real time events from the server
    • history
    • logs
  • 管理系
    • images
    • load : load from stdin / tar file
    • rm
  • デバッグ系 / 状況調査系
    • finch inspect [ContainerID]
      • finch network ls
      • finch port [ContainerID]
      • finch status
      • finch system info
  • ログイン/ログアウト
    • login/logout

image 作成(普通じゃない方法かも?)

finch save [registoryID] > tmp.tar
tar -xvf tmp.tar

tar
finch load hoge.tar

image 作成 (docker build で作成)

Docker File

echo """version: '3.7'
services:
  wordpress:
    image: wordpress:5.7
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html
  db:
    image: mariadb:10.5
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:
""" > test-compose.yaml
  • volumes : データを永続化する仕組み
finch compose -f test-compose.yaml up
curl localhost:8080

# network 周り確認する
finch network ls
NETWORK ID      NAME           FILE
17f29b073143    bridge         /home/shuaki.linux/.config/cni/net.d/nerdctl-bridge.conflist
89934527af27    tmp_default    /home/shuaki.linux/.config/cni/net.d/nerdctl-tmp_default.conflist
                host
                none

finch ps
CONTAINER ID    IMAGE                              COMMAND                   CREATED          STATUS    PORTS                   NAMES
339bdd7d3459    docker.io/library/mariadb:10.5     "docker-entrypoint.s…"    5 minutes ago    Up                                tmp_db_1
fc2bc2dfabb1    docker.io/library/wordpress:5.7    "docker-entrypoint.s…"    5 minutes ago    Up        0.0.0.0:8080->80/tcp    tmp_wordpress_1

  • wordpress → port の binding やってる
  • mariadb は外部マッピングしてない

Docker compose

複数のコンテナを定義し実行する Docker ツール

finch images
REPOSITORY    TAG       IMAGE ID        CREATED           PLATFORM       SIZE         BLOB SIZE
mariadb       10.5      b16e4cbe3d50    54 minutes ago    linux/amd64    404.4 MiB    118.4 MiB
nginx         latest    0047b729188a    10 hours ago      linux/amd64    150.6 MiB    54.2 MiB
wordpress     5.7       37be4c1afbce    52 minutes ago    linux/amd64    564.6 MiB    179.7 MiB

Memo

  • コンテナ:実態はホスト OS 上で動く 1 プロセス
  • Dockerfile: 既存のイメージにレイヤーを重ねるためのテキストファイル
  • Docker のレイヤー増加はおそらく、image の作成/snapshot の作成により解消できると思われる。ある時点で snapshot を作成すれば、その時点の完全なバージョンを生成できる?

mysql image 作成

touch Dockerfile

echo '''
FROM mysql:5.7

ENV MYSQL_ROOT_PASSWORD=my-secret-pw

COPY mysql.cnf /etc/mysql/conf.d/my.cnf''' > Dockerfile
cat mysql.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

[client]
default-character-set=utf8mb4

ビルド

finch build . --tag mysql:local
finch images
finch run --name mysql -p 3306:3306 --rm 5f6d81f68a92
finch ps -a
finch rm mysql

コンテナを永続化したい→データvol.の利用

finch run --name mysql -p 3306:3306  -v data 5f6d81f68a92
finch exec -it 4ab777a6de2b /bin/bash


ls -la
total 20
drwxr-xr-x.   1 root  root   26 Dec 29 02:51 .
drwxr-xr-x.   1 root  root   26 Dec 29 02:51 ..
lrwxrwxrwx.   1 root  root    7 Dec  6 03:07 bin -> usr/bin
dr-xr-xr-x.   1 root  root    0 Apr 11  2018 boot
drwxr-xr-x.   1 root  root    0 Dec 29 02:51 data
finch run --name mysql -p 3306:3306  -v data:/var/lib/mysql 5f6d81f68a92

アプリで接続→接続完了 これでローカルで mysqlq 周りのテストが楽にできるように…! 多分これで来年も Docker をぼちぼち使っていけそう

finch start d2285fc82d0b