容器命名
docker 會為我們創建的每一個容器自動生成一個隨機的名稱。但是,這些名稱是不含任何規律的,我們記起來非常難。因此為了解決這個問題,我們可以在容器創建時為容器進行命名操作。具體命名的方法我們只需要在docker run 命令的后面加上--name 參數即可。具體命令如下:
$ sudo docker run --name 為容器指定的名稱 -i -t 鏡像名稱 /bin/bash
上面的命令將會創建一個以你指定的名字的容器。例如:創建一個名稱為:gao79135的容器
$ sudo docker run --name gao79135 -i -t centos /bin/bash
學會給創建的容器命名后,我們將討論一下容器命名的規則:一個合法的容器名稱只能包含以下字符: 小寫字母a-z 、大寫字母A-Z、數字0-9、下划線、圓點、橫線(如果要用正則表達式表示這些符號的話,就是[a-zA-Z0-9_.-]
在很多的Docker命令中,都可以用容器的名稱來替代容器ID,所以之后再使用docker對容器進行操作時,盡量要使用容器的名稱來對其進行操作!注意:容器的命名必須是唯一的。如果我們想試圖創建兩個名稱相同的容器,則命令將會失敗。所以,如果要使用的容器名稱已經存在,我們可以先將已有的同名容器進行刪除(docker rm)后再來創建新的容器。(docker rm 命令后面會詳細說到)
重新啟動已經停止的容器
當我們使用exit命令來退出容器時,容器就會變成停止狀態。那么,如果我們想要再次使用已經停止的容器的話,那么我們應該如何進行操作呢?docker start/restart/create 命令會幫助我們解決這個問題。
首先說一下docker start 命令以及命令格式如下:
$ sudo docker start 容器名稱/ID
docker start 命令代表可以啟動已經停止的容器。當這條命令執行完之后,原先處於停止狀態的容器將會再次啟動。
下面說一下 docker restart 命令以及命令格式如下:(常用)
$ sudo docker restart 容器名稱/ID
docker restart 命令代表可以重新啟動已經停止的容器。當這條命令執行完之后,無論是否處於停止狀態的容器都將會重新啟動。
最后,我們介紹一下docker create 命令以及命令格式如下: (不常用)
$ sudo docker create --name 容器名稱 鏡像名稱
docker create 命令代表可以創建一個容器,但是這個容器並不處於啟動狀態。(當然,使用docker create 命令創建完容器之后,我們可以使用docker start/restart 命令來后續對創建的容器進行啟動操作)。
附着到容器
Docker 容器重新啟動的時候,會沿用docker run 命令時指定的參數來運行。我們來舉個例子:假設我通過docker run 命令創建了一個名為gao79135的容器,具體命令如下:
$ sudo docker run --name gao79135 -i -t centos /bin/bash
那么,當我將gao79135容器退出再重新啟動時,gao79135容器會沿用先前創建它的docker run命令指定的參數(見上述命令的參數)來運行。因此,當我將gao79135容器再次啟動時,gao79135容器重新啟動並依舊運行一個交互式會話shell。
那么,容器是重新啟動了,但是我們還是在目前的docker宿主機上,那么我們應該如何重新獲取已經重新啟動的容器會話上?這個時候,我們就可以使用 docker attach 命令來重新附着到該容器的會話上。代碼如下:
$ sudo docker attach 容器名稱/ID
當我們執行了上述命令之后,我們就可以重新獲取到已經運行的容器Bash提示符,接着我們就可以繼續對已經運行的容器進行操作了。(當然,如果重新附着到已經運行的容器后,再次輸入了exit命令,那么該容器會再次停止運行)
創建守護式容器(重要!)
我們之前通過docker run -i -t 參數來創建了一個交互式容器,但是在生產環境當中,並不是所有的情況都適用與交互式容器。大多數情況下,我們都需要創建一個守護式容器,在后台默默為用戶提供服務。所以,學會創建守護式容器是重中之重!注意:守護式容器是沒有交互式會話的!這個是它與交互式容器的區別所在!
下面,我們就可以通過如下的命令格式來創建一個守護式容器。
$ sudo docker run --name 容器名稱 -d 鏡像名稱 /bin/sh -c "while true; do echo hello world; sleep 1; done"
接下來,我們依次解釋一下上述命令的用途:我們在docker run 命令中加上了 -d 參數,代表Docker會將創建的容器放到后台去運行。 並且,在docker run 命令中加上-c參數,代表容器在后台需要執行的命令。這里我們在容器要執行的命令處一直打印了 hello world 。這個情況直到容器或其進程停止運行時才會結束。
通過執行上述的命令,你會發現docker run 命令並沒有像創建交互式容器那樣,將docker宿主機的控制台附着到新的會話上,而是僅僅返回了創建該容器的ID而已,創建之后,我們就可以使用docker ps -a 命令來查看剛剛創建好的守護式容器了。
獲取容器的日志信息
在上述創建守護式容器的命令中,我們創建了一直在后台執行while循環的守護式容器。為了探究該守護式容器在后台都干了些什么(輸出了什么內容),我們可以用 docker logs 來獲取容器的日志。
一般來說,容器輸出的結果和操作、狀態等都會記錄到容器自身的日志中。接下來,我們來獲取一下上述創建的守護式容器的日志信息。(看看輸出了什么內容)
$ sudo docker logs 容器名稱
執行完上述命令之后,我們就可以在日志中看到了上述創建的守護式容器輸出的內容。內容如下:
hello world
hello world
hello world
hello world
...
這里,我們可以看到while循環正在向該守護式容器的日志中打印hello world。默認的docker logs 命令會輸出最后幾條日志項就返回。我們也可以在docker logs 命令后使用-f參數來監控docker的日志信息。(實時跟蹤(更新)docker的日志信息)(與tail -f 命令非常的相似。)
$ sudo docker logs -f 容器的名稱/ID
並且,我們也可以使用如下命令來獲取某個容器的最后10行內容
$ sudo docker logs --tail 10 容器名稱/ID
還可以使用如下命令來獲取容器的最新日志信息。(之前日志信息將被忽略)
$ sudo docker logs --tail 0 -f 容器名稱/ID
還可以在docker logs 命令的基礎上加上-t參數來給每條日志項加上時間戳
$ sudo docker logs -ft 容器名稱/ID
加上-t參數后,執行命令后的結果如下:
[May 10 13:06:07.934] hello world --中括號的內容代表時間戳信息。(實際進行實驗時,由於實驗時間的不同,時間戳會有差異!)
...
最后,我們可以使用ctrl + c 來退出日志的跟蹤(docker logs -f)