Docker 實戰三(容器操作命令)
阿新 • • 發佈:2019-01-01
目錄
Docker top :檢視容器中執行的程序資訊,支援 ps 命令引數
Docker 容器
- 容器映象是輕量的、可執行的獨立軟體包 ,包含軟體執行所需的所有內容:程式碼、執行時環境、系統工具、系統庫和設定。
- 容器化軟體適用於基於Linux和Windows的應用,在任何環境中都能夠始終如一地執行。
- 容器賦予了軟體獨立性,使其免受外在環境差異(例如,開發和預演環境的差異)的影響,從而有助於減少團隊間在相同基礎設施上執行不同軟體時的衝突。
Docker 容器的基本操作命令(介紹常用的)
docker ps : 列出所有的容器
docker ps [OPTIONS]
- -a :
- -f :根據條件過濾顯示的內容。
- --format :指定返回值的模板檔案。
- -l :顯示最近建立的容器。
- -n :列出最近建立的n個容器。
- --no-trunc :不截斷輸出。
- -q :靜默模式,只顯示容器編號。
- -s :顯示總的檔案大小。
demo:
CONTAINER ID 容器id,IMAGE 映象名,COMMAND指令,CREATED 建立時間,STATUS(UP代表執行中Exited退出)
PORTS 埠,NAMES 該容器的名稱
[[email protected] vagrant]# docker ps -n 5 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 33b92f8cce9c wget:0.1 "/bin/bash" 22 hours ago Exited (0) 22 hours ago upbeat_curie 508ed8c3ff73 wget:0.1 "/bin/bash" 22 hours ago Exited (137) 22 hours ago stupefied_engelbart 1ce8ad1a9184 tomcat "catalina.sh run" 23 hours ago Exited (130) 23 hours ago objective_shockley dd081da801ba 4ab4c602aa5e "/hello" 23 hours ago Exited (0) 23 hours ago practical_kepler 2047648ff8f1 4ab4c602aa5e "/hello" 2 days ago Exited (0) 2 days ago distracted_booth
docker run: 建立一個新的容器並執行一個命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- -a stdin: 指定標準輸入輸出內容型別,可選 STDIN/STDOUT/STDERR 三項;
- -d: 後臺執行容器,並返回容器ID;
- -i: 以互動模式執行容器,通常與 -t 同時使用;
- -p: 埠對映,格式為:主機(宿主)埠:容器埠
- -t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
- --name="nginx-lb": 為容器指定一個名稱;
- --dns 8.8.8.8: 指定容器使用的DNS伺服器,預設和宿主一致;
- --dns-search example.com: 指定容器DNS搜尋域名,預設和宿主一致;
- -h "mars": 指定容器的hostname;
- -e username="ritchie": 設定環境變數;
- --env-file=[]: 從指定檔案讀入環境變數;
- --cpuset="0-2" or --cpuset="0,1,2": 繫結容器到指定CPU執行;
- -m :設定容器使用記憶體最大值
- --net="bridge": 指定容器的網路連線型別,支援 bridge/host/none/container: 四種類型;
- --link=[]: 新增連結到另一個容器;
- --expose=[]: 開放一個埠或一組埠;
demo:
1. 將tomcat 8080對映到宿主機的8080埠
[[email protected] vagrant]# docker run -d --name mytomcat -p 127.0.0.1:8080:8080/tcp tomcat
a19687ed946291bd3687135c1ce8575d864e963f1f8414583dadc3fef43f4ecb
[[email protected] vagrant]# curl -s localhost:8080
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Apache Tomcat/8.5.37</title>
<link href="favicon.ico" rel="icon" type="image/x-icon" />
<link href="favicon.ico" rel="shortcut icon" type="image/x-icon" />
<link href="tomcat.css" rel="stylesheet" type="text/css" />
</head>
。。。。
</html>
[[email protected] vagrant]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a19687ed9462 tomcat "catalina.sh run" 46 seconds ago Up 44 seconds 127.0.0.1:8080->8080/tcp mytomcat
2.使用-ti進入tomcat伺服器
[[email protected] vagrant]# docker run -ti --name mytomcat-it tomcat /bin/bash
[email protected]:/usr/local/tomcat# ls
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf include lib logs native-jni-lib temp webapps work
docker start/stop/restart
- docker start 容器id或容器name
- docker stop 容器id或容器name
- docker restart 容器id或容器name
docker 進入容器之後退出
- exit :退出並停止容器
- ctrl +p + q: 退出不停止容器
docker kill 強制停止容器
- docker kill 容器id或容器name
docker 刪除容器
- docker rm 容器id
- docker rm -f ${docker ps -a -q} 批量刪除
- docker ps -a -q | xargs docker rm 批量刪除(以不定參的形式)
docker logs : 獲取容器的日誌
docker logs [OPTIONS] CONTAINER
- -f : 跟蹤日誌輸出
- --since :顯示某個開始時間的所有日誌
- -t : 顯示時間戳
- --tail :僅列出最新N條容器日誌
demo:
mytomcat容器的2019-01-01的最新10條以時間戳顯示
[[email protected] vagrant]# docker logs --since="2019-01-01" -t --tail=10 mytomcat
2019-01-01T05:19:29.259220695Z 01-Jan-2019 05:19:29.258 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/docs] has finished in [42] ms
2019-01-01T05:19:29.259220753Z 01-Jan-2019 05:19:29.258 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/examples]
2019-01-01T05:19:29.800126765Z 01-Jan-2019 05:19:29.799 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/examples] has finished in [541] ms
2019-01-01T05:19:29.800149372Z 01-Jan-2019 05:19:29.799 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/host-manager]
2019-01-01T05:19:29.868286069Z 01-Jan-2019 05:19:29.854 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/host-manager] has finished in [55] ms
2019-01-01T05:19:29.868303404Z 01-Jan-2019 05:19:29.854 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/manager]
2019-01-01T05:19:29.938959186Z 01-Jan-2019 05:19:29.933 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/manager] has finished in [79] ms
2019-01-01T05:19:29.942429797Z 01-Jan-2019 05:19:29.940 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
2019-01-01T05:19:29.985405382Z 01-Jan-2019 05:19:29.979 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
2019-01-01T05:19:29.985417055Z 01-Jan-2019 05:19:29.984 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1741 ms
Docker top :檢視容器中執行的程序資訊,支援 ps 命令引數
docker top [OPTIONS] CONTAINER [ps OPTIONS]
容器執行時不一定有/bin/bash終端來互動執行top命令,而且容器還不一定有top命令,可以使用docker top來實現檢視container中正在執行的程序。
[[email protected] vagrant]# docker top mytomcat
UID PID PPID C STIME TTY TIME CMD
root 4471 4456 0 06:19 ? 00:00:06 /docker-java-home/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
檢視所有執行容器的程序資訊
for i in `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done
docker inspect : 獲取容器/映象的元資料
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
- -f :指定返回值的模板檔案。
- -s :顯示總的檔案大小。
- --type :為指定型別返回JSON。
這個元資訊有點多,我從官網找了幾個demo,mytomcat 可以換成容器name或id
1. 獲取當前容器的ip
[[email protected] vagrant]# docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mytomcat
172.17.0.2
2. 獲取該例項的日誌
[[email protected] vagrant]# docker inspect --format='{{.LogPath}}' mytomcat
/var/lib/docker/containers/a19687ed946291bd3687135c1ce8575d864e963f1f8414583dadc3fef43f4ecb/a19687ed946291bd3687135c1ce8575d864e963f1f8414583dadc3fef43f4ecb-json.log
3. 獲取當前例項的埠
[[email protected] vagrant]# docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' mytomcat
8080/tcp -> 8080
[[email protected] vagrant]# docker port mytomcat
8080/tcp -> 127.0.0.1:8080
4. 將其格式轉換成沒有空格的json
[[email protected] vagrant]# docker inspect --format='{{json .Config}}' mytomcat
docker pause/unpause
-
docker pause :暫停容器中所有的程序。
- docker unpause :恢復容器中所有的程序。
docker cp :用於容器與主機之間的資料拷貝。
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
demo:
[[email protected] vagrant]# docker cp 32d35ed0c099:/usr/local/tomcat/BUILDING.txt /
[[email protected] vagrant]# cd /
[[email protected] /]# ls
bin boot BUILDING.txt dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr vagrant var
參考:
Docker概念:http://dockone.io/article/6051
官方docker inspect 詳解: https://docs.docker.com/engine/reference/commandline/inspect/#parent-command