実行環境
オペレーティングシステム: Debian GNU/Linux 11 (bullseye)
カーネル: Linux 5.10.0-18-amd64
アーキテクチャ: x86-64
Debian 公式ソフトウェアリポジトリからのインストール#
# ソフトウェアソースを更新し、dockerおよび関連アプリケーションをインストール
sudo apt update && sudo apt install -y docker docker.io docker-compose
# dockerの実行状態を確認
sudo systemctl status docker
# dockerの情報を確認
sudo docker info
# インストールが成功したか確認
sudo docker run hello-world
イメージアクセラレーター#
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors にアクセスして、自分のアリババクラウドのイメージアクセラレーターアドレスを取得
/etc/docker/daemon.json を変更
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"max-concurrent-downloads": 3,
"max-concurrent-uploads": 3,
"max-download-attempts": 3,
"registry-mirrors": ["https://自分のに変更.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://registry.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker オブジェクトのクリーンアップ#
prune コマンドは、もはや使用されていない docker オブジェクトを削除するために使用されます。
# タグ付けされていないすべてのイメージを削除:
$ docker image prune
# コンテナで使用されていないすべてのイメージを削除:
$ docker image prune -af
# 停止しているすべてのコンテナを削除:
$ docker container prune
# マウントされていないすべてのボリュームを削除:
$ docker volume prune
# すべてのネットワークを削除:
$ docker network prune
# dockerのすべてのリソースを削除:
$ docker system prune
コンテナの IP を確認#
# すべてのコンテナのIPを確認
$ docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
# 指定したコンテナのIPネットワーク設定を確認(ネットワーク、IPなどを含む)
$ docker inspect containerId
# コンテナのIPを確認
$ docker exec -it containerId ip addr
docker の起動ディレクトリを変更#
システムをインストールする際に /var パーティションが小さいため、docker の起動後のパスを /home/docker に変更する必要があります。/etc/docker/daemon.json は docker の設定ファイルで、デフォルトでは存在しないため、手動で作成する必要があります。
具体的な操作は以下の通りです:
1: /etc/docker/daemon.json ファイルを設定します。
内容の参考:
{
"data-root":"/home/docker"
}
- daemon.json ファイルを作成し、変更した後はこのファイルを有効にする必要があります
# a.変更後に設定ファイルをリロード
sudo systemctl daemon-reload
# b.dockerサービスを再起動
sudo systemctl restart docker.service
# c.状態を確認
sudo systemctl status docker -l
# d.サービスを確認
sudo docker info
イメージのデバッグ#
# --entrypointを使用して設定(追加で-itオプションを付けると直接コンテナに入れます)、コンテナに成功裏に入ります。
docker run -it --entrypoint /bin/bash --name コンテナ名 イメージ:v30.2.9
プログラムの動的ライブラリ依存関係を確認#
# ldd (Debian GLIBC 2.36-9+deb12u1) 2.36
# Copyright (C) 2022 Free Software Foundation, Inc.
# このソフトウェアは自由です; コピー条件についてはソースを参照してください。保証はありません;
# 商品性や特定の目的への適合性についても保証はありません。
# Roland McGrathとUlrich Drepperによって書かれました。
ldd --version
# 特定のコマンドがどの共有ライブラリファイルのサポートを必要とするかを判断し、指定されたコマンドが独立したシステム内で信頼性を持って実行できることを確認します
ldd /bin/bash
参考#
Docker 公式インストールドキュメント:
https://docs.docker.com/engine/install/debian/
docker-daemon.json の各設定の詳細#
{
"api-cors-header":"", //——————エンジンAPIでCORSヘッダーを設定
"authorization-plugins":[], //——————ロードする認証プラグイン
"bridge":"", //————コンテナをブリッジに接続
"cgroup-parent":"", //——————すべてのコンテナの親cgroupを設定
"cluster-store":"", //——————分散ストレージバックエンドのURL
"cluster-store-opts":{}, //————————クラスターストレージオプションを設定(デフォルトはmap [])
"cluster-advertise":"", //————————通知するアドレスまたはインターフェース名
"debug": true, //————————デバッグモードを有効にし、有効にすると多くの起動情報が表示されます。デフォルトはfalse
"default-gateway":"", //——————コンテナのデフォルトゲートウェイIPv4アドレス
"default-gateway-v6":"", //——————コンテナのデフォルトゲートウェイIPv6アドレス
"default-runtime":"runc", //————————コンテナのデフォルトOCIランタイム(デフォルトは" runc")
"default-ulimits":{}, //——————コンテナのデフォルトulimit(デフォルトは[])
"dns": ["192.168.1.1"], //——————コンテナのDNSアドレスを設定し、コンテナの/etc/resolv.confファイルで確認できます。
"dns-opts": [], //————————コンテナの/etc/resolv.confファイルの他の設定
"dns-search": [], //————————コンテナの検索ドメインを設定し、検索ドメインを.example.comに設定すると、hostという名前のホストを検索する際に、DNSはhostだけでなく、host.example.comも検索します。注意:設定しない場合、Dockerはホストの/etc/resolv.confを使用してコンテナを構成します。
"exec-opts": [], //————————ランタイム実行オプション
"exec-root":"", //————————実行状態ファイルのルートディレクトリ(デフォルトは’/var/run/docker‘)
"fixed-cidr":"", //————————固定IPのIPv4サブネット
"fixed-cidr-v6":"", //————————固定IPのIPv6サブネット
"data-root":"/var/lib/docker", //————-Dockerが実行時に使用するルートパス、デフォルトは/var/lib/docker
"group": "", //——————UNIXソケットのグループ(デフォルトは"docker")
"hosts": [], //——————コンテナのhostsを設定
"icc": false, //——————コンテナ間通信を有効にする(デフォルトはtrue)
"ip":"0.0.0.0", //————————コンテナポートをバインドする際のデフォルトIP(デフォルトは0.0.0.0)
"iptables": false, //———————iptablesルールの追加を有効にする(デフォルトはtrue)
"ipv6": false, //——————IPv6ネットワークを有効にする
"ip-forward": false, //————————デフォルトはtrue、net.ipv4.ip_forwardを有効にし、コンテナに入った後にsysctl -a | grep net.ipv4.ip_forwardで確認します
"ip-masq":false, //——————IPマスカレードを有効にする(デフォルトはtrue)
"labels":["nodeName=node-121"], //————————dockerホストのラベル、非常に便利な機能、例えば定義:–label nodeName=host-121
"live-restore": true, //——————コンテナがまだ実行中のときにdockerのライブリストアを有効にする
"log-driver":"", //——————コンテナログのデフォルトドライバー(デフォルトは" json-file")
"log-level":"", //——————ログ記録レベルを設定("デバッグ"、"情報"、"警告"、"エラー"、"致命的")(デフォルトは"情報")
"max-concurrent-downloads":3, //——————各リクエストの最大同時ダウンロード数を設定(デフォルトは3)
"max-concurrent-uploads":5, //——————各プッシュの最大同時アップロード数を設定(デフォルトは5)
"mtu": 0, //——————コンテナネットワークMTUを設定
"oom-score-adjust":-500, //——————デーモンのoom_score_adjを設定(デフォルト値は-500)
"pidfile": "", //——————DockerデーモンのPIDファイル
"raw-logs": false, //——————全時間スタンプメカニズム
"selinux-enabled": false, //——————デフォルトはfalse、selinuxサポートを有効にする
"storage-driver":"", //——————使用するストレージドライバー
"swarm-default-advertise-addr":"", //——————デフォルトアドレスまたはクラスター広告アドレスのインターフェースを設定
"tls": true, //————————デフォルトはfalse、TLS認証スイッチを有効にする
"tlscacert": "", //——————デフォルトは~/.docker/ca.pem、CA認証されたcertificateファイルのパス
"tlscert": "", //————————デフォルトは~/.docker/cert.pem、TLSのcertificateファイルのパス
"tlskey": "", //————————デフォルトは~/.docker/key.pem、TLSのkeyファイルのパス
"tlsverify": true, //————————デフォルトはfalse、TLSを使用し、バックグラウンドプロセスとクライアント通信の検証を行う
"userland-proxy":false, //——————userlandプロキシを使用してループバックトラフィックを処理(デフォルトはtrue)
"userns-remap":"", //————————ユーザー名前空間のユーザー/グループ設定
"bip":"192.168.88.0/22", //——————————ブリッジIPを指定
"registry-mirrors": ["https://192.498.89.232:89"], //————————イメージアクセラレーションを設定
"insecure-registries": ["192.168.0.123:12312"], //———————プライベートリポジトリのアドレスをhttpに設定可能
"storage-opts": [
"overlay2.override_kernel_check=true",
"overlay2.size=15G"
], //————————ストレージドライバーオプション
"log-opts": {
"max-file": "3",
"max-size": "10m",
}, //————————コンテナのデフォルトログドライバーオプション
"iptables": false //————————iptablesルールの追加を有効にする(デフォルトはtrue)
}