-h hostname 指定hostname --dns 114.114.114.114 指定域名 会直接修改容器的resolv.conf文件 --dns-search ilinux.io 指定搜索域 会直接修改容器的resolv.conf文件 --add-host host:ip 自动注入到容器的hosts文件解析记录 docker port docker_name 查看开放端口 -p 宿主机端口:容器端口 绑定宿主机端口和容器的映射 -p 宿主机ip地址:宿主机端口:容器端口 绑定宿主机地址和端口和容器的映射 -P 暴漏全部端口 --public-all -e --env 传递环境变量 --rm 推出容器 即删除容器 --network nat|host|new|container 指定网络 --network container:其余容器名字(网络共享) 至关于运行在服务器的两个进程 --volumes-from 复用其余容器的存储设置 docker run -itd -p 8088:80 --mount type=bind,src=/data/soft/nginx,dst=/usr/share/nginx/html --name=nginx1 nginx docker run -it --name nginx3 --network container:nginx1 -p 8087:80 --volumes-from nginx1 nginx
/etc/docker/daemon.json { "bip": "10.0.0.1/24" "fixed-cidr": "10.20.0.0/16" "fixed-cidr-v6": "2001:db8:::/64" "mtu": 1500 "default-gatway": "10.0.0.1" "dns": ["10.0.0.1","10.0.0.3"] #至少一个至多三个 }
想要别的服务器能够链接须要设置/etc/docker/daemon.json { "bip": "10.0.0.1/24" #docker绑定ip地址 "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"] "fixed-cidr": "10.20.0.0/16" "fixed-cidr-v6": "2001:db8:::/64" "mtu": 1500 "default-gatway": "10.0.0.1" "dns": ["10.0.0.1","10.0.0.3"] #至少一个至多一个 }
docker volume inspect hanye -f {{.CreatedAt}} 获取CreatedAt字段
docker inspect nginx1 -f {{.NetworkSettings.IPAddress}} 查看ip地址
FROM #指定容器调用的镜像 FROM 能够指定repository仓库地址拉去镜像 FROM <repository>:<tag> MAINTAINER #指定镜像制做者详细信息 后期可能会替换为LABLE标签 LABLE key=value,........ 好比:project=online han=v1 ADD <src> <dest> #宿主机文件 容器文件 自动解压压缩包 <src> 能够是网络路径 也能够是本地宿主机路径 网络地址不会自动解压下载到容器指定位置 本地路径会自动解压到容器指定位置 <dest> 容器指定位置目录 WORKDIR dir #指定工做目录位置 exec登陆位置是此位置 VOLUME <mountpoint> 或者 VOLUME ["mountpoint"] #用于在image中建立一个挂载目录,以挂在Docker hst上的卷或者其余容器上,若是此前已经建立此文件,则会把新文件复制过去。注意此处指的是容器内的文件 例如: VLOLUME /data/mysql RUN #指令是用来执行命令行命令的 COPY <src> ...<dest> #用于宿主机复制文件值新建立的容器文件 <src> #复制的源文件或者目录 支持通配 必须是build的上下文路径 不能是其父目录中的文件,且目录自身不会被复制 <dest> # 目标路径 建议使用绝对路径 不然则以WORKDIR为其起始路径。若是事先不存在会自动建立 EXPOSR <port>[/<protocol>]...... 容器暴漏端口 例子: EXPOSE 11211/udp 11211/tcp ENV 定义所须要的环境变量,能够被ENV ADD COPY调用 调用模式: $variable_name 或 ${variable_name} ENV <key> <value> #只能设置一种,key以后的全部内容会被视为value ENV <key>=<value> #能够一次设置多种 每个key对应=后面的value值 若是value里面包含空格须要(\)转义 反斜线可用于续行 CMD <command> 或者 CMD ["<executable>","<param1>",<param2>,........]或者 CMD ["<param1>","<param2>",...........] 第一种表明 shell命令 而且以 “/bin/sh -c” 来运行它,意味着进程在容器中的PID为0,不能接受UNIX信号,所以docker stop中止容器,此进程接受不了信号。多个CMD进最后一个生效 RUN command #容器运行的命令 USER UID|USER #运行容器的用户,容器必须存在此用户 HEALTHCHECK <CMD> 监控监控状态检测 --interval= #重试机制时间间隔 默认30s --timeout= #超时时长 默认30s --start-period #等待多久开始健康检查 默认0s --retries #重试机制重试次数 默认3次 STOPSIGNAL signal 传递进程id,只有1进程才能接受docker stop结束进程 ONBUILD 嫁衣打法,格式:ONBUILD <其它指令>。ONBUILD 是一个特殊的指令,它后面跟的是其它指令,好比 RUN, COPY 等,而这些指令,在当前镜像构建时并不会被执行。只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。
root@mysql-2:/data/soft/node# docker build -t hanye:testApl . root@mysql-2:/data/soft/node# docker run -it --rm --name=hanyeApl hanye:testApl /home # ls /home # 上面发现 ONBUILD并无执行。而后在写一个Dockerfile调用上面的镜像,实现构建 root@mysql-2:/data/soft/node/node1# cat Dockerfile FROM hanye:testApl RUN ls /home docker build -t hanye:12 . docker run -it --name=hanyeapl --rm hanye:12
ARG 传递参数veriable_name
例子1: vim Dockerfile FROM debian MAINTAINER hz7726@163.com ENV nginx_tar="nginx-1.17.2" \ nginx_dir=/usr/local/src ADD ${nginx_tar}.tar.gz ${nginx_dir:-/usr/local/nginx} #表明若是$hanye没有值,则使用默认值为:/usr/local/nginx RUN yum install -y tar openssl openssl-devel pcre pcre-devel make && \ cd ${} COPY nginx.html /usr/share/ VOLUME /usr/share EXPOSE 80/tcp 443/tcp 可使用 printenv打印容器的环境变量 docker build -t hanye:web3 . root@mysql-2:/data/soft/nginx# docker run -it --name=hanye_web4 --rm hanye:web3 printenv PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=15df399148e8 TERM=xterm nginx_tar=nginx-1.17.2 nginx_dir=/usr/local/src HOME=/root ENV 等同于docker run -e key=value设置 root@mysql-2:/data/soft/nginx# docker run -it --name=hanye_web4 -e han="nginx_ll" --rm hanye:web3 printenv PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=daccbd9486bc TERM=xterm han=nginx_ll nginx_tar=nginx-1.17.2 nginx_dir=/usr/local/src HOME=/root 例子2: FROM centos LABLE MAINTAINER=“hz7726@163.com” hanye=“v2” ENV nginx_tar="nginx-1.17.2" \ nginx_dir=/usr/local/src \ nginx_html=/usr/local/nginx ADD ${nginx_tar}.tar.gz ${nginx_dir} COPY nginx.html /usr/share/ WORKDIR ${nginx_dir} RUN yum install -y epel-release && yum makecache && yum install -y wget curl tar pcre pcre-devel openssll openssl-devel make gcc-c++ gcc && \ cd nginx-1.17.2 && \ ./configure --prefix=${nginx_html} && \ make && make install && \ yum install -y net-tools && \ echo "daemon off;" >>${nginx_html}/conf/nginx.conf VOLUME ${nginx_html}/html EXPOSE 80/tcp 443/tcp HEALTHCHECK --start-period=4s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/ CMD ["${nginx_html}/sbin/nginx"] #能够调用ENV #CMD /usr/local/nginx}/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #不能够调用ENV设置的变量 能够修改成手动执行/bin/sh -c方式 #CMD ["/bin/sh","-c","${nginx_html/sbin/nginx}","-c","${nginx_html}/conf/nginx.conf"] 例子3: FROM nginx:1.15.1 ARG online="nginx" LABLE web="${online}" version="1151" ENV nginx_dir="/usr/local/nginx" \ nginx_sbin="/usr/local/nginx/sbin" ADD nginx.html ${nginx_dir}/html EXPOSE 80 443 HEALTHCHECK --start-period=4s CMD wget -O - -q http://${IP:-0.0.0.0}:${PORT:-80}/ CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"] docker build -t hanye:nginx1 . #默认LABLE 中的web为nginx 想要修改则修改成: docker build -t hanye:nginx1 --build-arg online="test" ./
默认docker是没有资源限制的,服务能够耗尽宿主机资源。 从cpu,memory,block io三方面限制Docker容器,依赖于Linux系统内核的capailities的支持。
一旦服务器发生OOM。任何进程均可能被杀死,包括docker daemon,Docker设置了docker daemon的OOM的优先级,可是没有设置容器的优先级。 -m, --memory bytes #限制内存大小 例如: 限制内存使用为4m -m 4m --memory-reservation bytes --memory-swap bytes #限制swap内存大小 --memory-swappiness int --oom-kill-disable #若是系统出现OOM删除进程,此条件设置为禁止删掉 --kernel-memory bytes #若是-m 设置为正数M --memory-swap 设置为正数S 那么容器可用为S,其中ram为M,Swap为S-M,若是S=M那么则没有Swap可用 #若是 -m 设置为正数M --memory-swap 设置为0 表示未设置Swap #若是 -m 设置为正数M --memory-sawp为unset 表示Swap为2*M #若是 -m 设置为正数M --memory-swap设置为-1 表示Swap为宿主机的Swap #因此使用free -m看到的swap没有实际意义
0-99表明是内核运行的进程,100-139表明其余进程运行的进程 -c ,--cpu-shares int #表明使用多少核心,好比 1,2 表示运行到1,2核心 --cpus decimal --cpuset-cpus string #cpu只能运行到那个cpu上1,2表明跑到200%性能 --cpuset-mems string 例子:可使用docker-stress-ng来压测 docker pull lorel/docker-stress-ng 查看帮助:docker run -it --name=stress --rm lorel/docker-stress-ng --help --cpu 8启动子进程 --io 4 对io压测 --vm 2 启动几个进程进程内存压测 --vm-bytes 128M 每隔进程占用内存 --fork 4 fork 4个子线程 --timeout 10s
docker run --name stress -it --rm --cpuset-cpus="1,2" lorel/docker-stress-ng stress --cpu 2
docker run --name stress -it --rm -m 128m lorel/docker-stress-ng stress --vm 2html