最近業餘時間一直在研究使用Docker,這裏把經常使用的一些命令總結下:
一、第一部分
查看本地所有的鏡像
docker images
查看運行的容器實例
docker ps [OPTIONS]
OPTIONS說明:
-a :顯示所有的容器,包括未運行的。
-f :根據條件過濾顯示的內容。
--format :指定返回值的模板文件。
-l :顯示最近創建的容器。
-n :列出最近創建的n個容器。
--no-trunc :不截斷輸出。
-q :靜默模式,只顯示容器編號。
-s :顯示總的文件大小。
查看容器內進程
docker top 容器ID或容器名
顯示 Docker 系統信息,包括鏡像和容器數
docker info
顯示Docker版本信息
docker version
二、第二部分
啓動容器
docker run -i -t -v /mnt/software/:/mnt/software/ 25c5298b1a36 /bin/bash
docker run <相關參數> <鏡像ID> <初始命令>
其中,相關參數包括:
-i:表示以“交互模式”運行容器
-t:表示容器啓動後會進入其命令行
-v:表示需要將本地哪個目錄掛載到容器中,格式:-v <宿主機目錄>:<容器目錄>
假設我們的所有安裝程序都放在了宿主機的/root/software/目錄下,現在需要將其掛載到容器的/mnt/software/目錄下。
需要說明的是,不一定要使用“鏡像 ID”,也可以使用“倉庫名:標籤名”,例如:docker.cn/docker/centos:centos6。
初始命令表示一旦容器啓動,需要運行的命令,此時使用“/bin/bash”,表示什麼也不做,只需進入命令行即可。
啓動Java Web容器
docker run -d -p 58080:8080 --name javaweb 25c5298b1a36 /root/run.sh
-d:表示以“守護模式”執行/root/run.sh腳本,此時 Tomcat 控制檯不會出現在輸出終端上。
-p:表示宿主機與容器的端口映射,此時將容器內部的 8080 端口映射爲宿主機的 58080 端口,這樣就向外界暴露了 58080 端口,可通過 Docker 網橋來訪問容器內部的 8080 端口了。
--name:表示容器名稱,用一個有意義的名稱命名即可。
查看容器日誌
docker logs -f -t --since="2018-02-08" --tail=100 1e26896f7d14
docker logs [OPTIONS] CONTAINER
Options:
--details 顯示更多的信息
-f, --follow 跟蹤實時日誌
--since string 顯示自某個timestamp之後的日誌,或相對時間,如42m(即42分鐘)
--tail string 從日誌末尾顯示多少行日誌, 默認是all
-t, --timestamps 顯示時間戳
--until string 顯示自某個timestamp之前的日誌,或相對時間,如42m(即42分鐘)
啓動一個已經停止的容器實例
docker start 容器ID或容器名
停止一個正在運行的容器
docker stop 容器ID或容器名
參數 -t:關閉容器的限時,如果超時未能關閉則用kill強制關閉,默認值10s,這個時間用於容器的自己保存狀態
docker stop -t=60 容器ID或容器名
docker kill 容器ID或容器名 :直接關閉容器
退出容器
CTRL+P CTRL+Q退出容器交互式bash,保持容器運行
exit退出容器,容器停止運行
重啓一個容器
docker restart 容器ID或容器名 :不管容器是否啓動,直接重啓容器
進入一個已經在運行的容器 / 在運行中容器內啓動新進程
docker exec [-d] [-i] [-t] 容器ID或容器名 [command][arg...]
docker exec -it 775c7c9ee1e1 /bin/bash
附加到運行中的容器
docker attach 容器ID或容器名
刪除容器container
docker rm 容器id
刪除鏡像images
docker rmi <image id>
想要刪除untagged images,也就是那些id爲<None>的image的話可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
要刪除全部image的話
docker rmi $(docker images -q)
獲取容器/鏡像的元數據
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS說明:
-f :指定返回值的模板文件。
-s :顯示總的文件大小。
--type :爲指定類型返回JSON。
從Docker Hub查找鏡像
docker search [OPTIONS] TERM
OPTIONS說明:
--automated :只列出 automated build類型的鏡像;
--no-trunc :顯示完整的鏡像描述;
-s :列出收藏數不小於指定值的鏡像。
從鏡像倉庫中拉取或者更新指定鏡像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS說明:
-a :拉取所有 tagged 鏡像
--disable-content-trust :忽略鏡像的校驗,默認開啓
docker pull tomcat:8
docker pull centos
將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫
docker push [OPTIONS] NAME[:TAG]
OPTIONS說明:
--disable-content-trust :忽略鏡像的校驗,默認開啓
從容器創建一個新的鏡像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS說明:
-a :提交的鏡像作者;
-c :使用Dockerfile指令來創建鏡像;
-m :提交時的說明文字;
-p :在commit時,將容器暫停。
docker commit ef27c9a23b26 wangpf/javaweb:0.1
該容器的ID是ef27c9a23b26,所創建的鏡像名是wangpf/javaweb:0.1
使用 Dockerfile 創建鏡像
docker build [OPTIONS] PATH | URL | -
OPTIONS說明:
--build-arg=[] :設置鏡像創建時的變量;
--cpu-shares :設置 cpu 使用權重;
--cpu-period :限制 CPU CFS週期;
--cpu-quota :限制 CPU CFS配額;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的內存 id;
--disable-content-trust :忽略校驗,默認開啓;
-f :指定要使用的Dockerfile路徑;
--force-rm :設置鏡像過程中刪除中間容器;
--isolation :使用容器隔離技術;
--label=[] :設置鏡像使用的元數據;
-m :設置內存最大值;
--memory-swap :設置Swap的最大值爲內存+swap,"-1"表示不限swap;
--no-cache :創建鏡像的過程不使用緩存;
--pull :嘗試去更新鏡像的新版本;
--quiet, -q :安靜模式,成功後只輸出鏡像 ID;
--rm :設置鏡像成功後刪除中間容器;
--shm-size :設置/dev/shm的大小,默認值是64M;
--ulimit :Ulimit配置。
--tag, -t: 鏡像的名字及標籤,通常 name:tag 或者 name 格式;可以在一次構建中爲一個鏡像設置多個標籤。
--network: 默認 default。在構建期間設置RUN指令的網絡模式
三、第三部分
DOCKER 給運行中的容器添加映射端口
獲得容器IP
docker inspect 'container_name' | grep IPAddress
iptable轉發端口
將容器的8000端口映射到docker主機的8001端口
iptables -t nat -A DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.2:8080
查看端口映射
docker port 容器Id
提交一個運行中的容器爲鏡像
docker commit containerid foo/live
運行鏡像並添加端口
docker run -d -p 8000:80 foo/live /bin/bash
刪除端口映射規則
獲取規則編號
iptables -t nat -nL --line-number
根據編號刪除規則
iptables -t nat -D DOCKER $num