022、如何執行容器(2019-01-15 週二)

三角形發表於2019-01-16
 
之前的章節學習瞭如何構建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
 
 
 

相關文章