天天看點

Docker - Docker Container及Container指令詳解

Docker - Docker Container及Container指令詳解

什麼是Docker容器(Docker Container)

上一篇部落格介紹了Docker鏡像(Docker Image)以及Image的一些指令:​​Docker - Docker Image及Image指令詳解​​。

其實鏡像(Image)和容器(Container)的關系,就像是程式和程序一樣,鏡像是靜态的定義,容器則是動态的定義,是鏡像運作時的實體。容器可以被建立、啟動、停止、删除、暫停等。每個容器都是互相隔離的、保證安全的平台。可以把容器看做是一個簡易版的Linux環境(包括​

​root​

​使用者權限、程序空間、使用者空間和網絡空間等)和運作在其中的應用程式。 下圖從頂層設計層面展示了鏡像和容器間的關系。一旦容器從鏡像上啟動後,二者之間就變成了互相依賴的關系,并且在鏡像上啟動的容器全部停止之前,鏡像是無法被删除的。嘗試删除鏡像而不停止或銷毀使用它的容器,會導緻出錯。

Docker - Docker Container及Container指令詳解

現在大概知道Docker容器是什麼了,那接下來開始介紹Docker容器的一些指令。

Docker PS

展示容器清單。

docker ps --help      
[root@izoq008ryseuupz ~]# docker ps --help

Usage:  docker ps [OPTIONS]

List containers

Options:
  -a, --all             Show all containers (default shows just running)
  -f, --filter filter   Filter output based on conditions provided
      --format string   Pretty-print containers using a Go template
  -n, --last int        Show n last created containers (includes all states) (default -1)
  -l, --latest          Show the latest created container (includes all states)
      --no-trunc        Don't truncate output
  -q, --quiet           Only display numeric IDs
  -s, --size            Display total file sizes      

預設展示的是正在運作的容器​

​(default shows just running)​

​​,即狀态是​

​up​

​的容器。

docker ps      
[root@izoq008ryseuupz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
a258385ce592        centos:7            "/bin/bash"              5 hours ago         Up 5 hours                              centos.7.2
ae23a046566b        7eed8df88d3b        "docker-entrypoint.s…"   30 hours ago        Up 30 hours         6379/tcp            quirky_beaver
aa6a63e58682        7eed8df88d3b        "docker-entrypoint.s…"   30 hours ago        Up 30 hours         6379/tcp            goofy_montalcini
1655972bf5cd        7eed8df88d3b        "docker-entrypoint.s…"   31 hours ago        Up 31 hours         6379/tcp            cool_leakey      

通過​

​-a​

​選項可以展示所有容器。

docker ps -a      
[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                                        NAMES
a258385ce592        centos:7            "/bin/bash"              5 hours ago         Up 5 hours                                                              centos.7.2
cbd85da38a58        centos:7            "/bin/bash"              5 hours ago         Exited (0) 5 hours ago                                                  centos.7.1
74d0a8d032ff        centos:7            "/bin/bash"              5 hours ago         Exited (137) 5 hours ago                                                centos.7
fd00901dfbbb        kaven/hello:v1      "/hello"                 6 hours ago         Exited (1) 6 hours ago                                                  hardcore_babbage
fab31562aeac        kaven/hello:v1      "/hello"                 6 hours ago         Exited (1) 6 hours ago                                                  stoic_carson
fecbf8c1b956        kaven/hello:v1      "/hello"                 6 hours ago         Exited (1) 6 hours ago                                                  hello.v2
a4cfeb0679fd        kaven/hello:v1      "/hello"                 6 hours ago         Exited (1) 6 hours ago                                                  hello
ae23a046566b        7eed8df88d3b        "docker-entrypoint.s…"   30 hours ago        Up 30 hours                6379/tcp                                     quirky_beaver
aa6a63e58682        7eed8df88d3b        "docker-entrypoint.s…"   31 hours ago        Up 31 hours                6379/tcp                                     goofy_montalcini
5e73372c49d3        7eed8df88d3b        "docker-entrypoint.s…"   31 hours ago        Exited (0) 31 hours ago                                                 stoic_einstein
1655972bf5cd        7eed8df88d3b        "docker-entrypoint.s…"   31 hours ago        Up 31 hours                6379/tcp                                     cool_leakey
ed1eb87a4d97        7eed8df88d3b        "docker-entrypoint.s…"   31 hours ago        Exited (0) 31 hours ago                                                 frosty_dirac
da76541620b1        7eed8df88d3b        "docker-entrypoint.s…"   31 hours ago        Exited (0) 31 hours ago                                                 trusting_franklin
1539964c89a1        5377c9a2fb1f        "docker-entrypoint.s…"   5 weeks ago         Exited (0) 2 days ago                                                   peaceful_mayer
c1b657c7608c        98d8bb571885        "/usr/bin/entry /usr…"   8 weeks ago         Exited (111) 2 days ago    3306/tcp, 8080/tcp, 0.0.0.0:9090->9090/tcp   confident_hugle
64105665545b        1850194f377c        "/bin/sh -c /zipkin/…"   2 months ago        Exited (143) 2 days ago    9410/tcp, 0.0.0.0:9411->9411/tcp             zipkin
bc3a0ef096ed        7eed8df88d3b        "docker-entrypoint.s…"   7 months ago        Exited (0) 4 days ago                                                   awesome_shockley      

其他選項可以自己試一試。

Docker Create

該​

​docker create​

​​指令會在指定的鏡像上建立可寫的容器,然後将容器ID列印到STDOUT。之後,你可以随時使用 ​

​docker start​

​​指令來啟動容器。當你想提前設定容器配置時,以便在需要時啟動,此指令很有用。新容器的初始狀态為​

​created​

​。

docker create --help      

通過選項​

​--help​

​​,可見​

​docker create​

​指令的選項非常多。

先拉取​

​centos:7​

​鏡像。

docker image pull centos:7      
[root@izoq008ryseuupz ~]# docker image pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
docker.io/library/centos:7      
docker images      
[root@izoq008ryseuupz ~]# docker images
REPOSITORY                                                     TAG                 IMAGE ID            CREATED             SIZE
centos                                                         7                   8652b9f0cb4c        9 days ago          204MB      

在​

​centos:7​

​​鏡像上建立容器,通過​

​--name​

​​選項将容器命名為​

​centos.7​

​​,​

​-it​

​​是​

​-i​

​​和​

​-t​

​的簡寫。

docker create -it --name centos.7 centos:7      
[root@izoq008ryseuupz ~]# docker create -it --name centos.7 centos:7
74d0a8d032ffb17492e1acaf1cedafb62c5c2ed5921a7fee6ced2d6a8758ab5a      

檢視容器是否建立成功,新容器的初始狀态為​

​created​

​。

docker ps -a      
[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                                        NAMES
74d0a8d032ff        centos:7            "/bin/bash"              7 seconds ago       Created                                                                  centos.7      

其他選項可以自己試一試。

Docker Start

啟動一個或多個已經停止的容器。

docker start --help      
[root@izoq008ryseuupz ~]# docker start --help

Usage:  docker start [OPTIONS] CONTAINER [CONTAINER...]

Start one or more stopped containers

Options:
  -a, --attach                  Attach STDOUT/STDERR and forward signals
      --checkpoint string       Restore from this checkpoint
      --checkpoint-dir string   Use a custom checkpoint storage directory
      --detach-keys string      Override the key sequence for detaching a container
  -i, --interactive             Attach container's STDIN      

啟動容器​

​centos.7​

​​,容器啟動成功後,容器的狀态會變成​

​up​

​。

docker start centos.7      
[root@izoq008ryseuupz ~]# docker start centos.7
centos.7
[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                                        NAMES
74d0a8d032ff        centos:7            "/bin/bash"              35 seconds ago      Up 10 seconds                                                            centos.7      

​-i​

​選項可以進入到容器内部。

docker start -i centos.7      
[root@izoq008ryseuupz ~]# docker start -i centos.7
[root@dfe33f1c3ab1 /]# ll
total 60
-rw-r--r--  1 root root 12114 Nov 13 01:55 anaconda-post.log
lrwxrwxrwx  1 root root     7 Nov 13 01:53 bin -> usr/bin
drwxr-xr-x  5 root root   360 Nov 23 14:26 dev
drwxr-xr-x  1 root root  4096 Nov 23 11:34 etc
drwxr-xr-x  2 root root  4096 Apr 11  2018 home
-rw-r--r--  1 root root    14 Nov 23 12:14 kaven
lrwxrwxrwx  1 root root     7 Nov 13 01:53 lib -> usr/lib
lrwxrwxrwx  1 root root     9 Nov 13 01:53 lib64 -> usr/lib64
drwxr-xr-x  2 root root  4096 Apr 11  2018 media
drwxr-xr-x  2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x  2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 89 root root     0 Nov 23 14:26 proc
dr-xr-x---  1 root root  4096 Nov 23 11:34 root
drwxr-xr-x 11 root root  4096 Nov 13 01:55 run
lrwxrwxrwx  1 root root     8 Nov 13 01:53 sbin -> usr/sbin
drwxr-xr-x  2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x 13 root root     0 Apr 11  2018 sys
drwxrwxrwt  7 root root  4096 Nov 13 01:55 tmp
drwxr-xr-x 13 root root  4096 Nov 13 01:53 usr
drwxr-xr-x 18 root root  4096 Nov 13 01:54 var      

其他選項可以自己試一試。

Docker Stop

停止一個或多個運作中的容器。

docker stop --help      
[root@izoq008ryseuupz ~]# docker stop --help

Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...]

Stop one or more running containers

Options:
  -t, --time int   Seconds to wait for stop before killing it (default 10)      

停止容器​

​centos.7​

​​,容器停止成功後,容器的狀态會變成​

​exited​

​。

docker stop centos.7      
[root@izoq008ryseuupz ~]# docker stop centos.7
centos.7
[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                            PORTS                                        NAMES
74d0a8d032ff        centos:7            "/bin/bash"              16 minutes ago      Exited (137) About a minute ago                                                centos.7      

​-t​

​選項是在停止容器前等待數秒(預設值10)。

docker stop -t 50 centos.7      
[root@izoq008ryseuupz ~]# docker stop -t 50 centos.7
centos.7.2      

Docker Run

運作容器。

docker run --help      

通過選項​

​--help​

​​,可見​

​docker run​

​指令的選項非常多。

docker run -it --name centos.7.1 centos:7      

該指令會在鏡像​

​centos:7​

​​上建立并運作容器 ​

​centos.7.1​

​​,如果Docker已經拉取過​

​centos:7​

​​鏡像,則該指令會直接建立一個基于鏡像​

​centos:7​

​​的容器 ​

​centos.7.1​

​​,否則會先去倉庫拉取該​

​centos:7​

​​鏡像,如果沒有指定版本,預設拉取​

​:latest​

​​最新版,拉取成功後再運作該拉取的​

​centos:7​

​​鏡像,生成一個容器 ​

​centos.7.1​

​,最後再運作該容器。

[root@izoq008ryseuupz ~]# docker run -it --name centos.7.1 centos:7
[root@cbd85da38a58 /]# ll
total 56
-rw-r--r--  1 root root 12114 Nov 13 01:55 anaconda-post.log
lrwxrwxrwx  1 root root     7 Nov 13 01:53 bin -> usr/bin
drwxr-xr-x  5 root root   360 Nov 23 05:03 dev
drwxr-xr-x  1 root root  4096 Nov 23 05:03 etc
drwxr-xr-x  2 root root  4096 Apr 11  2018 home
lrwxrwxrwx  1 root root     7 Nov 13 01:53 lib -> usr/lib
lrwxrwxrwx  1 root root     9 Nov 13 01:53 lib64 -> usr/lib64
drwxr-xr-x  2 root root  4096 Apr 11  2018 media
drwxr-xr-x  2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x  2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 92 root root     0 Nov 23 05:03 proc
dr-xr-x---  2 root root  4096 Nov 13 01:55 root
drwxr-xr-x 11 root root  4096 Nov 13 01:55 run
lrwxrwxrwx  1 root root     8 Nov 13 01:53 sbin -> usr/sbin
drwxr-xr-x  2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x 13 root root     0 Apr 11  2018 sys
drwxrwxrwt  7 root root  4096 Nov 13 01:55 tmp
drwxr-xr-x 13 root root  4096 Nov 13 01:53 usr
drwxr-xr-x 18 root root  4096 Nov 13 01:54 var
[root@cbd85da38a58 /]# exit
exit      

​exit​

​​容器後,容器的狀态就是​

​exited​

​了。

[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                                        NAMES
cbd85da38a58        centos:7            "/bin/bash"              5 minutes ago       Exited (0) 38 seconds ago                                                  centos.7.1      

​docker run -it --name centos.7.1 centos:7​

​​和​

​docker start -i centos.7.1​

​類似,隻不過後者需要先建立容器。

[root@izoq008ryseuupz ~]# docker start -i centos.7.1
[root@cbd85da38a58 /]# ll
total 56
-rw-r--r--  1 root root 12114 Nov 13 01:55 anaconda-post.log
lrwxrwxrwx  1 root root     7 Nov 13 01:53 bin -> usr/bin
drwxr-xr-x  5 root root   360 Nov 23 05:10 dev
drwxr-xr-x  1 root root  4096 Nov 23 05:03 etc
drwxr-xr-x  2 root root  4096 Apr 11  2018 home
lrwxrwxrwx  1 root root     7 Nov 13 01:53 lib -> usr/lib
lrwxrwxrwx  1 root root     9 Nov 13 01:53 lib64 -> usr/lib64
drwxr-xr-x  2 root root  4096 Apr 11  2018 media
drwxr-xr-x  2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x  2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 93 root root     0 Nov 23 05:10 proc
dr-xr-x---  1 root root  4096 Nov 23 05:08 root
drwxr-xr-x 11 root root  4096 Nov 13 01:55 run
lrwxrwxrwx  1 root root     8 Nov 13 01:53 sbin -> usr/sbin
drwxr-xr-x  2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x 13 root root     0 Apr 11  2018 sys
drwxrwxrwt  7 root root  4096 Nov 13 01:55 tmp
drwxr-xr-x 13 root root  4096 Nov 13 01:53 usr
drwxr-xr-x 18 root root  4096 Nov 13 01:54 var
[root@cbd85da38a58 /]# exit
exit      

一般需要容器在背景運作,​

​-d​

​選項就很有用了。

docker run -d -it --name centos.7.2  centos:7      
[root@izoq008ryseuupz ~]# docker run -d -it --name centos.7.2  centos:7
a258385ce59290615b250405beaf403aecc9ff75679641a0d8091795b7dc44f7
[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                                        NAMES
a258385ce592        centos:7            "/bin/bash"              6 seconds ago       Up 6 seconds                                                               centos.7.2      

其他選項可以自己試一試。

Exit

​exit​

​​是在容器内部執行的指令,執行後會退出目前容器,并且将目前容器停止(容器狀态會是​

​exited​

​),在上面也使用過。

[root@izoq008ryseuupz ~]# docker start -i centos.7.2
[root@a258385ce592 /]# ll
total 56
-rw-r--r--  1 root root 12114 Nov 13 01:55 anaconda-post.log
lrwxrwxrwx  1 root root     7 Nov 13 01:53 bin -> usr/bin
drwxr-xr-x  5 root root   360 Nov 23 11:00 dev
drwxr-xr-x  1 root root  4096 Nov 23 05:13 etc
drwxr-xr-x  2 root root  4096 Apr 11  2018 home
lrwxrwxrwx  1 root root     7 Nov 13 01:53 lib -> usr/lib
lrwxrwxrwx  1 root root     9 Nov 13 01:53 lib64 -> usr/lib64
drwxr-xr-x  2 root root  4096 Apr 11  2018 media
drwxr-xr-x  2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x  2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 95 root root     0 Nov 23 11:00 proc
dr-xr-x---  1 root root  4096 Nov 23 10:54 root
drwxr-xr-x 11 root root  4096 Nov 13 01:55 run
lrwxrwxrwx  1 root root     8 Nov 13 01:53 sbin -> usr/sbin
drwxr-xr-x  2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x 13 root root     0 Apr 11  2018 sys
drwxrwxrwt  7 root root  4096 Nov 13 01:55 tmp
drwxr-xr-x 13 root root  4096 Nov 13 01:53 usr
drwxr-xr-x 18 root root  4096 Nov 13 01:54 var
[root@a258385ce592 /]# exit
exit
[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                                        NAMES
a258385ce592        centos:7            "/bin/bash"              6 hours ago         Exited (0) 10 seconds ago                                                centos.7.2      

Docker Restart

重新開機一個或多個容器。

docker restart --help      
[root@izoq008ryseuupz ~]# docker restart --help

Usage:  docker restart [OPTIONS] CONTAINER [CONTAINER...]

Restart one or more containers

Options:
  -t, --time int   Seconds to wait for stop before killing the container (default 10)      

重新開機容器​

​centos.7.2​

​(不需要容器是運作狀态)。

docker restart centos.7.2      
[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                                        NAMES
a258385ce592        centos:7            "/bin/bash"              6 hours ago         Exited (0) 7 minutes ago                                                centos.7.2
[root@izoq008ryseuupz ~]# docker restart centos.7.2
centos.7.2
[root@izoq008ryseuupz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
a258385ce592        centos:7            "/bin/bash"              6 hours ago         Up 39 seconds                           centos.7.2
[root@izoq008ryseuupz ~]# docker restart centos.7.2
centos.7.2
[root@izoq008ryseuupz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
a258385ce592        centos:7            "/bin/bash"              6 hours ago         Up 3 seconds                            centos.7.2      

​-t​

​選項是在重新開機容器前等待數秒(預設值10)。

docker restart -t 100 centos.7.2      
[root@izoq008ryseuupz ~]# docker restart -t 100 centos.7.2
centos.7.2
[root@izoq008ryseuupz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
a258385ce592        centos:7            "/bin/bash"              6 hours ago         Up 14 seconds                           centos.7.2      

Docker RM

移除一個或多個容器。

docker rm --help      
[root@izoq008ryseuupz ~]# docker rm --help

Usage:  docker rm [OPTIONS] CONTAINER [CONTAINER...]

Remove one or more containers

Options:
  -f, --force     Force the removal of a running container (uses SIGKILL)
  -l, --link      Remove the specified link
  -v, --volumes   Remove anonymous volumes associated with the container      

移除容器​

​centos.7.1​

​​和​

​centos.7​

​。

docker rm centos.7.1 centos.7      
[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                                        NAMES
a258385ce592        centos:7            "/bin/bash"              6 hours ago         Up 4 minutes                                                            centos.7.2
cbd85da38a58        centos:7            "/bin/bash"              6 hours ago         Exited (0) 6 hours ago                                                  centos.7.1
74d0a8d032ff        centos:7            "/bin/bash"              7 hours ago         Exited (137) 6 hours ago                                                centos.7
[root@izoq008ryseuupz ~]# docker rm centos.7.1 centos.7
centos.7.1
centos.7
[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS                                        NAMES
a258385ce592        centos:7            "/bin/bash"              6 hours ago         Up 5 minutes                                                           centos.7.2      

這種方法不能移除正在運作的容器。

docker rm centos.7.2      
[root@izoq008ryseuupz ~]# docker rm centos.7.2
Error response from daemon: You cannot remove a running container a258385ce59290615b250405beaf403aecc9ff75679641a0d8091795b7dc44f7. Stop the container before attempting removal or force remove      

可以使用​

​-f​

​選項進行強制移除。

docker rm -f centos.7.2      
[root@izoq008ryseuupz ~]# docker rm -f centos.7.2
centos.7.2
[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS                                        NAMES      

移除所有容器;組合選項​

​-aq​

​​是選項​

​-a​

​​和​

​-q​

​的簡寫,即代表所有容器ID。

docker rm -f $(docker ps -aq)      
[root@izoq008ryseuupz ~]# docker rm -f $(docker ps -aq)
220188bb364f
fd00901dfbbb
fab31562aeac
fecbf8c1b956
a4cfeb0679fd
ae23a046566b
aa6a63e58682
5e73372c49d3
1655972bf5cd
ed1eb87a4d97
da76541620b1
1539964c89a1
c1b657c7608c
64105665545b
bc3a0ef096ed
[root@izoq008ryseuupz ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES      

其他選項可以自己試一試。

Docker Attach

進入容器内部。

docker attach --help      
[root@izoq008ryseuupz ~]# docker attach --help

Usage:  docker attach [OPTIONS] CONTAINER

Attach local standard input, output, and error streams to a running container

Options:
      --detach-keys string   Override the key sequence for detaching a container
      --no-stdin             Do not attach STDIN
      --sig-proxy            Proxy all received signals to the process (default true)      

進入容器​

​centos.7.2​

​内部。

docker attach centos.7.2      
[root@izoq008ryseuupz ~]# docker attach centos.7.2
[root@dfe33f1c3ab1 /]# ll
total 56
-rw-r--r--  1 root root 12114 Nov 13 01:55 anaconda-post.log
lrwxrwxrwx  1 root root     7 Nov 13 01:53 bin -> usr/bin
drwxr-xr-x  5 root root   360 Nov 23 11:35 dev
drwxr-xr-x  1 root root  4096 Nov 23 11:34 etc
drwxr-xr-x  2 root root  4096 Apr 11  2018 home
lrwxrwxrwx  1 root root     7 Nov 13 01:53 lib -> usr/lib
lrwxrwxrwx  1 root root     9 Nov 13 01:53 lib64 -> usr/lib64
drwxr-xr-x  2 root root  4096 Apr 11  2018 media
drwxr-xr-x  2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x  2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 89 root root     0 Nov 23 11:35 proc
dr-xr-x---  1 root root  4096 Nov 23 11:34 root
drwxr-xr-x 11 root root  4096 Nov 13 01:55 run
lrwxrwxrwx  1 root root     8 Nov 13 01:53 sbin -> usr/sbin
drwxr-xr-x  2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x 13 root root     0 Apr 11  2018 sys
drwxrwxrwt  7 root root  4096 Nov 13 01:55 tmp
drwxr-xr-x 13 root root  4096 Nov 13 01:53 usr
drwxr-xr-x 18 root root  4096 Nov 13 01:54 var      

其他選項可以自己試一試。

Docker Logs

擷取容器的日志。

docker logs --help      
[root@izoq008ryseuupz ~]# docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
      --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)      

擷取容器​

​centos.7.2​

​的日志。

docker logs centos.7.2      
[root@izoq008ryseuupz ~]# docker logs centos.7.2
[root@dfe33f1c3ab1 /]# docker ps -a
bash: docker: command not found
[root@dfe33f1c3ab1 /]# exit
exit
[root@dfe33f1c3ab1 /]# ll
total 56
-rw-r--r--  1 root root 12114 Nov 13 01:55 anaconda-post.log
lrwxrwxrwx  1 root root     7 Nov 13 01:53 bin -> usr/bin
drwxr-xr-x  5 root root   360 Nov 23 11:35 dev
drwxr-xr-x  1 root root  4096 Nov 23 11:34 etc
drwxr-xr-x  2 root root  4096 Apr 11  2018 home
lrwxrwxrwx  1 root root     7 Nov 13 01:53 lib -> usr/lib
lrwxrwxrwx  1 root root     9 Nov 13 01:53 lib64 -> usr/lib64
drwxr-xr-x  2 root root  4096 Apr 11  2018 media
drwxr-xr-x  2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x  2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 89 root root     0 Nov 23 11:35 proc
dr-xr-x---  1 root root  4096 Nov 23 11:34 root
drwxr-xr-x 11 root root  4096 Nov 13 01:55 run
lrwxrwxrwx  1 root root     8 Nov 13 01:53 sbin -> usr/sbin
drwxr-xr-x  2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x 13 root root     0 Apr 11  2018 sys
drwxrwxrwt  7 root root  4096 Nov 13 01:55 tmp
drwxr-xr-x 13 root root  4096 Nov 13 01:53 usr
drwxr-xr-x 18 root root  4096 Nov 13 01:54 var
[root@dfe33f1c3ab1 /]# ^C
[root@dfe33f1c3ab1 /]# exit
exit      

使用​

​-t​

​選項可以得到每條日志的時間戳。

docker logs -t centos.7.2      
[root@izoq008ryseuupz ~]# docker logs -t centos.7.2
[root@dfe33f1c3ab1 /]# docker ps -a
2020-11-23T11:34:43.566995980Z bash: docker: command not found
2020-11-23T11:34:49.893516887Z [root@dfe33f1c3ab1 /]# exit
2020-11-23T11:34:49.893542753Z exit
[root@dfe33f1c3ab1 /]# ll
2020-11-23T11:37:19.154564430Z total 56
2020-11-23T11:37:19.154568643Z -rw-r--r--  1 root root 12114 Nov 13 01:55 anaconda-post.log
2020-11-23T11:37:19.154571936Z lrwxrwxrwx  1 root root     7 Nov 13 01:53 bin -> usr/bin
2020-11-23T11:37:19.154575318Z drwxr-xr-x  5 root root   360 Nov 23 11:35 dev
2020-11-23T11:37:19.154577984Z drwxr-xr-x  1 root root  4096 Nov 23 11:34 etc
2020-11-23T11:37:19.154580430Z drwxr-xr-x  2 root root  4096 Apr 11  2018 home
2020-11-23T11:37:19.154583081Z lrwxrwxrwx  1 root root     7 Nov 13 01:53 lib -> usr/lib
2020-11-23T11:37:19.154585744Z lrwxrwxrwx  1 root root     9 Nov 13 01:53 lib64 -> usr/lib64
2020-11-23T11:37:19.154588450Z drwxr-xr-x  2 root root  4096 Apr 11  2018 media
2020-11-23T11:37:19.154590994Z drwxr-xr-x  2 root root  4096 Apr 11  2018 mnt
2020-11-23T11:37:19.154593486Z drwxr-xr-x  2 root root  4096 Apr 11  2018 opt
2020-11-23T11:37:19.154595932Z dr-xr-xr-x 89 root root     0 Nov 23 11:35 proc
2020-11-23T11:37:19.154598427Z dr-xr-x---  1 root root  4096 Nov 23 11:34 root
2020-11-23T11:37:19.154600899Z drwxr-xr-x 11 root root  4096 Nov 13 01:55 run
2020-11-23T11:37:19.154603363Z lrwxrwxrwx  1 root root     8 Nov 13 01:53 sbin -> usr/sbin
2020-11-23T11:37:19.154606005Z drwxr-xr-x  2 root root  4096 Apr 11  2018 srv
2020-11-23T11:37:19.154608471Z dr-xr-xr-x 13 root root     0 Apr 11  2018 sys
2020-11-23T11:37:19.154610953Z drwxrwxrwt  7 root root  4096 Nov 13 01:55 tmp
2020-11-23T11:37:19.154613413Z drwxr-xr-x 13 root root  4096 Nov 13 01:53 usr
2020-11-23T11:37:19.154615882Z drwxr-xr-x 18 root root  4096 Nov 13 01:54 var
2020-11-23T11:37:23.647675495Z [root@dfe33f1c3ab1 /]# ^C
2020-11-23T11:39:24.491498588Z [root@dfe33f1c3ab1 /]# exit
2020-11-23T11:39:24.491522428Z exit      

擷取最後幾條日志。

docker logs --tail 5 centos.7.2      
[root@izoq008ryseuupz ~]# docker logs --tail 5 centos.7.2
drwxr-xr-x 13 root root  4096 Nov 13 01:53 usr
drwxr-xr-x 18 root root  4096 Nov 13 01:54 var
[root@dfe33f1c3ab1 /]# ^C
[root@dfe33f1c3ab1 /]# exit
exit      

其他選項可以自己試一試。

Docker Top

展示容器内部運作的程序。

docker top --help      
[root@izoq008ryseuupz ~]# docker top --help

Usage:  docker top CONTAINER [ps OPTIONS]

Display the running processes of a container      

檢視容器​

​centos.7.2​

​中運作的程序。

docker top centos.7.2      
[root@izoq008ryseuupz ~]# docker top centos.7.2
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                1009                993                 0                   19:58               pts/0               00:00:00            /bin/bash      

Docker Inspect

傳回Docker對象的低級資訊,是以它可以對容器使用,也可以對鏡像使用,隻要是​

​Docker objects​

​即可。

docker inspect --help      
[root@izoq008ryseuupz ~]# docker inspect --help

Usage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]

Return low-level information on Docker objects

Options:
  -f, --format string   Format the output using the given Go template
  -s, --size            Display total file sizes if the type is container
      --type string     Return JSON for specified type      

鏡像​

​centos:7​

​的低級資訊。

docker inspect centos:7      
[root@izoq008ryseuupz ~]# docker inspect centos:7
[
    {
        "Id": "sha256:8652b9f0cb4c0599575e5a003f5906876e10c1ceb2ab9fe1786712dac14a50cf",
        "RepoTags": [
            "centos:7"
        ],
        "RepoDigests": [
            "centos@sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2020-11-14T00:20:04.644613188Z",
        "Container": "b454ba2d27117a169c53eb4c14faf363cb6aaca84df43408581fb748cc2bf796",
...
]      

容器​

​centos.7.2​

​的低級資訊。

docker inspect centos.7.2      
[root@izoq008ryseuupz ~]# docker inspect centos.7.2
[
    {
        "Id": "dfe33f1c3ab1db72c06965fcf54da895d6466cf8b990f1147916eb3c9d6009ca",
        "Created": "2020-11-23T11:34:37.28727717Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 1009,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-11-23T11:58:44.691540365Z",
            "FinishedAt": "2020-11-23T11:39:24.489513335Z"
        },
        "Image": "sha256:8652b9f0cb4c0599575e5a003f5906876e10c1ceb2ab9fe1786712dac14a50cf",
...
]      

其他選項可以自己試一試。

Docker CP

将容器中的檔案​

​copy​

​到本地檔案系統中。

docker cp --help      
[root@izoq008ryseuupz ~]# docker cp --help

Usage:  docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
  docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

Copy files/folders between a container and the local filesystem

Use '-' as the source to read a tar archive from stdin
and extract it to a directory destination in a container.
Use '-' as the destination to stream a tar archive of a
container source to stdout.

Options:
  -a, --archive       Archive mode (copy all uid/gid information)
  -L, --follow-link   Always follow symbol link in SRC_PATH      

進入容器​

​centos.7.2​

​​中建立​

​kaven​

​檔案。

[root@dfe33f1c3ab1 /]# echo "this is kaven" > kaven      
Docker - Docker Container及Container指令詳解

将容器​

​centos.7.2​

​​中的​

​kaven​

​​檔案​

​copy​

​到本地。

[root@izoq008ryseuupz ~]# docker cp centos.7.2:/kaven kaven      
Docker - Docker Container及Container指令詳解

可以看到​

​copy​

​的檔案是正确的。

[root@izoq008ryseuupz ~]# vim kaven      
Docker - Docker Container及Container指令詳解

其他選項可以自己試一試。

Docker Commit

根據容器的更改建立新的鏡像。

docker commit --help      
[root@izoq008ryseuupz ~]# docker commit --help

Usage:  docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <[email protected]>")
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)      

根據目前的容器​

​centos.7.2​

​​,建立一個新的鏡像​

​kaven/centos:7.2​

​。

docker commit -a "kaven" -m "this is image" centos.7.2 kaven/centos:7.2      
[root@izoq008ryseuupz ~]# docker commit -a "kaven" -m "this is image" centos.7.2 kaven/centos:7.2
sha256:6166378a65c385ec1622d3c5c63f4d1e88ac53cea80cf3703234c9cd48969620
[root@izoq008ryseuupz ~]# docker images
REPOSITORY                                                     TAG                 IMAGE ID            CREATED             SIZE
kaven/centos                                                   7.2                 6166378a65c3        9 seconds ago       204MB      

根據新的鏡像​

​kaven/centos:7.2​

​​,再去建立并運作新的容器​

​centos.7.3​

​。

docker run -it --name centos.7.3 kaven/centos:7.2      

可見新的容器​

​centos.7.3​

​​中也有​

​kaven​

​檔案。

[root@izoq008ryseuupz ~]# docker run -it --name centos.7.3 kaven/centos:7.2
[root@f6356144219e /]# ll
total 60
-rw-r--r--  1 root root 12114 Nov 13 01:55 anaconda-post.log
lrwxrwxrwx  1 root root     7 Nov 13 01:53 bin -> usr/bin
drwxr-xr-x  5 root root   360 Nov 23 12:32 dev
drwxr-xr-x  1 root root  4096 Nov 23 12:32 etc
drwxr-xr-x  2 root root  4096 Apr 11  2018 home
-rw-r--r--  1 root root    14 Nov 23 12:14 kaven
lrwxrwxrwx  1 root root     7 Nov 13 01:53 lib -> usr/lib
lrwxrwxrwx  1 root root     9 Nov 13 01:53 lib64 -> usr/lib64
drwxr-xr-x  2 root root  4096 Apr 11  2018 media
drwxr-xr-x  2 root root  4096 Apr 11  2018 mnt
drwxr-xr-x  2 root root  4096 Apr 11  2018 opt
dr-xr-xr-x 94 root root     0 Nov 23 12:32 proc
dr-xr-x---  1 root root  4096 Nov 23 11:34 root
drwxr-xr-x 11 root root  4096 Nov 13 01:55 run
lrwxrwxrwx  1 root root     8 Nov 13 01:53 sbin -> usr/sbin
drwxr-xr-x  2 root root  4096 Apr 11  2018 srv
dr-xr-xr-x 13 root root     0 Apr 11  2018 sys
drwxrwxrwt  7 root root  4096 Nov 13 01:55 tmp
drwxr-xr-x 13 root root  4096 Nov 13 01:53 usr
drwxr-xr-x 18 root root  4096 Nov 13 01:54 var      

其他選項可以自己試一試。

繼續閱讀