なんとなく 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
- finch inspect [ContainerID]
- ログイン/ログアウト
- 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