https://segmentfault.com/a/1190000002609286
刪除所有未運行 Docker 容器
docker rm $(docker ps -a -q)
刪除所有 Docker 鏡像
刪除所有未打 tag 的鏡像
docker rmi $(docker images -q | awk '/^<none>/ { print $3 }')
刪除所有鏡像
docker rmi $(docker images -q)
根據(jù)格式刪除所有鏡像
docker rm $(docker ps -qf status=exited)
移除所有的容器和鏡像(大掃除)
用一行命令大掃除:
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)
注:shell 中的 $() 和 `` 類似仓坞,會先執(zhí)行這里面的內(nèi)容,上面的腳本會出現(xiàn)如下 docker kill "pids" ; docker kill 在 docker 中用于停止容器,docker rm 刪除容器竞膳, docker rmi 刪除鏡像
當(dāng)沒有運行的容器或者是根本沒有容器的時候脱拼,這只會提示一個警告信息萎馅。當(dāng)你想嘗試的時候拼窥,這就是個非常好的單行命令裆泳。如果你僅僅想刪除所有的容器叹洲,你可以運行如下命令:
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q)
退出時刪除容器
如果你僅僅想在一個容器中快速的運行一個命令,然后退出晾虑,并且不用擔(dān)心容器狀態(tài)疹味,把 --rm 參數(shù)加入 run 命令后面,這將結(jié)束很多你保存了的容器仅叫,并且清理它們。
示例:docker run --rm -i -t busybox /bin/bash
不在 Shell 上運行命令
如果你使用需要Shell 的擴展項的 docker run 命令處理某些事情糙捺,比如 docker run --rm busybox ls '/var/log/', 這個命令將失敗诫咱。這個失敗的原因我花了工夫才弄明白。這個陷阱在這里:你原來沒有 Shell 洪灯, 而 ``` 是 Shell 的擴展項坎缭,因此你需要一個能使用的 Shell 。正確方法為:
docker run --rm busybox sh -c 'ls /var/log/*'
Boot2Docker 和 LapTops 處理 DNS 問題的方法
由于這個原因签钩, Boot2Docker 會占用 DNS 服務(wù)器很長一段時間掏呼。當(dāng)你在嘗試創(chuàng)建鏡像的時候,可能會得到離譜的錯誤铅檩。如果你在 Ubuntu 或者 CentOS 上看到下面的提示:
cannot lookup archive.ubuntu.com
聰明的做法是停止憎夷,然后啟動 boot2docker 。
boot2docker-cli down && boot2docker-cli up
這樣問題就解決了
Volumes 解決 docker logs
和 docker copy
問題
如果你想在一個容器中監(jiān)控另一個容器中的日志文件和文件的使用昧旨,你可以看看 volumes ,例如拾给,檢查 tomcat 是否啟動:
tomcat_id=$(docker run -d -v /var/log/tomcat6 wouterd/tomcat6)# Give Tomcat some time to wake up...sleep 5while ! docker run --rm --volumes-from ${tomcat_id} busybox /bin/sh -c "grep -i -q 'INFO: Server startup in' /var/log/tomcat6/catalina*.log" ; do echo -n "." sleep 5done
你還可以在一個 Dockerfile
中指定 volumes ,這個在我前面的博客文章中結(jié)合 Docker 連載了。\
Docker Inspect 結(jié)合 Go Templates 的好處
命令 docker inspect
允許使用 Go Templates 來格式化inspect 命令的輸出信息如果你擅長這個兔沃,你能獲取很多 docker 容器命令行的腳本輸出信息蒋得。這是一個獲取正在運行的容器 IP 的示例:
container_ip=$(docker inspect --format '{{.NetworkSettings.IPAddress}}' ${container_id})
這里有一個笨的技巧,用于得到匹配所有暴露(exposed)的端口 host:port ,并且把他們輸入一個 java properties 文件:
sut_ip=${BOOT_2_DOCKER_HOST_IP}template='{{ range $key, $value := .NetworkSettings.Ports }}{{ $key }}='"${BOOT_2_DOCKER_HOST_IP}:"'{{ (index $value 0).HostPort }} {{ end }}'tomcat_host_port=$(docker inspect --format="${template}" ${container_id})for line in ${tomcat_host_port} ; do echo "${line}" >> ${work_dir}/docker_container_hosts.propertiesdone
Docker基礎(chǔ)命令
查看docker版本信息
$ docker --version
查看docker安裝信息
$ docker info
查看本機Docker中存在哪些鏡像
$ docker images
檢索images
$ docker search images
下行images
$ docker pull images
顯示一個鏡像的歷史操作
$ docker history images
列出一個容器里面被改變的文件或者目錄
$ docker diff container
列出當(dāng)前所有正在運行的容器
$ docker ps
列出所有的容器
$ docker ps -a
列出最近一次啟動的容器
$ docker ps -f
查看容器的相關(guān)信息
$ docker inspect $CONTAINER_ID
顯示容器IP地址和端口號乒疏,如果輸出是空的說明沒有配置IP地址(不同的Docker容器可以通過此IP地址互相訪問)
$ docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID
通過容器生成新的鏡像
$ docker commit -m "Added ssh from centos" -a "xiaoming" 4a4de4cf223d1 xiaoming/centos:v1
參數(shù):
-m參數(shù)用來來指定提交的說明信息额衙;
-a可以指定用戶信息的;
4a4de4cf223d1代表的時容器的id怕吴;
birdben/ubuntu:v1指定目標(biāo)鏡像的用戶名窍侧、倉庫名和 tag 信息。
構(gòu)建一個容器
$ docker build -t="centos:v1" .
參數(shù):
-t為構(gòu)建的鏡像制定一個標(biāo)簽转绷,便于記憶/索引等
. 指定Dockerfile文件在當(dāng)前目錄下疏之,也可以替換為一個具體的 Dockerfile 的路徑。
在docker中運行centos鏡像
$ docker run <相關(guān)參數(shù)> <鏡像 ID> <初始命令>
守護(hù)模式啟動
$ docker run -it centos:v1
指定端口號啟動
$ docker run -p 80:80 centos:v1
指定配置啟動
$ sudo docker run -d -p 10.211.55.4:9999:22 birdben/ubuntu:v1 '/usr/sbin/sshd' -D
參數(shù):
-d:表示以“守護(hù)模式”執(zhí)行暇咆,日志不會出現(xiàn)在輸出終端上。
-i:表示以“交互模式”運行容器丙曙,-i 則讓容器的標(biāo)準(zhǔn)輸入保持打開
-t:表示容器啟動后會進(jìn)入其命令行爸业,-t 選項讓Docker分配一個偽終端(pseudo-tty)并綁定到容器的標(biāo)準(zhǔn)輸入上
-v:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>亏镰,-v 標(biāo)記來創(chuàng)建一個數(shù)據(jù)卷并掛載到容器里扯旷。在一次 run 中多次使用可以掛載多個數(shù)據(jù)卷。
-p:表示宿主機與容器的端口映射索抓,此時將容器內(nèi)部的 22 端口映射為宿主機的 9999 端口钧忽,這樣就向外界暴露了 9999 端口毯炮,可通過 Docker 網(wǎng)橋來訪問容器內(nèi)部的 22 端口了。
注意:這里使用的是宿主機的 IP 地址:10.211.55.4耸黑,與對外暴露的端口號 9999桃煎,它映射容器內(nèi)部的端口號 22。ssh外部需要訪問:ssh root@10.211.55.4 -p 9999
不一定要使用“鏡像 ID”大刊,也可以使用“倉庫名:標(biāo)簽名”
start 啟動容器
$ docker start 117843ade696117843ade696
stop 停止正在運行的容器
$ docker stop 117843ade696117843ade696
restart 重啟容器
$ docker restart 117843ade696117843ade696
rm 刪除容器
$ docker rm 117843ade696117843ade696
rmi 刪除鏡像
$ docker rmi ed9c93747fe1Deleted
登錄Docker Hub中心
$ docker login
發(fā)布上傳image(push)
$ docker push xiaoming/centos:v1
本文只是一個簡單的使用docker來提供一些如數(shù)據(jù)庫,redis等公共服務(wù)的搭建過程記錄.docker-compose.yml的詳細(xì)配置可以參考官方文檔或這篇文章.由于工作環(huán)境是在windows下,docker對windows的支持很不好,如果要在windows下安裝docker請確保,系統(tǒng)達(dá)到官方要求,這里記錄的是使用虛擬機的情況下搭建.
安裝docker
官方文檔中詳細(xì)說明了不同系統(tǒng)的安裝方法,這里以Centos為例.
確保linux系統(tǒng)滿足docker要求( 64-bit version of CentOS 7.3,貌似內(nèi)核也需要3.x以上的可以通過uname -a
查看)
升級/安裝 yum-utils $ sudo yum install -y yum-util
設(shè)置倉庫$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
將軟件包信息緩存 sudo yum makecache fast
安裝docker sudo yum -y install docker-ce
啟動docker sudo systemctl start docker
測試是否安裝成功 sudo docker run hello-world
開機啟動dockersudo chkconfig docker on
安裝docker-compose
這里使用python-pip的方式來安裝
安裝python-pipyum -y install epel-release yum -y install python-pip
安裝docker-composepip install docker-compose
測試是否安裝成功docker-compose version
編寫簡單docker-compose.yml例子
version: "2.0"services: redis: image: redis:3.2 restart: always ports: - "6379:6379" mongo: image: mongo:3.4.1 restart: always ports: - "27017:27017"
安裝啟動鏡像
在docker-compose.yml所在根目錄下執(zhí)行docker-compose up
統(tǒng)計某人的代碼提交量为迈,包括增加,刪除:
git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }' -
倉庫提交者排名前 5(如果看全部缺菌,去掉 head 管道即可):
git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
倉庫提交者(郵箱)排名前 5:這個統(tǒng)計可能不會太準(zhǔn)葫辐,因為很多人有不同的郵箱,但會使用相同的名字
git log --pretty=format:%ae | gawk -- '{ ++c[$0]; } END { for(cc in c) printf "%5d %s\n",c[cc],cc; }' | sort -u -n -r | head -n 5
貢獻(xiàn)者統(tǒng)計:
git log --pretty='%aN' | sort -u | wc -l
提交數(shù)統(tǒng)計:
git log --oneline | wc -l
添加或修改的代碼行數(shù):
git log --stat|perl -ne 'END { print $c } $c += $1 if /(\d+) insertions/;