Docker常用命令集錦

最近業餘時間一直在研究使用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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章