之前的章節學習瞭如何構建Docker映象,並通過映象執行容器,從今天開始學習容器的各種操作,容器各種狀態之間如何轉換,以及實現容器的底層技術
執行容器
dokcer run 是執行容器的方法,之前我們已經學習了三種指定容器啟動時執行命令的方法
1、CMD 指令
2、ENTRYPOINT 指令
3、在 docker run 命令列中指定
在下面的例子中,發現docker run執行後容器直接退出了,沒有持續執行
root@docker-lab:~# docker run ubuntu pwd
/
root@docker-lab:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@docker-lab:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a4f89f53eaa3 ubuntu "pwd" 6 seconds ago Exited (0) 5 seconds ago quizzical_shtern
root@docker-lab:~#
如何讓容器長期執行
容器的生命週期依賴啟動時執行的命令,只要該命令不結束,容器也就不會退出
下面的例子可以保證容器不會退出,但是這樣佔用了一個終端,當終端關閉的時候容器也就退出了,這並不是我們想要的效果
root@docker-lab:~# docker run busybox ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.070 ms
64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.103 ms
64 bytes from 127.0.0.1: seq=2 ttl=64 time=0.056 ms
64 bytes from 127.0.0.1: seq=3 ttl=64 time=0.055 ms
64 bytes from 127.0.0.1: seq=4 ttl=64 time=0.054 ms
64 bytes from 127.0.0.1: seq=5 ttl=64 time=0.054 ms
64 bytes from 127.0.0.1: seq=6 ttl=64 time=0.060 ms
64 bytes from 127.0.0.1: seq=7 ttl=64 time=0.054 ms
64 bytes from 127.0.0.1: seq=8 ttl=64 time=0.053 ms
64 bytes from 127.0.0.1: seq=9 ttl=64 time=0.053 ms
新開一個終端進行檢視
root@docker-lab:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0683d1da57ed busybox "ping 127.0.0.1" 16 seconds ago Up 16 seconds ecstatic_visvesvaraya
docker run -d 可以讓容器在後臺啟動,不會佔用終端
當容器啟動是會返回一長串字元,這串字元是該容器的ID,docker ps 中也看到一個ID,但是隻有12位,這12位是容器完整ID的前12個字元
docker ps 中還能看到容器的名字,如果啟動容器是不使用 --name 指定容器名稱,docker會自動給容器起一個名字
長ID、短ID和NAME 都能代表一個具體的容器
root@docker-lab:~# docker run -d busybox ping 127.0.0.1
40112e9d5ae06f399c1c1ed4a1033725975b9a0473025d417aeee419d61fc213
root@docker-lab:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40112e9d5ae0 busybox "ping 127.0.0.1" 6 seconds ago Up 5 seconds focused_mendeleev
root@docker-lab:~# docker stop 40112e9d5ae0
40112e9d5ae0
root@docker-lab:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
40112e9d5ae0 busybox "ping 127.0.0.1" About a minute ago Exited (137) 2 seconds ago focused_mendeleev
root@docker-lab:~#
root@docker-lab:~# docker run --name test022 -d busybox ping 127.0.0.1
80971ed377ae31567097d58c43a1e818d3d099c8a3881534683e36aa57a5c519
root@docker-lab:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80971ed377ae busybox "ping 127.0.0.1" 3 seconds ago Up 2 seconds test022
40112e9d5ae0 busybox "ping 127.0.0.1" About a minute ago Exited (137) 47 seconds ago focused_mendeleev