讓你快速入門(mén)Docker的30個(gè)命令行
容器和云是當(dāng)下最流行的技術(shù),這也是任何IT工作者都應(yīng)該掌握技能。如果你還沒(méi)有學(xué)過(guò)Docker,那么本文就是給你準(zhǔn)備的。本文中將拋開(kāi)常見(jiàn)教程中的預(yù)先的一大堆理論說(shuō)明,直接從上手操作開(kāi)始。如果你學(xué)會(huì)了文中所列舉的命令,則證明已經(jīng)初步學(xué)會(huì)了docker入門(mén)技能,更多知識(shí)你可以在此基礎(chǔ)上再深入學(xué)習(xí)。
一、容器管理
容器,就是Linux被嚴(yán)格限制資源約束(cgroups),安全約束(Unix權(quán)限,capabilities,SELinux,AppArmor,seccomp等)和命名空間(PID,網(wǎng)絡(luò),mount,等等)限制出來(lái)的應(yīng)用。docker是最常見(jiàn)的一種容器技術(shù),Docker由Docker daemon(監(jiān)聽(tīng)程序)、Docker鏡像(層)和Docker存儲(chǔ)(卷)和Docker網(wǎng)絡(luò)的構(gòu)成。一個(gè)容器就是指由docker運(yùn)行時(shí)基于docker鏡像創(chuàng)建的一個(gè)docker實(shí)例
創(chuàng)建容器
要?jiǎng)?chuàng)建一個(gè)容器,使用create命令, [鏡像名]替換為需要運(yùn)行的鏡像的名稱(chēng)。
- docker create [鏡像名]
當(dāng)按下enter按鍵時(shí),Docker默認(rèn)會(huì)本地鏡像庫(kù)中搜索,如果沒(méi)有,會(huì)去訪問(wèn)Docker Hub中搜索該鏡像,其下載本地系統(tǒng)并創(chuàng)建一個(gè)停止的容器。
比如,我們創(chuàng)建一個(gè)golang容器。
創(chuàng)建和運(yùn)行容器
要?jiǎng)?chuàng)建和運(yùn)行容器,請(qǐng)使用run命令,[鏡像名]替換為需要運(yùn)行的鏡像的名稱(chēng)將。該命令會(huì)從本地、Docker Hub中搜索指定的鏡像,并下載到本地,創(chuàng)建一個(gè)容器并啟動(dòng)該容器。
- docker run [鏡像名]
啟動(dòng)停止的容器
要在啟動(dòng)的一個(gè)容器(已停止),可以運(yùn)行start命令。start命令后可以使用 [容器名]或容器ID替換??梢允褂胐ocker ps -a 查看本地容器列表(包括已停止的容器)。
- docker start [容器名/ID]
停止容器
要停止一個(gè)運(yùn)行中的容器,可以使用stop命令。容器停止后,可以用start命令將其啟動(dòng)。
- docker stop [容器名/ID]
重啟容器
要重啟一個(gè)容器,可以使用restart命令。命令可以將正在運(yùn)行中的容器停止,然后再重新啟動(dòng)。
- docker restart [容器名/ID]
暫停容器
如果需要在正在運(yùn)行的容器中臨時(shí)暫停該過(guò)程,可以使用pause命令。
- docker pause [容器名/ID]
恢復(fù)暫停的容器
暫停容器后,可以使用unpause命令恢復(fù)已暫停的容器。
- docker unpause [容器名/ID]
列出正在運(yùn)行的容器
如果需要查看系統(tǒng)上正在運(yùn)行的容器的列表,請(qǐng)運(yùn)行以下命令。
- docker ps 或者
- docker container ls
上面的命令只會(huì)列出當(dāng)前正在運(yùn)行的容器,如果要列出本機(jī)所有的容器,可以使用:
- docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- fc6da76218aa golang "bash" 2 minutes ago Created kind_shirley
刪除容器
刪除一個(gè)容器,可以使用rm命令。要?jiǎng)h除容器,請(qǐng)確保容器已經(jīng)停止,否則會(huì)報(bào)錯(cuò)。
- docker rm [容器名/ID]
卸載容器
為了系統(tǒng)中刪除一個(gè)容器,可以運(yùn)行以下命令。用要?jiǎng)h除的容器[容器名]的名稱(chēng)或ID替換。
- docker rm [容器名/ID]
容器操作
如果要對(duì)容器執(zhí)行操作,有兩種方法,分別是exec命令和attach命令。
exec命令,用來(lái)在運(yùn)行的容器中執(zhí)行命令,比如:
- docker exec -it [容器名/ID] /bin/bash
會(huì)打開(kāi)一個(gè)偽終端,可以在終端中執(zhí)行命令。
attach命令,用來(lái)連接到正在運(yùn)行中的容器:
- docker attach --sig-proxy=false [容器名/ID]
attach到容器后,Ctrl+C可以退出,但是退出時(shí),容器也會(huì)停止,為了退出時(shí)不影響容器運(yùn)行,可以使用--sig-proxy=false參數(shù),這樣ctrl+C[D]后容器會(huì)繼續(xù)運(yùn)行。
查看容器日志
要查看當(dāng)前容器的執(zhí)行情況,需要查看容器日志??梢杂胊ttach到容器,可直接查看。當(dāng)然更常用的方法是用logs命令:
- docker logs [容器名/ID]
logs 可以附帶一些參數(shù):
- -f:表示實(shí)時(shí)打印容器日志,想象為tail -f
- --since 日期:表示打印制定日期以來(lái)的日志。
- --tail N數(shù)字:表示打印最后N條日志,想象為tail -n
查看容器的配置
容器的所有配置信息實(shí)際上是一個(gè)json文件,可以使用inspect命令,查看該容器的所有信息。
- docker inspect [容器名/ID]
二、鏡像管理
容器鏡像是包含Docker容器的操作系統(tǒng),應(yīng)用程序和初始狀態(tài)的文件??梢詮腄ockerfiles構(gòu)建,也可以用已經(jīng)運(yùn)行的容器創(chuàng)建。
在docker中,鏡像是一個(gè)標(biāo)準(zhǔn)的Tar包,包中包含了:
- Rootfs:容器上像操作系統(tǒng)的標(biāo)準(zhǔn)根(/)的目錄。例如,帶有/usr,/var,/home等的目錄。
- JSON文件:用來(lái)指定如何運(yùn)行rootfs。例如,容器啟動(dòng)時(shí)在rootfs中運(yùn)行的命令或入口點(diǎn);為容器設(shè)置的環(huán)境變量;容器的工作目錄;和其他一設(shè)置。
基于rootfs,其上面的json可以是互相依賴(lài)的,這樣就把docker鏡像分成了一個(gè)個(gè)的層:
以Dockerfile構(gòu)建鏡像
甲dockerfile是docker用來(lái)創(chuàng)建并建立一個(gè)容器的鏡像的命令的列表??梢酝ㄟ^(guò)運(yùn)行以下命令從dockerfile構(gòu)建鏡像。
- docker build -f [dockerfile路徑]
從容器構(gòu)建鏡像
還可以從正在運(yùn)行的容器為基礎(chǔ)構(gòu)建鏡像。這也是快速備份正容器的快照的方法。
- docker commit [容器名] [鏡像名]
從Docker Hub拉取鏡像
可使用以下命令將鏡像從Docker Hub下載到本地系統(tǒng)。
- docker image pull [鏡像名]
將鏡像推送到Docker Hub
將容器鏡像推送到Docker Hub之前,必須在Docker Hub上創(chuàng)建一個(gè)帳戶(hù),然后在終端登錄,在終端中運(yùn)行docker login命令:
- docker login
然后按要求輸入用戶(hù)名和密碼。認(rèn)證成功后,可以使用以下命令將鏡像推送到docker Hub。
- docker image push [鏡像名]
列出容器鏡像
如果需要查看系統(tǒng)上的鏡像列表,請(qǐng)運(yùn)行以下命令:
- docker image ls
或者直接用
- docker image
從系統(tǒng)中刪除鏡像
如果要從系統(tǒng)中刪除鏡像,請(qǐng)使用remove命令。
- docker image remove [鏡像名]
三、卷管理
通過(guò)docker run或docker create命令可以將默認(rèn)的Docker Volumes附加到容器,這樣創(chuàng)建的數(shù)據(jù)在鏡像重建過(guò)程中保持不變。
創(chuàng)建Docker卷
要?jiǎng)?chuàng)建docker卷,可以對(duì)卷,使用create命令:
- docker volume create [卷名]
刪除Docker卷
運(yùn)行rm命令以刪除Docker卷。請(qǐng)記住,如果刪除一個(gè)卷,則將刪除該卷中存儲(chǔ)的所有數(shù)據(jù)。
- docker volume rm [卷名]
查看卷信息
有時(shí)需要查看有關(guān)創(chuàng)建的卷的各種詳細(xì)信息,可以對(duì)卷使用inspect命令:
- docker volume inspect [卷名]
列出所有Docker卷
如果需要查看系統(tǒng)上所有卷的列表,可以對(duì)卷使用ls命令:
- docker volume ls
四、網(wǎng)絡(luò)管理
Docker網(wǎng)絡(luò)決定了容器之間如何相互連接以及如何與Internet連接??梢詾楦鞣N軟件應(yīng)用程序堆棧創(chuàng)建專(zhuān)用網(wǎng)絡(luò),以確保數(shù)據(jù)安全。
創(chuàng)建Docker網(wǎng)絡(luò)
docker network的create命令會(huì)在當(dāng)前系統(tǒng)上創(chuàng)建一個(gè)橋接網(wǎng)絡(luò),該橋接網(wǎng)絡(luò)將容器彼此連接并共享主機(jī)的網(wǎng)絡(luò)和Internet連接。
- docker network create [網(wǎng)絡(luò)名]
將容器連接到網(wǎng)絡(luò)
為了將容器連接到新網(wǎng)絡(luò),請(qǐng)使用connect命令。
- docker network connect [網(wǎng)絡(luò)名] [容器名]
斷開(kāi)容器與網(wǎng)絡(luò)的連接
要斷開(kāi)容器與網(wǎng)絡(luò)的連接,請(qǐng)使用disconnect命令。
- docker network disconnect [網(wǎng)絡(luò)名] [容器名]
查看網(wǎng)絡(luò)信息
如果需要檢查網(wǎng)絡(luò)上的詳細(xì)信息,可以對(duì)網(wǎng)絡(luò)使用inspect命令
- docker network inspect [網(wǎng)絡(luò)名]
列出所有網(wǎng)絡(luò)
可對(duì)網(wǎng)絡(luò)使用ls命令,會(huì)列出系統(tǒng)上的所有的docker網(wǎng)絡(luò)信息。
- docker network ls
刪除網(wǎng)絡(luò)
從系統(tǒng)中刪除網(wǎng)絡(luò)。,可以對(duì)網(wǎng)絡(luò)使用rm命令。
- docker network rm [網(wǎng)絡(luò)名]
五、總結(jié)
本文我們列出了常見(jiàn)的docker命令,如果你已經(jīng)可以熟練的使用這些命令,則說(shuō)明你docker技術(shù)已經(jīng)入門(mén)。可以接下來(lái)進(jìn)一步深入學(xué)習(xí)了,比如容器編排K8S集群等。