Docker
/var/lib/docker 以下を色々みるのがイメージ使い見やすいかも。
実体があると、心理的に安心して、理解を先に行かす事ができる
containerとは?
a standard unit of software that packages up code and all its dependencies
規格化されたsoftwareで、必要なコードとdependenciesをパックしてる。
いままでは、ディスク上のどこかにcotainerが居ると思ってた。
目に見えないものは難しい。抽象概念をつかむには時間かかる。
参考:
@201911 見た。わかりやすかった。
簡潔。わかり始めた段階で理解の整理によい?
ここを最初にやる。英語だけど。
取得したDockerイメージでコンテナ起動
ディレクトリ構造の和、UnionFileSystem
同じマウントポイントに複数のディスクをマウントし、含まれるディレクトリ構造の和として扱うファイルシステム
後からのものが優先される。
comand
ps, run, start, stop, rm, rmi, exec くらいは頭の中にいれておく。
$ alias 'dp=docker ps --format "table {{.Names}}\t{{.Ports}}\t{{.Status}}\t{{.Command}}"' とした。
aliasは、固定表記なので、パラメータを受けるには関数化だが、、
commandがtruncatedされてて、なんか不安。 --no-trunc
monitorモードとかいい。
stat, log, inspect などもできる。
run
--link は、<接続先コンテナ名:エイリアス名>という形式で指定する。
接続元コンテナ内から環境変数を表示すると、エイリアス名のついた環境変数が作られて、接続先の情報が入っていることが分かる。 -v で、Bind mount a volume
docker run -v $HOME/dev/foo/data:/data といった形
が、Userが指定の場合など、permission関連でerrorがでるケースが多そう。
chownで変える?
Environment
-e でcontainer起動時に指定。イメージに入れておく場合はDockerfileにハードコードも可能
--env-fileでファイルを読み込ませることも可能
docker-composeは、versionごとの記法の変更が多い気がするので、version注意。
network
とりあえず、bridgeが一番シンプル。
exec 以下で、containerの内に入る. -i:interactive, -t:tty, /bain/bash: shellの情報を与える。
$ docker exec -it CONTAINER_NAME /bin/bash
リソースを使用状況(cpu, mem, net, io)を見るのに簡便。
tools:
docker groupに入っておく
$ sudo groupadd docker
$ sudo gpasswd -a $USER docker
$ newgrp docker