Docker學(xué)習(xí)路線11:Docker命令行

Docker CLI (命令行界面) 是一個(gè)強(qiáng)大的工具,可讓您與 Docker 容器、映像、卷和網(wǎng)絡(luò)進(jìn)行交互和管理。它為用戶提供了廣泛的命令,用于在其開發(fā)和生產(chǎn)工作流中創(chuàng)建、運(yùn)行和管理 Docker 容器和其他 Docker 資源。
安裝
要開始使用 Docker CLI,您需要在計(jì)算機(jī)上安裝 Docker。您可以從 Docker 文檔的官方安裝指南中按照您所使用的操作系統(tǒng)進(jìn)行安裝。
基本命令
以下是一些基本的 Docker CLI 命令,供您熟悉:
??
docker run
:從 Docker 映像創(chuàng)建并啟動(dòng)容器??
docker container
:列出正在運(yùn)行的容器??
docker image
:列出系統(tǒng)中所有可用的映像??
docker pull
:從 Docker Hub 或其他注冊(cè)表拉取映像??
docker push
:將映像推送到 Docker Hub 或其他注冊(cè)表??
docker build
:從 Dockerfile 構(gòu)建映像??
docker exec
:在正在運(yùn)行的容器中運(yùn)行命令??
docker logs
:顯示容器的日志
Docker Run 選項(xiàng)
docker run
?是 Docker CLI 中最重要的命令之一。您可以使用各種選項(xiàng)自定義容器的行為,例如:
??
d, --detach
:在后臺(tái)運(yùn)行容器??
e, --env
:為容器設(shè)置環(huán)境變量??
v, --volume
:綁定掛載卷??
p, --publish
:將容器的端口發(fā)布到主機(jī)??
name
:為容器指定名稱??
restart
:指定容器的重啟策略??
rm
:容器退出時(shí)自動(dòng)刪除容器
Dockerfile
Dockerfile 是一個(gè)包含構(gòu)建 Docker 映像的指令的腳本。您可以使用 Docker CLI 使用 Dockerfile 構(gòu)建、更新和管理 Docker 映像。
以下是 Dockerfile 的一個(gè)簡(jiǎn)單示例:
#?Set?the?base?image?to?use
FROM?alpine:3.7
#?Update?the?system?and?install?packages
RUN?apk?update?&&?apk?add?curl
#?Set?the?working?directory
WORKDIR?/app
#?Copy?the?application?file
COPY?app.sh?.
#?Set?the?entry?point
ENTRYPOINT?["./app.sh"]
要構(gòu)建映像,請(qǐng)使用以下命令:
docker?build?-t?my-image?.
Docker Compose
Docker Compose 是一個(gè) CLI 工具,用于使用 YAML 文件定義和管理多容器 Docker 應(yīng)用程序。它與 Docker CLI 協(xié)作,提供了一種一致的方式來管理多個(gè)容器及其依賴項(xiàng)。
使用官方的安裝指南安裝 Docker Compose,然后您可以創(chuàng)建一個(gè)?docker-compose.yml
?文件來定義和運(yùn)行多容器應(yīng)用程序:
version:?'3'
services:??
web:????
image:?webapp-image????
ports:??????-?"80:80"??
database:????
image:?mysql????
environment:??????-?MYSQL_ROOT_PASSWORD=my-secret-pw
使用以下命令運(yùn)行應(yīng)用程序:
docker-compose?up
總之,Docker CLI 是管理 Docker 容器和資源的強(qiáng)大而多才多藝的工具。一旦熟悉其命令和功能,您將能夠輕松開發(fā)、維護(hù)和部署使用 Docker 的應(yīng)用程序。
Docker鏡像
Docker鏡像是一種輕量級(jí)、獨(dú)立、可執(zhí)行的軟件包,其包含了運(yùn)行應(yīng)用程序所需的所有組件。這些組件包括:依賴項(xiàng)、庫、運(yùn)行時(shí)、系統(tǒng)工具和代碼等,以確保應(yīng)用程序在不同的環(huán)境中可以保持一致地運(yùn)行。
Docker鏡像是使用Dockerfile進(jìn)行構(gòu)建和管理的。Dockerfile是一個(gè)包含了創(chuàng)建Docker鏡像所需指令的腳本,提供了一個(gè)逐步設(shè)置應(yīng)用程序環(huán)境的指南。
使用Docker鏡像
Docker CLI提供了多個(gè)命令來管理和使用Docker鏡像。其中一些重要的命令包括:
??
docker image ls
:列出本地系統(tǒng)上所有可用的鏡像。??
docker build
:從Dockerfile構(gòu)建鏡像。??
docker image rm
:刪除一個(gè)或多個(gè)鏡像。??
docker pull
:從注冊(cè)表(如Docker Hub)將鏡像拉到本地系統(tǒng)。??
docker push
:將鏡像推送到倉庫。
例如,要從Docker Hub拉取官方的Ubuntu鏡像,可以運(yùn)行以下命令:
docker?pull?ubuntu:latest
拉取鏡像后,可以使用docker run
命令創(chuàng)建和運(yùn)行一個(gè)使用該鏡像的容器:
docker?run?-it?ubuntu:latest?/bin/bash
這個(gè)命令將創(chuàng)建一個(gè)新的容器,并使用**/bin/bash
** shell在容器內(nèi)啟動(dòng)一個(gè)交互式會(huì)話。
共享鏡像
Docker鏡像可以使用容器注冊(cè)表(如Docker Hub、Google Container Registry或Amazon Elastic Container Registry(ECR))共享和分發(fā)。一旦將您的鏡像推送到注冊(cè)表中,其他人就可以輕松地訪問和使用它們。
要共享您的鏡像,您首先需要使用適當(dāng)?shù)拿袷綄?duì)其進(jìn)行標(biāo)記:
docker?tag?<image-id>?<username>/<repository>:<tag>
然后,您可以使用以下命令將標(biāo)記的鏡像推送到注冊(cè)表中:
docker?push?<username>/<repository>:<tag>
總之,Docker鏡像是Docker生態(tài)系統(tǒng)中不可或缺的一部分,允許開發(fā)人員打包其應(yīng)用程序、輕松地共享它們,并在不同的環(huán)境中確保一致性。通過理解Docker鏡像和管理它們的命令,您可以利用容器化的力量,增強(qiáng)您的開發(fā)工作流程。在您的開發(fā)過程中使用Docker鏡像可以大大提高開發(fā)效率,減少開發(fā)過程中的問題,讓您能夠更好地專注于應(yīng)用程序的核心開發(fā)。
容器
容器可以被視為輕量級(jí)的、獨(dú)立的可執(zhí)行軟件包,包括運(yùn)行所需的所有東西,包括代碼、運(yùn)行時(shí)、庫、環(huán)境變量和配置文件。容器將軟件與其環(huán)境隔離開來,確保其在不同環(huán)境下工作一致。
為什么使用容器?
??可移植性:容器確保應(yīng)用程序在不同平臺(tái)上一致工作,無論是開發(fā)人員的筆記本電腦還是生產(chǎn)服務(wù)器。這消除了“它在我的機(jī)器上運(yùn)行”的問題。
??效率:容器很輕量級(jí),因?yàn)樗鼈兪褂霉蚕碣Y源,沒有完整操作系統(tǒng)的開銷。這使得啟動(dòng)時(shí)間更快,減少資源使用。
??可擴(kuò)展性:容器可以根據(jù)工作量輕松地進(jìn)行縮放,因此非常適合分布式應(yīng)用程序和微服務(wù)。
??一致性:容器使得開發(fā)人員、QA 和運(yùn)維團(tuán)隊(duì)在整個(gè)應(yīng)用程序生命周期中擁有一致的環(huán)境,從而加快了部署流程。
??安全性:容器提供了一定程度的隔離,使其與其他容器和底層主機(jī)系統(tǒng)隔離開來,有助于維護(hù)應(yīng)用程序的安全性。
使用 Docker CLI 工作
Docker CLI 提供了多個(gè)命令,可幫助您創(chuàng)建、管理和與容器交互。一些常用命令包括:
??**
docker run
**:用于創(chuàng)建和啟動(dòng)新容器。??**
docker container ls
**:列出運(yùn)行中的容器。??**
docker container stop
**:停止運(yùn)行中的容器。??**
docker container rm
**:刪除已停止的容器。??**
docker exec
**:在運(yùn)行中的容器中執(zhí)行命令。??**
docker logs
**:獲取容器的日志,有助于調(diào)試問題。
Docker卷
Docker卷是一種用于存儲(chǔ)Docker容器生成和使用的數(shù)據(jù)的機(jī)制。它們?cè)试S您將數(shù)據(jù)與容器本身分開,從而輕松備份、遷移和管理持久性數(shù)據(jù)。
卷的重要性
Docker容器本質(zhì)上是暫時(shí)的,這意味著它們可以輕松地停止、刪除或替換。盡管這對(duì)應(yīng)用程序開發(fā)和部署非常有利,但處理持久性數(shù)據(jù)時(shí)會(huì)帶來挑戰(zhàn)。這就是卷的作用。它們提供了一種將數(shù)據(jù)存儲(chǔ)和管理與容器的生命周期分開的方法。
卷的類型
Docker中有三種類型的卷:
??主機(jī)卷:它們存儲(chǔ)在主機(jī)機(jī)器的文件系統(tǒng)中,通常位于
/var/lib/docker/volumes
目錄中。這些可以很容易地訪問,但可能會(huì)帶來可移植性或文件系統(tǒng)兼容性問題。??匿名卷:這些是在運(yùn)行容器時(shí)沒有指定卷時(shí)自動(dòng)生成的。它們的ID由Docker生成,也存儲(chǔ)在主機(jī)機(jī)器的文件系統(tǒng)中。
??命名卷:與匿名卷類似,命名卷也存儲(chǔ)在主機(jī)機(jī)器的文件系統(tǒng)中。但是,您可以提供自定義名稱,這樣在其他容器中引用或備份時(shí)更容易。
使用Docker CLI管理卷
Docker CLI提供了各種命令來管理卷:
??
docker volume create
: 使用給定的名稱創(chuàng)建新卷。??
docker volume ls
: 列出系統(tǒng)中的所有卷。??
docker volume inspect
: 提供有關(guān)特定卷的詳細(xì)信息。??
docker volume rm
: 刪除卷。??
docker volume prune
: 刪除所有未使用的卷。
要在容器中使用卷,可以在docker run
命令期間使用-v
或--volume
標(biāo)志。例如:
docker?run?-d?--name?my-container?-v?my-named-volume:/var/lib/data?my-image
此命令使用“my-image”映像創(chuàng)建一個(gè)名為“my-container”的新容器,并在容器內(nèi)部將“my-named-volume”卷掛載到/var/lib/data
路徑。
Docker 網(wǎng)絡(luò)
Docker 網(wǎng)絡(luò)提供了管理容器通信的重要方法。它允許容器使用各種網(wǎng)絡(luò)驅(qū)動(dòng)程序相互通信并與主機(jī)機(jī)器通信。通過理解和利用不同類型的網(wǎng)絡(luò)驅(qū)動(dòng)程序,您可以設(shè)計(jì)容器網(wǎng)絡(luò)以適應(yīng)特定的場(chǎng)景或應(yīng)用程序需求。
網(wǎng)絡(luò)驅(qū)動(dòng)程序
Docker 中有幾個(gè)可用的網(wǎng)絡(luò)驅(qū)動(dòng)程序。這里,我們將介紹四個(gè)最常見的驅(qū)動(dòng)程序:
??bridge:容器的默認(rèn)網(wǎng)絡(luò)驅(qū)動(dòng)程序。它創(chuàng)建了一個(gè)私有網(wǎng)絡(luò),容器可以相互通信并與主機(jī)機(jī)器通信。在此網(wǎng)絡(luò)上的容器可以通過主機(jī)網(wǎng)絡(luò)訪問外部資源。
??host:該驅(qū)動(dòng)程序取消了網(wǎng)絡(luò)隔離并允許容器共享主機(jī)的網(wǎng)絡(luò)。在網(wǎng)絡(luò)性能至關(guān)重要的情況下,它非常有用,因?yàn)樗钚』巳萜骶W(wǎng)絡(luò)的開銷。
??none:該網(wǎng)絡(luò)驅(qū)動(dòng)程序禁用容器網(wǎng)絡(luò)。使用此驅(qū)動(dòng)程序的容器在沒有任何網(wǎng)絡(luò)訪問的隔離環(huán)境下運(yùn)行。
??overlay:該網(wǎng)絡(luò)驅(qū)動(dòng)程序使部署在不同主機(jī)上的容器能夠相互通信。它專為 Docker Swarm 設(shè)計(jì),并且非常適合多主機(jī)或基于集群的容器部署。
管理 Docker 網(wǎng)絡(luò)
Docker CLI 提供了各種命令來管理網(wǎng)絡(luò)。以下是一些有用的命令:
??列出所有網(wǎng)絡(luò):
docker network ls
??檢查網(wǎng)絡(luò):
docker network inspect <network_name>
??創(chuàng)建新網(wǎng)絡(luò):
docker network create --driver <driver_type> <network_name>
??將容器連接到網(wǎng)絡(luò):
docker network connect <network_name> <container_name>
??將容器與網(wǎng)絡(luò)斷開連接:
docker network disconnect <network_name> <container_name>
??刪除網(wǎng)絡(luò):
docker network rm <network_name>
最后
為了方便其他設(shè)備和平臺(tái)的小伙伴觀看往期文章,鏈接奉上:
公眾號(hào)?Let us Coding
,???/strong>,知乎,開源中國,CSDN,思否,掘金,InfoQ,簡(jiǎn)書,博客園,慕課,51CTO,helloworld,騰訊開發(fā)者社區(qū),阿里開發(fā)者社區(qū)
看完如果覺得有幫助,歡迎點(diǎn)贊、收藏和關(guān)注