1. 程式人生 > >Docker 實戰三(容器操作命令)

Docker 實戰三(容器操作命令)

目錄

Docker 容器

Docker 容器的基本操作命令(介紹常用的)

docker ps : 列出所有的容器

docker run: 建立一個新的容器並執行一個命令

docker start/stop/restart 

docker 進入容器之後退出

docker kill 強制停止容器

docker 刪除容器

docker logs : 獲取容器的日誌

 Docker top :檢視容器中執行的程序資訊,支援 ps 命令引數

docker inspect : 獲取容器/映象的元資料

docker pause/unpause

docker cp :用於容器與主機之間的資料拷貝。


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。

這個元資訊有點多,我從官網找了幾個demomytomcat 可以換成容器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