(二)archlinux中的第一個容器 頂 原

寫在前面:最近進了華&爲某個項目組,需要用到Docker。所以趁着噹噹網前陣子圖書做活動,所以買了一本《第一本Docker書》。接下來的內容參考本書和互聯網,就當是自己學習的一個記錄。如有侵權,請告知([email protected]),本人第一時間處理。謝謝!

本文永久更新地址:https://my.oschina.net/bysu/blog/1805153

【若要到岸,請搖船:開源中國 不最醉不龜歸】

1.運行以下命令創建我們的第一個容器 

sudo docker run -i -t base/archlinux /bin/bash

#如果需要使用ubuntu鏡像
sudo docker run -i -t ubuntu /bin/bash

#如果需要使用centOS鏡像
sudo docker run -i -t centos /bin/bash

#如果需要使用centOS7鏡像
sudo docker pull openshift/base-centos7 /bin/bash

不過有可能出現如下異常,出現該異常可以試着更換一下源,或者試一下通過docker pull來先把鏡像拉取到本地。

若無異常,則進入我們的第一個容器

命令中的-i保證容器中STDIN開啓,-t標誌則是讓docker爲創建容器分配一個僞tty終端。這兩個參數是創建交互式容器最基本的參數。如若沒有這兩個參數,創建的是一個運行於後臺的容器。

命令中的/bin/bash則是告訴docker成功過創建一個新的容器後,啓動一個bash shell。

其中的archlinux、centos等Linux發行版字樣則是告知docker基於什麼鏡像來創建容器。其他鏡像可以到docker下載你需要的鏡像,如下圖,找到你需要的鏡像,右側的Docker Pull Command欄會跟你說對應的鏡像拉取命令。

                

可以通過先拉取鏡像到本地,執行上面的docker run命令如果檢測到本地的鏡像,docker則不再到Docker Hub Registry查看是否有對應的鏡像,如果本地無對應的鏡像,則到Docker Hub Registry中查看,如果查找到,則下載到本地:

#拉取archlinux鏡像
sudo docker pull base/archlinux

2.現在來使用我們剛剛創建好的第一個容器

在使用容器之前我們先來熟悉幾個常用的命令。

#查看目前有幾個容器,多少個暫停,多少個停止,多少個正在運行
[bysu@subaoya ~]$ sudo docker info

#######下面就是運行後的一部分結果############
Containers: 1
Running: 0
Paused: 0
Stopped: 1
Images: 1
########################################

[bysu@subaoya ~]$ sudo docker ps  #查看正在運行的容器
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              
d092d144e887        base/archlinux      "/bin/bash"         35 minutes ago      Up 12 minutes  
PORTS               NAMES
                    sad_rosalind
[bysu@subaoya ~]$ sudo docker ps -a   #查看所有狀態的容器
CONTAINER ID   IMAGE           COMMAND       CREATED        STATUS    PORTS     NAMES
2552cacc1928   base/archlinux  "/bin/bash"   33 seconds     Exite d26 seconds   ecstatic_galileo
d092d144e887   base/archlinux  "/bin/bash"   35 minutes ago Up 12 minutes       sad_rosalind

[bysu@subaoya ~]$ sudo docker ps -a|grep Up|awk '{print $1}'   #查看正在運行的容器名
d092d144e887

#查看所有容器的名字
sudo docker ps -a -q

#######下面就是運行結果############
bfacc5ccb74d
a56a719eb52a
0fc9b2bc3e84

#刪除不在運行的所有容器
sudo docker rm $(sudo docker ps -a -q)

#######下面就是運行結果############
bfacc5ccb74d
0fc9b2bc3e84
Error response from daemon: You cannot remove a running container a56a719eb52ae8bb3ecbe22bc1b029f203206b0f7144e74992038bb76c56b6ea. Stop the container before attempting removal or force remove

#停止一個正在運行的容器
sudo docker stop a56a719eb52a

#######下面就是運行結果############
a56a719eb52a

通過前面的方式創建容器時,可以給容器命名。如果創建時不指定名字,則會隨機生成容器名字。

sudo docker run --name my_first_container -i -t base/archlinux /bin/bash

一般地,上述創建容器成功,也直接進入容器,我第一時間想到的是exit(不知道有沒其他命令切出容器,如果需要用到的,自行搜索引擎),如此這般之後,就有可能出現剛剛切出的容器已經停止運行。這會導致你後續如果想通過docker exec -it my_first_container bash 或者sudo docker attach my_first_container再次進入容器 my_first_container,會出現異常,需要先通過命令sudo docker start my_first_container,重新啓動該容器。以上命令中容器名可以用容器ID替換。

查看主機名

hostname

查看網絡接口

ifconfig

ifconfig命令不存在的問題,參考

安裝其他軟件跟archlinux中是一樣的。

3.創建守護式容器

守護式容器可以長期運行,沒有交互式會話,一般用於作爲運行應用程序和服務的載體。其創建命令如下:

sudo docker run --name my_daemon -d base/archlinux /bin/sh -c "while true;do echo hello docker;sleep 1;done"

上述命令中,-d參數告知docker將容器放後臺運行。

由於上面創建的容器放在後臺,我們作爲容器的“創世者”,它是死是活我們多少總有點關心的。

sudo docker ps -a

通過status字段,得知它還活着。竟然得知還活着,那自然而然又想知道ta過得好不好——有沒在正常工作了。可以通過查看日誌,得知ta的近況如何。

sudo docker logs my_daemon

實時查看日誌可以使用下列命令。

sudo docker logs -f my_daemon

#實時查看最新日誌
sudo docker logs --tail 0 -f my_daemon

#實時查看最新日誌,加上-t標誌爲每條日誌項加上時間戳,方便調試
sudo docker logs --tail 0 -ft my_daemon

退出請Ctrl+c,用過Linux的應該都知道。

[bysu@subaoya ~]$ sudo docker attach my_daemon
hello docker
hello docker

....

上面標紅的代碼執行後,無法通過Ctrl+c退出容器。無奈的我只能把xshell給X掉重連。有知道怎麼關掉的麻煩告知一下(也許是無法關閉)。

4.Docker日誌驅動

執行docker run命令時通過--log-driver選項來實現。如果通過該選項指定syslog,將容器的所有日誌輸出重定向到syslog,則會同時禁用docker logs命令,具體命令如下:

sudo docker run --name my_log_daemon --log-driver="syslog" -d base/archlinux /bin/sh -c "while true;do echo hello logs;sleep 30;done"

如果要禁用容器所有的日誌,則可用選項none,該選項同樣會禁用docker logs命令。

5.查看容器內的進行

使用sudo docker top my_first_container可以查看容器內的進程

6.Docker統計信息

可以通過docker stats命令,動態查看多個容器的CPU,內存,網速,IO,這能快速監控一臺主機上的一組容器。

7.在容器內部運行進程

通過docker exec命令在容器內部額外啓動新進程。在容器內可以運行的進程有兩種類型:後臺任務和交互式任務。

容器中運行後臺任務

sudo docker exec -d my_first_container touch /etc/createFile

容器中運行交互命令

sudo docker exec -t -i my_first_container /bin/bash

如果容器在創建時就是交互式的,可以直接sudo docker attach命令附到原本的容器上,效果等同上面這條命令。

8.停止守護式容器

sudo docker stop 容器名/容器ID

9.自動重啓容器

可通過--restart標誌讓docker自動重啓容器。--restart標誌會檢查容器退出的代碼,並據此來決定是否要重啓容器。Docker默認不會重啓容器。

總是自動重啓容器的命令

sudo docker run --restart=always --name my_daemon -d base/archlinux /bin/sh -c "while true;do echo hello docker;sleep 60;done"

--restart標誌被設置爲always,無論容器退出的代碼是什麼,Docker都會自動重啓該容器。

如果--restart標誌被設置爲on-failure,則只有容器退出的代碼爲非0值時,纔會自動重啓。同時還可以設置一個可選參數,標誌重啓次數。

sudo docker run --restart=on-failure:5 --name my_daemon -d base/archlinux /bin/sh -c "while true;do echo hello docker;sleep 60;done"

當該容器退出代碼爲非0時,Docker會嘗試最多5次的重啓。

10.深入容器

 

未完待續...

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章