1. 程式人生 > >docker 命令(待完善)

docker 命令(待完善)

文章目錄

1、docker run 新建並執行容器

docker run -it centos : 執行一個 centos 容器

[[email protected]st java]# docker run -it 75835a67d134
[
[email protected]
/]# cd / [[email protected] /]# ls anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var [[email protected] /]# pwd / [[email protected] /]#

開啟一個新的終端,檢視 docker中執行的容器

[[email protected] java]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
6d69ff2cbd03        75835a67d134        "/bin/bash"         26 seconds ago      Up 25 seconds                           dreamy_chandrasekhar
[
[email protected]
java]#

1.1、--name 別名 給容器起別名

docker run -it --name mycentos124 centos: 執行一個 centos 容器,並通過--name引數指定一個別名為mycentos111

[[email protected] java]# docker run -it --name mycentos111 75835a67d134
[[email protected] /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[[email protected] /]# 

docker ps命令檢視正在執行的容器,最後一列name為剛才指定的別名

[[email protected] java]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
129ff84a96b4        75835a67d134        "/bin/bash"         18 seconds ago      Up 17 seconds                           mycentos111
[[email protected] java]# 

2、docker ps 列出當前docker中 正在執行容器

docker ps :列出當前docker中 正在執行容器

docker ps

[[email protected] java]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7ba0aaaccee9        75835a67d134        "/bin/bash"         11 seconds ago      Up 9 seconds                            pensive_hypatia

2.1、docker ps [option]

-a: 列出當前所有正在執行的容器 + 歷史上執行過的容器
-l: 顯示 上一次執行過的容器
-n: 顯示 上 n 次執行過的容器
-q: 靜默模式,只顯示容器編號
--no-trunc: 不截斷輸出

docker ps -a:(列出當前所有正在執行的容器 + 歷史上執行過的容器)

[[email protected] java]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
7ba0aaaccee9        75835a67d134        "/bin/bash"              10 minutes ago      Exited (0) 7 minutes ago                          pensive_hypatia
b25d05ece250        centos              "/bin/sh -c 'while t…"   3 days ago          Exited (255) 15 minutes ago                       priceless_morse
d4cca0323327        centos              "/bin/bash"              3 days ago          Exited (0) 3 days ago                             determined_meninsky
6f0d900f3a0e        75835a67d134        "/bin/bash"              3 days ago          Exited (137) 3 days ago                           mycentos
d38621653e1b        75835a67d134        "/bin/bash"              3 days ago          Exited (137) 3 days ago                           lucid_shtern
8d177f15646c        4ab4c602aa5e        "/hello"                 3 days ago          Exited (0) 3 days ago                             dreamy_hopper
678219b66f73        4ab4c602aa5e        "/hello"                 3 days ago          Exited (0) 3 days ago                             suspicious_yonath

docker ps -l: (顯示 上一次執行過的容器)

[[email protected] java]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
7ba0aaaccee9        75835a67d134        "/bin/bash"         10 minutes ago      Exited (0) 7 minutes ago                       pensive_hypatia

docker ps -lq: (顯示 上一次執行過的容器的 容器id)

[[email protected] java]# docker ps -lq
7ba0aaaccee9

docker ps -aq: (列出當前所有正在執行的容器 + 歷史上執行過的容器的 容器id)

[[email protected] java]# docker ps -aq
7ba0aaaccee9
b25d05ece250
d4cca0323327
6f0d900f3a0e
d38621653e1b
8d177f15646c
678219b66f73

3、docker start 啟動容器(已停止執行的容器)

[[email protected] java]# docker ps -l       # 檢視上一次執行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
129ff84a96b4        75835a67d134        "/bin/bash"         20 minutes ago      Exited (0) 23 seconds ago                       mycentos111
[[email protected] java]# 
[[email protected] java]# docker start 129ff84a96b4  #重新啟動容器,129ff84a96b4是容器的id
129ff84a96b4
[[email protected] java]# 

4、docker rundocker start的區別

相同點:

都能啟動容器。

不同點:

docker run :啟動的是映象,通過映象建立容器,並啟動。
docker start :啟動的是歷史的容器;

docker run 只在第一次執行容器時,需要通過 映象 建立 容器。以後再次啟動這個容器時,只需要使用命令 docker start 即可。
docker run 相當於執行了兩步操作:

  • 1.將映象放入容器中(docker create);
  • 2.然後將容器啟動,使之變成執行時容器(docker start)。

docker start
docker start 的作用是,重新啟動已存在的容器。
使用這個命令,我們必須事先知道這個容器的ID,可以使用docker ps 的命令找到這個容器的資訊,然後 使用 docker start 命令啟動容器。

5、 docker restart 重啟容器(正在執行的容器)

[[email protected] java]# docker ps   # 檢視正在執行的容器,STATUS是7分鐘
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
129ff84a96b4        75835a67d134        "/bin/bash"         28 minutes ago      Up 7 minutes                            mycentos111
[[email protected] java]# 
[[email protected] java]# docker restart 129ff84a96b4   # 重啟容器
129ff84a96b4                                         # 重啟完畢後,返回一個容器id
[[email protected] java]# 
[[email protected] java]# docker ps    #檢視正在執行的容器,STATUS是4秒鐘
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
129ff84a96b4        75835a67d134        "/bin/bash"         29 minutes ago      Up 4 seconds                            mycentos111
[[email protected] java]# 

6、docker log 容器id 檢視容器日誌

引數說明:
-t: 加入時間戳
-f: 實時打印出最新的日誌
--tail: 顯示最後多少條

先執行一段程式

[[email protected] java]# docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[[email protected] java]# docker run -d centos /bin/sh  -c  "while true;do echo hello zzyy;sleep 2;done"
2db1ff5cc3a18cc869e931de7109a34a5fd02a26df610cc1fca12e06e00a96b4
[[email protected] java]#
[[email protected] java]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2db1ff5cc3a1        centos              "/bin/sh -c 'while t…"   15 seconds ago      Up 14 seconds                           elastic_bhaskara
[[email protected] java]# 

docker logs 2db1ff5cc3a1:一次性顯示所有的日誌

[[email protected] java]# docker logs 2db1ff5cc3a1
hello zzyy
hello zzyy
hello zzyy
hello zzyy
hello zzyy
hello zzyy
hello zzyy
hello zzyy

docker logs -t --tail 5一次性顯示最新的5條日誌,並加上時間戳

[[email protected] java]# docker logs -t  --tail 5 2db1ff5cc3a1
2018-11-08T09:47:00.808550916Z hello zzyy
2018-11-08T09:47:02.812877422Z hello zzyy
2018-11-08T09:47:04.816929773Z hello zzyy
2018-11-08T09:47:06.821516115Z hello zzyy
2018-11-08T09:47:08.825211232Z hello zzyy

docker logs -t -f --tail 5:剛開始顯示出最新5條日誌,並實時動態打印出最新的日誌

[[email protected] java]# docker logs -t -f  --tail 5 2db1ff5cc3a1
2018-11-08T09:47:04.816929773Z hello zzyy
2018-11-08T09:47:06.821516115Z hello zzyy
2018-11-08T09:47:08.825211232Z hello zzyy
2018-11-08T09:47:10.827242700Z hello zzyy
2018-11-08T09:47:12.831193573Z hello zzyy
2018-11-08T09:47:14.835069567Z hello zzyy
2018-11-08T09:47:16.840180042Z hello zzyy
2018-11-08T09:47:18.841954295Z hello zzyy
2018-11-08T09:47:20.844636084Z hello zzyy
2018-11-08T09:47:22.848753931Z hello zzyy
2018-11-08T09:47:24.851426354Z hello zzyy
2018-11-08T09:47:26.854595560Z hello zzyy
.....(實時動態打印出最新的日誌)

前期資料準備
docker run -it centos

[[email protected] java]# docker run -it centos
[[email protected] /]#  
[[email protected] /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

Ctrl + p + q:退出不停止容器

[[email protected] /]# [[email protected] java]# 
[[email protected] java]# 
[[email protected] java]# 

驗證,容器還在執行中

[[email protected] java]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
f809b6f11262        centos              "/bin/bash"              4 minutes ago       Up 4 minutes                            kind_ardinghelli
2db1ff5cc3a1        centos              "/bin/sh -c 'while t…"   27 minutes ago      Up 27 minutes                           elastic_bhaskara
[[email protected] java]# 

7、重新進入容器

7.1、 docker attach 容器id

docker attach 容器id:從宿主機 進入容器中

[[email protected] java]# docker attach f809b6f11262
[[email protected] /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[[email protected] /]# 

7.2、docker exec -t 容器id shell命令

在宿主機中,而不是在容器中,對容器執行命令

[[email protected] /]# exit
exit
[[email protected] java]# docker run -it centos
[[email protected] /]# 
[[email protected] /]# 
[[email protected] /]# [[email protected] java]#  #【此處是退出不停止容器】
[[email protected] java]# 
[[email protected] java]# 
[[email protected] java]# docker exec -t 81bc97b5bc57 ls -l /tmp
total 4
-rwx------. 1 root root 836 Oct  6 19:15 ks-script-7RxiSx
-rw-------. 1 root root   0 Oct  6 19:14 yum.log
[[email protected] java]# 

docker exec -t 81bc97b5bc57 ls -l /tmp 說明:

  • docker exec -t 81bc97b5bc57docker exec -t 容器id,在宿主機中,而不是在容器中,對容器執行命令。-t 表示只需要客戶端即可。如果是-it 表示 需要與客戶端進行互動。
  • ls -l /tmp 是顯示目錄tmp的結構。
    二者聯在一塊就是在宿主機中執行對容器的tmp目錄的顯示操作

7.3、docker attachdocker exec 的區別

docker attach:直接進入容器啟動命令的終端,不會啟動新的程序

docker exec:是在宿主機中開啟新的終端,並且可以啟動新的程序

[[email protected] java]# docker exec -it 81bc97b5bc57 /bin/sh
sh-4.2# 
sh-4.2#  
sh-4.2# ls
anaconda-post.log  bin	dev  etc  home	lib  lib64  media  mnt	opt  proc  root  run  sbin  srv  sys  tmp  usr	var