寫在前面:最近進了華&爲某個項目組,需要用到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.深入容器
未完待續...