docker

【docker 笔记】容器与 docker 基础相关整理

2019-04-21  本文已影响11人  58bc06151329

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

1. 容器

特性 容器技术 虚拟机技术
占用磁盘空间 小,甚至几十 KB 非常大,可达 GB
启动速度 快,几秒钟 慢,几分钟
运行形态 直接运行于宿主机内核上,不同容器共享一个 Linux 内核 运行于 hypervisor 上
并发性 一台宿主机可以启动成百上千个容器 最多几十个虚拟机
性能 接近宿主机本地进程 逊于宿主机
资源利用率
隔离性 安全隔离 安全隔离
迁移性 优秀 一般
内存代价 很小 较多

2. Docker

Docker 客户端

/usr/bin/docker-current: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
[root@localhost ~]# ls -al /var/run/docker.sock 
srw-rw----. 1 root root 0 4月  21 21:43 /var/run/docker.sock
[root@localhost ~]# docker version
Client:
 Version:         1.13.1
 API version:     1.26
 Package version: docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      b2f74b2/1.13.1
 Built:           Tue Mar 12 10:27:24 2019
 OS/Arch:         linux/amd64

Server:
 Version:         1.13.1
 API version:     1.26 (minimum version 1.12)
 Package version: docker-1.13.1-94.gitb2f74b2.el7.centos.x86_64
 Go version:      go1.10.3
 Git commit:      b2f74b2/1.13.1
 Built:           Tue Mar 12 10:27:24 2019
 OS/Arch:         linux/amd64
 Experimental:    false

Docker 服务器

[root@localhost ~]# service docker status
Redirecting to /bin/systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since 日 2019-04-21 15:38:59 CST; 11min ago
     Docs: http://docs.docker.com
 Main PID: 12919 (dockerd-current)
    Tasks: 21
   CGroup: /system.slice/docker.service
           ├─12919 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-curr...
           └─12925 /usr/bin/docker-containerd-current -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shi...
[root@localhost ~]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.13.1
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: journald
Cgroup Driver: systemd
Plugins: 
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc docker-runc
Default Runtime: docker-runc
Init Binary: /usr/libexec/docker/docker-init-current
containerd version:  (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc version: df5c38a9167e87f53a9894d77c0950e178a745e7 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f)
init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574)
Security Options:
 seccomp
  WARNING: You're not using the default seccomp profile
  Profile: /etc/docker/seccomp.json
 selinux
Kernel Version: 3.10.0-957.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 3
CPUs: 2
Total Memory: 3.683 GiB
Name: localhost.localdomain
ID: C7UM:TFRF:I5DQ:3VED:GNY5:HGR7:666X:INRQ:GEFN:KFOV:REGQ:3XTN
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false
Registries: docker.io (secure)

Docker 镜像

Docker 容器

Docker 仓库

2.1 安装

[root@localhost ~]# docker pull hello-world
Using default tag: latest
Trying to pull repository docker.io/library/hello-world ... 
latest: Pulling from docker.io/library/hello-world
1b930d010525: Pull complete 
Digest: sha256:92695bc579f31df7a63da6922075d0666e565ceccad16b59c3374d2cf4e8e50e
Status: Downloaded newer image for docker.io/hello-world:latest
[root@localhost ~]# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
docker.io/hello-world   latest              fce289e99eb9        3 months ago        1.84 kB
[root@localhost ~]# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

2.2 项目参数

{
 "api-cors-header": "", 
 "authorization-plugins": [],
 "bip": "",
 "bridge": "",
 "cgroup-parent": "",
 "cluster-store": "",
 "cluster-store-opts": {},
 "cluster-advertise": "",
 "default-shm-size": "64M",
 "shutdown-timeout": 15,
 "debug": true,
 "default-gateway": "",
 "default-gateway-v6": "",
 "default-runtime": "runc",
 "default-ulimits": {},
 "disable-legacy-registry": false,
 "dns": ["192.168.1.1"],
 "dns-opts": [],
 "dns-search": [],
 "exec-opts": [],
 "exec-root": "",
 "fixed-cidr": "",
 "fixed-cidr-v6": "",
 "graph": "/var/lib/docker",
 "data-root": "/var/lib/docker",
 "group": "",
 "hosts": [],
 "icc": false,
 "insecure-registries": [],
 "ip": "0.0.0.0",
 "iptables": false,
 "init": false,
 "init-path": "/usr/libexec/docker-init",
 "ipv6": false,
 "ip-forward": false,
 "ip-masq": false,
 "labels": ["nodeName=node-121"],
 "live-restore": true,
 "log-driver": "",
 "log-level": "",
 "log-opts": {},
 "max-concurrent-downloads": 3,
 "max-concurrent-uploads": 5,
 "mtu": 0,
 "oom-score-adjust": -500,
 "pidfile": "",
 "raw-logs": false,
 "registry-mirrors": ["xxxx"],
 "runtimes": {
        "cc-runtime": {
            "path": "/usr/bin/cc-runtime"
        },
        "custom": {
            "path": "/usr/local/bin/my-runc-replacement",
            "runtimeArgs": [
                "--debug"
            ]
        }
 },
 "node-generic-resources": ["NVIDIA-GPU=UUID1", "NVIDIA-GPU=UUID2"],
 "selinux-enabled": false,
 "storage-driver": "",
 "storage-opts": [],
 "swarm-default-advertise-addr": "",
 "tls": true,
 "tlscacert": "",
 "tlscert": "",
 "tlskey": "",
 "tlsverify": true,
 "userland-proxy": false,
 "userns-remap": ""
 }
项目参数 说明
api-cors-header CORS 头部域,默认不允许 CORS,要允许任意的跨域访问,可以指定为 " * "。
authorization-plugin 载入认证的插件。
bip 让动态创建的 docker0 网桥采用给定的 CIDR 地址。
bridge 将容器挂载到一个已存在的网桥上。指定为 " none " 时则禁用容器的网络,与 bip 选项互斥。
cgroup-parent 指定 cgroup 的父组,默认 fs cgroup 驱动为 /docker,systemd cgroup 驱动为 system.slice。
cluster-store 构成集群(如 Swarm)时,集群键值数据库服务地址。
cluster-store-opts 构成集群时,键值数据库的配置选项。
cluster-advertise 构成集群时,自身的被访问地址,可以为 host:port 或 interface:port。
default-shm-size 设置默认共享内存的大小。
shutdown-timeout 设置关闭的超时时限。
debug 启用 debug 模式,默认 false。
default-gateway 容器的 IPv4 网关地址,必须在网桥的子网段内。
default-gateway-v6 容器的 IPv6 网关地址。
default-runtime OCI 联盟(The Open Container Initiative)默认运行时环境,默认为 runc。
default-ulimits 默认的 ulimit 值。
disable-legacy-registry 是否允许访问旧版本的镜像仓库服务器。
dns 指定容器使用的 DNS 服务器地址,可从 /etc/resolv.conf 文件中查询。
dns-opts DNS 选项。
dns-search DNS 搜索域。当设定搜索域为 .example.com 时,在搜索一个名为 host 的 主机时,DNS 不仅搜索 host,还会搜索 host.example.com。如果不设置,Docker 会默认用主机上的 /etc/resolv.conf 来配置容器。
exec-opts 运行时的执行选项。
exec-root 容器执行状态文件的根路径,默认为 /var/run/docker
fixed-cidr 限定分配 IPv4 地址范围。
fixed-cidr-v6 限定分配 IPv6 地址范围。
graph Docker 运行时的根路径,默认为 /var/lib/docker。已废弃,使用 data-root 代替,这个主要看 Docker 的版本。
data-root Docker 运行时使用的根路径,默认 /var/lib/docker
group 分配给 unix 套接字的组,默认为 docker。仅指 /var/run/docker.sock
hosts 指定命令对应 Docker daemon 的监听接口,可以为 unix 套接字(unix:///path/to/socket),文件句柄(fd://socketfd)或 tcp 套接字(tcp://[host[:port]]),默认为 unix:///var/run/docker.sock。
icc 是否启用容器之间以及跟 daemon 所在主机的通信。默认为 true。
insecure-registries 允许访问给定的非安全仓库服务。
ip 绑定容器端口时候的默认 IP 地址。缺省为 0.0.0.0。
iptables 是否允许 Docker 添加 iptables 规则。缺省为 true。
init 容器执行初始化,来转发信号或控制(reap)进程。
init-path /usr/libexec/docker-init,docker-init 文件的路径。
ipv6 是否启用 IPv6 支持,默认关闭。
ip-forward 是否检查启动在 Docker 主机上的启用 IP 转发服务,默认开启。关闭该选项将不对系统转发能力进行任何检查修改。进入容器后可以使用 sysctl -a | grep net.ipv4.ip_forward 查看。
ip-masq 是否进行地址伪装,用于容器访问外部网络,默认开启。
labels 添加指定的键值对标注,docker 主机的标签。
live-restore 允许在 Docker daemon 停机期间保持容器活动。
log-driver 指定日志后端驱动,默认为 json-file。(可选 json-file、syslog、journald、gelf、fluentd、awslogs、splunk、etwlogs、gcplogs、none)
log-level 指定日志输出级别。(可选 debug、info、warn、error、fatal)
log-opts 日志后端的选项。
max-concurrent-downloads 每次 pull 的最大并发下载量。
max-concurrent-uploads 每次 push 的最大并发上载量。
mtu 指定容器网络的 mtu。
oom-score-adjust 内存溢出被杀死的优先级(-1000~1000),默认 -500。
pidfile 指定 daemon 的 PID 文件路径。缺省为 /var/run/docker.pid
raw-logs 输出原始未加色彩的日志信息。
registry-mirrors 指定 docker pull 时使用的注册服务器镜像地址。增加后在 docker info 中可查看。
runtimes 用于运行容器的可用 OCI 运行时列表。
node-generic-resources 对外公布的资源节点。
selinux-enabled 是否启用 SELinux 支持。缺省值为 false。SELinux 目前尚不支持 overlay 存储驱动。
storage-driver 指定使用给定的存储后端。
storage-opts 驱动后端选项。
swarm-default-advertise-addr swarm 对外地址。
tls 是否对 Docker daemon 启用 TLS 安全机制,默认为 false。
tlscacert TLS CA 签名的可信证书文件路径。默认 ~/.docker/ca.pem
tlscert TLS 可信证书文件路径。默认 ~/.docker/cert.pem
tlskey TLS 密钥文件路径。默认 ~/.docker/key.pem
tlsverify 启用 TLS 校验,默认为 false。
userland-proxy 是否使用用户态代理来实现容器之间和出容器的回环通信,默认为 true。
userns-remap 指定容器的用户命名空间,默认是创建新的 UID 和 GID 映射到容器内进程。(可选 default、uid:gid、user:group、user、uid)
[root@localhost ~]# sudo service docker stop
[root@localhost ~]# sudo ip link set dev docker0 down
[root@localhost ~]# sudo brctl delbr docker0
[root@localhost ~]# sudo service docker restart

2.3 后台进程参数

参数 说明
--api-cors-header= 开放远程 API 调用的 CORS 头信息。这个接口开关对进行二次开发的上层应用提供了支持。
-b, --bridge= 挂载以存在的网桥设备到 Docker 容器里。注意,使用 none 可以停用容器里的网络。
--bip= 使用 CIDR 地址设定网桥的 IP。此参数和 -b 不能一起使用。
-D, --debug=false 开启 Debug 模式。如 docker -d -D。
-d, --daemon=false 开启 Daemon 模式。
--default-gateway= 容器默认网关 IPv4 地址。
--default-gateway-v6= 容器默认网关 IPv6 地址。
--default-ulimit=[] 容器设置默认 ulimits。
--dns=[] 强制容器使用 DNS 服务器。例如:docker -d --dns 8.8.8.8。
--dns-search=[] 强制容器使用指定的 DNS 搜索域名。例如:docker -d --dns-search example.com。
-e, --exec-driver=native 强制容器使用指定的运行时驱动。例如:docker -d -e lxc。
--exec-opt=[] 设置执行驱动选项。
--exec-root=/var/run/docker 配置 Docker 执行驱动的根目录。
--fixed-cidr= IPv4 子网设置掩码(ex:10.20.0.0.0/16),这个子网必须嵌套于网桥子网内(由 -b 或者 --bip 定义)。
--fixed-cidr-v6= IPv6 子网设置掩码。
-G, --group=docker 在后台运行模式下,赋予指定的 group 到相应的 unix socket 上。当参数 --group 赋予空字符串时,将去除组信息。
-g, --graph=/var/lib/docker 配置 Docker 运行时根目录。
-H, --host=[] 在后台模式下指定 socket 绑定,可以绑定一个或多个 tcp://host:port,unix:///path/to/socket,fd://* 或 fd://socketfd 例如:docker -H tcp://0.0.0.0:2375 ps。
-h, --help=false 帮助。
--icc=true 启用内联容器的通信。
--insecure-registry=[] 对于特定注册启用非安全通信(对于 HTTPS 没有证书校验,启用 HTTP 启用 fallback)。
--ip=0.0.0.0 容器绑定 IP 时使用的默认 IP 地址。
--ip-forward=true 启用容器的 net.ipv4.ip_forward。
--ip-masq=true 对于网桥的 IP 段启用 ip 伪装。
--iptables=true 启用 Docker 容器自定义的 iptable 规则。
--ipv6=false 启用 IPv6 网络。
-l, --log-level=info 设置日志级别。
--label=[] 为守护进程设置标签。
--log-driver=json-file 默认容器驱动日志。
--log-opt=map[] 设置日志驱动选项。
--mtu=0 设置容器网络的 MTU 值,如果没有这个参数,选用默认 route MTU,如果没有默认 route,就设置常量值 1500。
-p, --pidfile=/var/run/docker.pid 后台进程 PID 文件路径。
--registry-mirror=[] 指定优先使用的 Docker registry 镜像。
-s, --storage-driver= 强制容器运行时使用指定的存储驱动。例如:指定使用 devicemapper,docker -d -s devicemapper。
--selinux-enabled=false 启用 SELinux 支持。
--storage-opt=[] 配置存储驱动的参数。
--tls=false 启用 TLS 默认开关。
--tlscacert=~/.docker/ca.pem 通过 CA 认证过的 certificate 文件路径。
--tlscert=~/.docker/cert.pem TLS 的 certificate 文件路径。
--tlskey=~/.docker/key.pem TLS 的 key 文件路径。
--tlsverify=false 使用 TLS 并做后台进程与客户端通讯的验证。
--userland-proxy=true 回路使用用户代理。
-v, --version=false 显示版本信息。
上一篇下一篇

猜你喜欢

热点阅读