Docker - Docker Container及Container指令詳解
什麼是Docker容器(Docker Container)
上一篇部落格介紹了Docker鏡像(Docker Image)以及Image的一些指令:Docker - Docker Image及Image指令詳解。
其實鏡像(Image)和容器(Container)的關系,就像是程式和程序一樣,鏡像是靜态的定義,容器則是動态的定義,是鏡像運作時的實體。容器可以被建立、啟動、停止、删除、暫停等。每個容器都是互相隔離的、保證安全的平台。可以把容器看做是一個簡易版的Linux環境(包括
root
使用者權限、程序空間、使用者空間和網絡空間等)和運作在其中的應用程式。 下圖從頂層設計層面展示了鏡像和容器間的關系。一旦容器從鏡像上啟動後,二者之間就變成了互相依賴的關系,并且在鏡像上啟動的容器全部停止之前,鏡像是無法被删除的。嘗試删除鏡像而不停止或銷毀使用它的容器,會導緻出錯。
現在大概知道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
将容器
centos.7.2
中的
kaven
檔案
copy
到本地。
[root@izoq008ryseuupz ~]# docker cp centos.7.2:/kaven kaven
可以看到
copy
的檔案是正确的。
[root@izoq008ryseuupz ~]# vim kaven
其他選項可以自己試一試。
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
其他選項可以自己試一試。