systemctlのdocker.serviceファイル#
何が正解かを見つけるのは道半ば。自信のない個所や試せてない箇所も多い。
設定ファイルはsystemctlで確認できる。
/lib/systemd/system/docker.serviceって書いてある。
1
2
3
4
5
|
# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled)
: (省略)
|
書き換えたら、必ず実行必要。でもいつも忘れる。
# systemctl daemon-reload
Dockerでサービス停止するときにsocketのメッセージ#
docker利用環境をcent8からubuntu20に引っ越した頃、systemctlでサービス停止するときに「ソケットまだ生きてんでー」みたいなメッセージが出るようになった。
Warning: Stopping docker.service, but it can still be activated by:
docker.socket
とりあえずコンフィグレーションコメント化。
修正前)Requires=docker.socket containerd.service
修正後)# Requires=docker.socket containerd.service
あとは"-H fd://“を外す。
修正前)ExecStart=/usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock -g /docker/nariDockerSys
修正後)ExecStart=/usr/bin/dockerd –containerd=/run/containerd/containerd.sock -g /docker/nariDockerSys
1月末ぐらいまではdockerのバージョンが20だったのが、昨日の朝見たら23になってた。
メジャーバージョンめっちゃ上がってるやん。
特に指定してなかったけど、ストレージドライバがdevicemapperってのをずっと使ってたみたいで、それがエラー吐き出してサービス起動失敗するようになった。
ストレージドライバって???
解説されてる方がおられる。作者さんありがとう。
今のデフォルトはoverlay2らしい。
Dockerのストレージドライバを理解する #overlayfs - Qiita
そういうわけで、ExecStartの箇所の修正はこうしてからコンテナ全部作り直した。
コンテナ置き場のサイズ大きくなってたからいくらかダイエットできたやん。
ExecStart=/usr/bin/dockerd --storage-driver=overlay2 --data-root /docker/nariDockerSys
systemctlでデーモンの設定反映させる。
1
2
3
|
systemctl daemon-reload
systemctl stop docker.service docker.socket
systemctl start docker.service
|
これでdockerのサービス停止のときにメッセージでなくなった。
コンテナも普通に使えてる。
2022年8月追記:最近気づいたのは、systemctl stopでまだメッセージが出力されてしまうことがあった。docker.serviceだけじゃなくdocker.socketもつける必要があった。
Dockerでコンテナの置き場を指定#
rootパーティションにはOS以外のデータ置きたくない。
dockerは何も指定しないと、/var/libの中にデータ置きはじめる。
/var/lib/dockerをソフトリンクさせてみたことあったけど、挙動不審になってうまくいかなかった。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# pwd
/var/lib/docker
# ls -l
合計 48
drwx------ 2 root root 4096 11月 28 04:48 builder
drwx--x--x 4 root root 4096 12月 12 04:17 buildkit
drwx-----x 2 root root 4096 12月 15 03:39 containers
drwx------ 3 root root 4096 11月 28 04:48 image
drwxr-x--- 3 root root 4096 11月 28 04:48 network
drwx------ 3 root root 4096 3月 5 05:28 overlay2
drwx------ 4 root root 4096 11月 28 04:48 plugins
drwx------ 2 root root 4096 3月 5 05:28 runtimes
drwx------ 2 root root 4096 11月 28 04:48 swarm
drwx------ 2 root root 4096 3月 5 05:28 tmp
drwx------ 2 root root 4096 11月 28 04:48 trust
drwx-----x 4 root root 4096 3月 5 05:28 volumes
#
|
勝手に置き場作られると、dockerがコンテナでどれぐらい消費しているのかわからなくなる。docker rmやdocker rmiしてもいくらか容量は残り続けるようなので、気分一新して完全抹消したいときはdockerサービスを停止してから、フォルダごと抹消したらいい。
cent8からubuntu20に引っ越した時コンテナ全部作り直したら、このフォルダの消費量が半分以下になってくれてメチャすっきりした。
このフォルダはコンテナ作成すると消費されるので、抹消してもビルドしなおしたら作り直される。だから日々のバックアップは取らず、docker-compose.ymlで指定する永続化領域だけをバックアップ対象にする。
Google cloudで使ってるubuntuはrootパーティション小さく使っているので、勝手に/var/lib/docker使われると困る。
そこでコンテナの置き場を/docker/nariDockerSysに指定。
残念なのは、aptでdockerのバージョンが上がると、このファイル初期化されてしまう。
手動で書き換えるの面倒。
ま、ときどき点検したいから手動で書き換えることにする。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service time-set.target
Wants=network-online.target containerd.service
## Requires=docker.socket
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --storage-driver=overlay2 --data-root /docker/nariDockerSys
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
## Restart=always
: (省略)
|
ストレージドライバを指定変更して作りなおしたら、コンテナ置き場はこうなった。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# pwd
/docker/nariDockerSys
# ls -l
合計 56
drwx--x--x 5 root root 4096 2月 3 06:29 buildkit
drwx--x--- 11 root root 4096 2月 3 07:17 containers
-rw------- 1 root root 59 2月 3 06:22 engine-id
drwx------ 3 root root 4096 2月 3 06:22 image
drwxr-x--- 3 root root 4096 2月 3 06:22 network
drwx--x--- 151 root root 16384 2月 5 02:10 overlay2
drwx------ 4 root root 4096 2月 3 06:22 plugins
drwx------ 2 root root 4096 2月 5 02:10 runtimes
drwx------ 2 root root 4096 2月 3 06:22 swarm
drwx------ 2 root root 4096 2月 5 02:10 tmp
drwx-----x 4 root root 4096 2月 5 02:10 volumes
# du -shc *
1.4M buildkit
1.1M containers
4.0K engine-id
23M image
96K network
26G overlay2
16K plugins
4.0K runtimes
4.0K swarm
4.0K tmp
4.4M volumes
26G 合計
#
|
動いてるコンテナ9個あるから、そりゃ26GBぐらいになるか。
1
2
3
4
5
6
7
8
9
10
11
12
|
$ docker ps -a | awk '{print $2}'
ID
redhat:9gvis
redhat:8gvis
ubu:22gvis
steveltn/https-portal:1
sv_django:4
mariadb:10.5.7
docker_sv_jupyter
osixia/phpldapadmin:latest
osixia/openldap:latest
$
|