Dockerでサービス設定

systemctlのdocker.serviceファイル

何が正解かを見つけるのは道半ば。自信のない個所や試せてない箇所も多い。

設定ファイルはsystemctlで確認できる。
/lib/systemd/system/docker.serviceって書いてある。

# 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

  • 2023年2月5日追記

1月末ぐらいまではdockerのバージョンが20だったのが、昨日の朝見たら23になってた。

メジャーバージョンめっちゃ上がってるやん。

特に指定してなかったけど、ストレージドライバがdevicemapperってのをずっと使ってたみたいで、それがエラー吐き出してサービス起動失敗するようになった。

ストレージドライバって???
解説されてる方がおられる。作者さんありがとう。
今のデフォルトはoverlay2らしい。

Dockerのストレージドライバを理解する - Qiita
Dockerのストレージドライバを理解するはじめにこの記事は「NTTテクノクロス Advent Calendar 2018」の18日目の記事です。執筆はNTTテクノクロスの花上(NaotoHa…

そういうわけで、ExecStartの箇所の修正はこうしてからコンテナ全部作り直した。
コンテナ置き場のサイズ大きくなってたからいくらかダイエットできたやん。

ExecStart=/usr/bin/dockerd --storage-driver=overlay2 --data-root /docker/nariDockerSys

systemctlでデーモンの設定反映させる。

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をソフトリンクさせてみたことあったけど、挙動不審になってうまくいかなかった。

#  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のバージョンが上がると、このファイル初期化されてしまう。

手動で書き換えるの面倒。
ま、ときどき点検したいから手動で書き換えることにする。

[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
 : (省略)

ストレージドライバを指定変更して作りなおしたら、コンテナ置き場はこうなった。

#  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ぐらいになるか。

$ 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
$
タイトルとURLをコピーしました