-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