目 录CONTENT

文章目录

Docker 入门系列(3)- Docker 服务管理

ZERO
2022-06-18 / 0 评论 / 0 点赞 / 49 阅读 / 0 字

文章转载自https://www.skynemo.cn/archives/03-docker-server-manage

本文中所有描述均以 Docker version 20.10.x 为基准

Docker 的管理

Docker 的管理主要可以分为两个部分:

  • docker 服务管理,主要配置 docker daemon 与 docker engine
  • 镜像与容器的管理

Docker 后台服务管理

docker 后台服务主要由 docker daemon 与 docker engine(守护进程与引擎)组成,可以使用 dockerd 命令在启动时进行配置,也可以使用 daemon.json 文件配置。配置的主要内容有:容器的网络设置、日志输出控制、指定存储引擎(storage driver)、TLS 认证管理,等基础配置

生产中直接使用 dockerd 启动 docker 服务的情况较少。一般情况下,由 systemd 使用默认配置管理 dockerd 的运行,需要修改配置时,则用 daemon.json 配置文件(默认路径:/etc/docker/daemon.json)进行配置

dockerd 命令的可配置选项与 daemon.json 的可配置选项基本一致,详见官网:dockerd | Docker Documentation

镜像与容器管理

镜像与容器是 docker 技术栈的重要组成部分,管理镜像与容器也是 docker 日常运维中最重要的工作,通过 docker 命令可以对容器和镜像进行管理

Docker 后台服务管理

dockerd 启动时配置

dockerd 帮助

使用 dockerd --help 可以查看 dockerd 支持的所有选项参数

root@docker:~# dockerd --help

Usage:	dockerd [OPTIONS]

A self-sufficient runtime for containers.

Options:
      --add-runtime runtime                     Register an additional OCI compatible runtime (default [])
      --allow-nondistributable-artifacts list   Allow push of nondistributable artifacts to registry
      --api-cors-header string                  Set CORS headers in the Engine API
      --authorization-plugin list               Authorization plugins to load
      --bip string                              Specify network bridge IP
  -b, --bridge string                           Attach containers to a network bridge
      --cgroup-parent string                    Set parent cgroup for all containers
      --cluster-advertise string                Address or interface name to advertise
      --cluster-store string                    URL of the distributed storage backend
      --cluster-store-opt map                   Set cluster store options (default map[])

......
......

重要的选项参数

不推荐修改,只推荐在 daemon.json 配置文件中修改

--bip string	   			# 设置 docker0 的IP,同时也指定了容器运行时所在网段

--config-file string		# 设置使用的 daemon.json 配置文件,默认为 "/etc/docker/daemon.json"

--data-root string			# 设置数据存储目录,默认为 /var/lib/docker

--dns list              	# 设置 DNS 服务地址列表

--insecure-registry list	# 设置非安全的仓库地址(私有仓库)

--ip ip						# 设置容器端口绑定在宿主机的哪个 IP 上

--registry-mirror list		# 配置国内加速地址

--storage-driver string		# 配置存储引擎,推荐 overlay2(注:overlay2 只在 Linux Kernel 4.0+ ,且文件系统为 ext4 时支持)

systemd 管理的 dockerd

可以看到 ExecStart 指定 dockerd 启动时并没有带上太多的参数,只是指定了 containerd.sock 文件的位置

root@docker:~# cat /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
BindsTo=containerd.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
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 -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always

......
......

daemon.json

daemon.json 文件可以以 JSON 格式为守护程序设置任何大部分选项,支持的 key 与 dockerd 的选项名称相同(如果选项有多个值,则使用该选项名称的复数形式)

daemon.json 配置文件中设置的选项不得与 dockerd 设置的选项重复。如果选项重复,无论其值如何,docker 守护程序都无法启动

重要的选项参数(推荐配置)

推荐在 daemon.json 配置文件中修改这些选项参数,根据需求修改即可

####### 配置解析  ########
"bip": "172.16.0.1/16"							# 设置 docker0 的IP,同时也指定了容器运行时所在网段

"data-root": "/data/docker"						# 设置数据存储目录为 /data/docker,默认为 /var/lib/docker

"dns": [ "114.114.114.114", "119.29.29.29" ]	# 设置 DNS 服务地址列表

"dns-search": [ "skynemo.cn"]					# 指定默认搜索域

"insecure-registries": ["192.168.1.202:5000"]	# 设置非安全的仓库地址(私有仓库)

"ip": "192.168.1.201"							# 设置容器端口绑定在宿主机的哪个 IP 上

"registry-mirrors": ["https://sqr9a2ic.mirror.aliyuncs.com"]	# 配置国内加速地址

"storage-driver": "overlay2"					# 配置存储引擎,推荐 overlay2(注:overlay2 只在 Linux Kernel 4.0+ ,且文件系统为 ext4 时支持)

示例

配置

# 创建数据存储目录
root@docker:~# mkdir -p /data/docker

# 配置 daemon.json
root@docker:~# vim /etc/docker/daemon.json
{
  "bip": "172.16.0.1/16",
  "data-root": "/data/docker",
  "dns": [ "114.114.114.114", "119.29.29.29" ],
  "dns-search": [ "skynemo.cn"],
  "insecure-registries": ["192.168.1.202:5000"],
  "ip": "192.168.1.201",
  "registry-mirrors": ["https://sqr9a2ic.mirror.aliyuncs.com"],
  "storage-driver": "overlay2"
}

# 重启 docker 才能生效
root@docker:~# systemctl restart docker

查看配置结果

# 查看配置项是否已经生效
root@docker:~# docker info | grep 'Docker Root Dir'
 Docker Root Dir: /data/docker

daemon.json 官方示例

适用于 Linux 宿主机,根据自身项目情况选择配置即可

{
  "allow-nondistributable-artifacts": [],
  "api-cors-header": "",
  "authorization-plugins": [],
  "bip": "",
  "bridge": "",
  "cgroup-parent": "",
  "cluster-advertise": "",
  "cluster-store": "",
  "cluster-store-opts": {},
  "containerd": "/run/containerd/containerd.sock",
  "containerd-namespace": "docker",
  "containerd-plugin-namespace": "docker-plugins",
  "data-root": "",
  "debug": true,
  "default-address-pools": [
    {
      "base": "172.30.0.0/16",
      "size": 24
    },
    {
      "base": "172.31.0.0/16",
      "size": 24
    }
  ],
  "default-cgroupns-mode": "private",
  "default-gateway": "",
  "default-gateway-v6": "",
  "default-runtime": "runc",
  "default-shm-size": "64M",
  "default-ulimits": {
    "nofile": {
      "Hard": 64000,
      "Name": "nofile",
      "Soft": 64000
    }
  },
  "dns": [],
  "dns-opts": [],
  "dns-search": [],
  "exec-opts": [],
  "exec-root": "",
  "experimental": false,
  "features": {},
  "fixed-cidr": "",
  "fixed-cidr-v6": "",
  "group": "",
  "hosts": [],
  "icc": false,
  "init": false,
  "init-path": "/usr/libexec/docker-init",
  "insecure-registries": [],
  "ip": "0.0.0.0",
  "ip-forward": false,
  "ip-masq": false,
  "iptables": false,
  "ip6tables": false,
  "ipv6": false,
  "labels": [],
  "live-restore": true,
  "log-driver": "json-file",
  "log-level": "",
  "log-opts": {
    "cache-disabled": "false",
    "cache-max-file": "5",
    "cache-max-size": "20m",
    "cache-compress": "true",
    "env": "os,customer",
    "labels": "somelabel",
    "max-file": "5",
    "max-size": "10m"
  },
  "max-concurrent-downloads": 3,
  "max-concurrent-uploads": 5,
  "max-download-attempts": 5,
  "mtu": 0,
  "no-new-privileges": false,
  "node-generic-resources": [
    "NVIDIA-GPU=UUID1",
    "NVIDIA-GPU=UUID2"
  ],
  "oom-score-adjust": -500,
  "pidfile": "",
  "raw-logs": false,
  "registry-mirrors": [],
  "runtimes": {
    "cc-runtime": {
      "path": "/usr/bin/cc-runtime"
    },
    "custom": {
      "path": "/usr/local/bin/my-runc-replacement",
      "runtimeArgs": [
        "--debug"
      ]
    }
  },
  "seccomp-profile": "",
  "selinux-enabled": false,
  "shutdown-timeout": 15,
  "storage-driver": "",
  "storage-opts": [],
  "swarm-default-advertise-addr": "",
  "tls": true,
  "tlscacert": "",
  "tlscert": "",
  "tlskey": "",
  "tlsverify": true,
  "userland-proxy": false,
  "userland-proxy-path": "/usr/libexec/docker-proxy",
  "userns-remap": ""
}

0

评论区