Docker命令行参考(2) – dockerd启动docker daemon

用法:

  1. Usage: dockerd [OPTIONS]
  2.  
  3. A self-sufficient runtime for containers.
  4.  
  5. Options:
  6.  
  7.       --add-runtime=[]                       Register an additional OCI compatible runtime
  8.       --api-cors-header                      Set CORS headers in the remote API
  9.       --authorization-plugin=[]              Authorization plugins to load
  10.       -b, --bridge                           Attach containers to a network bridge
  11.       --bip                                  Specify network bridge IP
  12.       --cgroup-parent                        Set parent cgroup for all containers
  13.       --cluster-advertise                    Address or interface name to advertise
  14.       --cluster-store                        URL of the distributed storage backend
  15.       --cluster-store-opt=map[]              Set cluster store options
  16.       --config-file=/etc/docker/daemon.json  Daemon configuration file
  17.       --containerd                           Path to containerd socket
  18.       -D, --debug                            Enable debug mode
  19.       --default-gateway                      Container default gateway IPv4 address
  20.       --default-gateway-v6                   Container default gateway IPv6 address
  21.       --default-runtime=runc                 Default OCI runtime for containers
  22.       --default-ulimit=[]                    Default ulimits for containers
  23.       --disable-legacy-registry              Disable contacting legacy registries
  24.       --dns=[]                               DNS server to use
  25.       --dns-opt=[]                           DNS options to use
  26.       --dns-search=[]                        DNS search domains to use
  27.       --exec-opt=[]                          Runtime execution options
  28.       --exec-root=/var/run/docker            Root directory for execution state files
  29.       --fixed-cidr                           IPv4 subnet for fixed IPs
  30.       --fixed-cidr-v6                        IPv6 subnet for fixed IPs
  31.       -G, --group=docker                     Group for the unix socket
  32.       -g, --graph=/var/lib/docker            Root of the Docker runtime
  33.       -H, --host=[]                          Daemon socket(s) to connect to
  34.       --help                                 Print usage
  35.       --icc=true                             Enable inter-container communication
  36.       --insecure-registry=[]                 Enable insecure registry communication
  37.       --ip=0.0.0.0                           Default IP when binding container ports
  38.       --ip-forward=true                      Enable net.ipv4.ip_forward
  39.       --ip-masq=true                         Enable IP masquerading
  40.       --iptables=true                        Enable addition of iptables rules
  41.       --ipv6                                 Enable IPv6 networking
  42.       -l, --log-level=info                   Set the logging level
  43.       --label=[]                             Set key=value labels to the daemon
  44.       --live-restore                         Enables keeping containers alive during daemon downtime
  45.       --log-driver=json-file                 Default driver for container logs
  46.       --log-opt=map[]                        Default log driver options for containers
  47.       --max-concurrent-downloads=3           Set the max concurrent downloads for each pull
  48.       --max-concurrent-uploads=5             Set the max concurrent uploads for each push
  49.       --mtu                                  Set the containers network MTU
  50.       --oom-score-adjust=-500                Set the oom_score_adj for the daemon
  51.       -p, --pidfile=/var/run/docker.pid      Path to use for daemon PID file
  52.       --raw-logs                             Full timestamps without ANSI coloring
  53.       --registry-mirror=[]                   Preferred Docker registry mirror
  54.       -s, --storage-driver                   Storage driver to use
  55.       --selinux-enabled                      Enable selinux support
  56.       --storage-opt=[]                       Storage driver options
  57.       --swarm-default-advertise-addr         Set default address or interface for swarm advertised address
  58.       --tls                                  Use TLS; implied by --tlsverify
  59.       --tlscacert=~/.docker/ca.pem           Trust certs signed only by this CA
  60.       --tlscert=~/.docker/cert.pem           Path to TLS certificate file
  61.       --tlskey=~/.docker/key.pem             Path to TLS key file
  62.       --tlsverify                            Use TLS and verify the remote
  63.       --userland-proxy=true                  Use userland proxy for loopback traffic
  64.       --userns-remap                         User/Group setting for user namespaces
  65.       -v, --version                          Print version information and quit

以上选项值为[]可以指定多次。dockerd是管理容器的常驻进程。daemon和客户端使用了不同的二进制文件。直接键入dockerd执行daemon。

Daemon socket选项

docker daemon监听三个不同类型的socket:unix,tcp和fd来处理Docker Remote API请求。
默认下,unix域名套接字[或IPC套接字]创建在/var/run/docker.sock,需要root权限或用户属于docker组。
如果需要开放docker daemon远程访问,需要启用tcp套接字。请注意默认的daemon配置没有加密和验证直接就能访问daemon – 应该使用内置的HTTPS加密的socket,或在它前面放置一个安全的web代理。可以使用-H tcp://0.0.0.0:2375在所有网络接口上监听2375端口,也可以使用-H tcp://192.168.59.103:2375在指定的网络接口监听。一般约定使用端口2375来监听非加密请求,使用2376来监听加密请求。

注意:如果使用了HTTPS加密套接字,记住只支持TLS1.0和以上版本的协议。SSLv3协议和之前的版本由于安全原因不再支持。

在基于systemd的系统,可以通过systemd socket activation使用dockerd -H fd://与daemon通信。使用fd://在大多数情况工作良好,不过也可以指定一个单独的sockets:dockerd -H fd://。如果指定的socket activated文件没有找到,docker将退出。
可以指定多次-H选项来设置docker监听多个sockets:

  1. # listen using the default unix socket, and on 2 specific IP addresses on this host.
  2. $ sudo dockerd -H unix:///var/run/docker.sock -H tcp://192.168.59.106 -H tcp://10.10.10.2

如果docker client没有指定-H选项,它将尝试查找环境变量DOCKER_HOST。

  1. $ docker -H tcp://0.0.0.0:2375 ps
  2. # or
  3. $ export DOCKER_HOST="tcp://0.0.0.0:2375"
  4. $ docker ps
  5. # both are equal

设置环境变量DOCKER_TLS_VERIFY为任何一个非空值,等同于–tlsverify参数。如下是等效的:

  1. $ docker --tlsverify ps
  2. # or
  3. $ export DOCKER_TLS_VERIFY=1
  4. $ docker ps

Docker客户端将遵守HTTP_PROXY,HTTPS_PROXY和NO_PROXY环境变量(或其小写版本)。 HTTPS_PROXY优先于HTTP_PROXY。

绑定docker到另一个host/port或unix socket

警告:更改默认的docker daemon绑定到一个TCP端口或Unix docker用户组会允许非root用户获取daemon的root访问权限,这将增加安全风险。确保仔细控制docker的访问权限。如果绑定到一个TCP端口,那么能够访问此端口的用户将对docker的完全的访问权限;所以不建议在一个开放的网络绑定端口。

使用-H参数可以使docker daemon监听在指定IP和端口。默认监听unix:///var/run/docker.sock只允许root用户在本地连接。可以设置0.0.0.0:2375或指定一个主机IP来给所有人访问权限,不过这不推荐因为这非常不安全。
类似的,docker客户端可以使用-H连接到一个自定义端口。Linux上docker客户端默认连接到unix:///var/run/docker.sock,windows连接到tcp://127.0.0.1:2376。
-H接受如下的格式:

  1. tcp://[host]:[port][path] or unix://path

例如:

  • tcp:// -> 监听tcp的127.0.0.1,当TLS加密启用时使用2376端口,否则使用2375端口。
  • tcp://host:2375 -> 监听在tcp的host:2375
  • tcp://host:2375/path -> 监听在tcp的host:2375并添加前缀路径到所有请求。
  • unix://path/to/socket -> 监听unix socket,路径为path/to/socket。
  • 当-H为空时,与没有指定-H选项时的默认值一样。
    -H也接受TCP绑定的简短格式:host: 或 host:port 或 :port
    以daemon模式运行docker:

    1. $ sudo <path to>/dockerd -H 0.0.0.0:5555 &

    下载ubuntu镜像:

    1. $ docker -H :5555 pull ubuntu

    可以使用多个-H,例如,既监听TCP也监听unix socket

    1. # Run docker in daemon mode
    2. $ sudo <path to>/dockerd -H tcp://127.0.0.1:2375 -H unix:///var/run/docker.sock &
    3. # Download an ubuntu image, use default Unix socket
    4. $ docker pull ubuntu
    5. # OR use the TCP port
    6. $ docker -H tcp://127.0.0.1:2375 pull ubuntu

    daemon DNS选项

    为所有docker容器设置DNS服务器,使用:

    1. $ sudo dockerd --dns 8.8.8.8

    为所有docker容器设置DNS search domain,使用:

    1. $ sudo dockerd --dns-search example.com

    Insecure registries

    Docker把私有的registry分为安全或不安全的。下面章节,我们用registry表示私有的registry,myregistry:5000作为私有的registry的示例。
    一个安全的registry使用TLS且它的CA证书副本在docker主机的/etc/docker/certs.d/myregistry:5000/ca.crt。一个不安全的registry不使用TLS或使用了TLS,但其CA证书没有在docker daemon指定的路径或是错误的CA。
    默认下,docker假设所有的,除了本地的,registry是安全的。如果Docker假设这个registry是安全的,那与一个不安全的registry通信是不可能的。为了与一个不安全的registry通信,docker daemon要求以下面两种格式其中一种指定–insecure-registry:

  • –insecure-registry myregistry:5000 告诉docker daemon myregistry:5000是不安全的registry。
  • –insecure-registry 10.1.0.0/16 告诉docker daemon所有的registry域名解析出的IP地址在这个IP范围的registry是不安全的。
  • 这个参数可以使用多次来指定多个不安全的registry。
    如果一个不安全的registry没有标记为不安全的,docker pull,docker push和docker search将会得到一个错误来提示用户使用安全的registry或在daemon设置–insecure-registry参数。
    本地的registry,那么解析出来的IP在127.0.0.0/8范围的,从Docker 1.3.2起就自动标记为不安全的registry。不推荐依赖这个,因为未来版本可能会更改。
    启用–insecure-registry,允许非加密或不被信任的通信,在运行一个本地registry会有用。不过,因为这会产生安全漏洞,它只应该作为测试目的。 为了提高安全性,用户应该将CA添加到其系统的受信任CA列表中,而不是启用–insecure-registry。

    daemon配置文件

    –config-file允许设置JSON格式的daemon配置文件。这个文件使用与选项一样的名称作为key,除了那么允许多个值的选项,那就使用这个选项名称的复数,如label选项,使用labels作为key。
    在配置文件的选项设置不能与命令行的选项设置冲突。如果一个选项在配置文件和命令行设置了,docker daemon将会启动失败。我们这样做是为了避免在配置文件重载时,会静默忽略对此选项的修改。

    标签:Docker 发布于:2019-11-19 16:40:06