Docker
-
docker鏡像(Image)
docker鏡像類似于虛擬機(jī)鏡像,可以將其理解為一個只讀模板。除了提供容器運行時所需的程序、庫、資源、配置等文件外,docker鏡像還包含了一些為運行時準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量、用戶等)。
鏡像是創(chuàng)建docker容器的基礎(chǔ),它可以通過版本管理和增量的文件系統(tǒng),如Docker Hub。 -
docker容器(container)
docker容器(container)類似于輕量級的沙箱,docker利用容器來運行和隔離應(yīng)用。
容器是從鏡像創(chuàng)建的應(yīng)用運行實例, 可以將其啟動、開始、停止、刪除,但是所有的容器是相互隔離的,互不可見的,這就提供了一個實體機(jī)可以安裝多個容器,且很輕量級相對于虛擬機(jī)。鏡像本身是只讀的,容器從鏡像啟動的時候,docker會在鏡像的最上層創(chuàng)建一個可寫層,鏡像本身保持不變。 -
docker倉庫(repository)
docker倉庫(repository)類似于代碼庫,是docker集中存放鏡像的場所。 實際上,注冊服務(wù)器是存放倉庫的地方,其上往往存放著很多倉庫。每個倉庫集中存放某一類鏡像,往往包括多個鏡像文件,通過不同的標(biāo)簽(tag)來進(jìn)行區(qū)分。
根據(jù)存儲的鏡像公開分享與否,docker倉庫可以分為公開倉庫(Public)和私有倉庫(Private)兩種形式。目前,最大的公開倉庫是Docker Hub,存放了數(shù)量龐大的鏡像供用戶下載,國內(nèi)的公開鏡像包括Docker Pool,可以提供穩(wěn)定的國內(nèi)訪問,與GitHub類似。 -
Dockerfile
Dockerfile 是一個用來構(gòu)建鏡像的文本文件,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說明
Docker 鏡像與容器的差異
Docker 容器和鏡像是 Docker 技術(shù)中兩個不同的概念,它們代表了不同的層次和功能。
-
Docker 鏡像:
- Docker 鏡像是 Docker 容器的基礎(chǔ)。它是一個包含了應(yīng)用程序運行所需的一切的只讀模板。鏡像可以包含操作系統(tǒng)、運行時環(huán)境、應(yīng)用程序代碼、依賴關(guān)系和配置等。鏡像是通過 Docker 鏡像構(gòu)建命令(比如
docker build
)或者從 Docker Hub 等鏡像倉庫中下載的。 - 鏡像的特點是不可更改和只讀的,它可以被用來創(chuàng)建多個可運行的 Docker 容器。鏡像是多層存儲結(jié)構(gòu),每個層都可以復(fù)用和共享,這使得鏡像可以高效地分發(fā)和部署。
- Docker 鏡像是 Docker 容器的基礎(chǔ)。它是一個包含了應(yīng)用程序運行所需的一切的只讀模板。鏡像可以包含操作系統(tǒng)、運行時環(huán)境、應(yīng)用程序代碼、依賴關(guān)系和配置等。鏡像是通過 Docker 鏡像構(gòu)建命令(比如
-
Docker 容器:
- Docker 容器是由 Docker 鏡像創(chuàng)建的可運行實例。容器是在鏡像層之上(鏡像是只讀的),添加一個可寫的容器層。容器可以被啟動、停止、刪除和重新啟動。每個容器都是相互隔離的,具有自己的文件系統(tǒng)、網(wǎng)絡(luò)和進(jìn)程空間。容器可以在不同的主機(jī)和不同的 Docker 引擎中運行,具有高度的可移植性和可復(fù)制性。
- 容器通常用來運行單個應(yīng)用程序或者服務(wù),每個容器都有自己的運行環(huán)境和運行時配置。
總結(jié)來說,Docker 鏡像是一個只讀的模板,用于創(chuàng)建 Docker 容器。鏡像具有不變性和可重用性的特點。而容器是由鏡像創(chuàng)建的可運行實例,具有自己的文件系統(tǒng)和運行環(huán)境,通常用于運行應(yīng)用程序或者服務(wù)。在 Docker 中,鏡像與容器之間是父子關(guān)系,鏡像是容器的基礎(chǔ)。
Docker的好處
-
更便捷的應(yīng)用交付和部署
-
更便捷的升級和擴(kuò)縮容
-
更簡單的系統(tǒng)運維
-
更高效的計算資源利用
Hypervisor
Hypervisor(虛擬機(jī)監(jiān)視器)是一種軟件、硬件或者組合形式,用于虛擬化計算機(jī)資源,并管理多個虛擬機(jī)的創(chuàng)建、運行和監(jiān)控。
Hypervisor可以分為兩種類型:
-
Type 1 Hypervisor(裸金屬/直接運行型):直接運行在物理硬件上,也稱為裸金屬或裸機(jī)型Hypervisor。它具有更高的性能和直接的硬件訪問能力。Type 1 Hypervisor負(fù)責(zé)管理裸機(jī)資源,將其劃分為多個虛擬機(jī),每個虛擬機(jī)可以運行自己的操作系統(tǒng)。常見的Type 1 Hypervisor有VMware ESXi和Microsoft Hyper-V。
-
Type 2 Hypervisor(主機(jī)操作系統(tǒng)運行型):運行在主機(jī)操作系統(tǒng)之上,也稱為主機(jī)型Hypervisor。Type 2 Hypervisor在主機(jī)操作系統(tǒng)上創(chuàng)建和管理虛擬機(jī),并提供對虛擬機(jī)的資源分配和監(jiān)控。它通常用于開發(fā)和測試環(huán)境。常見的Type 2 Hypervisor有VMware Workstation和Oracle VirtualBox。
Hypervisor的主要功能包括:
- 資源虛擬化:將物理計算機(jī)的CPU、內(nèi)存、存儲等資源劃分成多個虛擬機(jī),并為每個虛擬機(jī)提供一定的資源配額。
- 虛擬機(jī)管理:創(chuàng)建、啟動、停止和刪除虛擬機(jī),提供虛擬機(jī)的管理接口和操作。
- 資源調(diào)度:根據(jù)虛擬機(jī)的需求和主機(jī)資源的可用性,動態(tài)調(diào)整資源分配,以實現(xiàn)更好的性能和利用率。
- 安全隔離:對不同虛擬機(jī)之間提供隔離性,確保一臺虛擬機(jī)的故障或安全問題不影響其他虛擬機(jī)。
- 監(jiān)控和報告:監(jiān)控虛擬機(jī)的性能指標(biāo)、資源利用率和運行狀態(tài),并生成報告或提供警報。
Hypervisor的作用是實現(xiàn)虛擬化技術(shù),使得一臺物理計算機(jī)能同時運行多個虛擬機(jī),并將它們隔離開來,從而提供更高的資源利用率、靈活性和可靠性。它是構(gòu)建虛擬化環(huán)境和云計算基礎(chǔ)設(shè)施的關(guān)鍵組件之一。
運維
運維,全稱為運營和維護(hù)(Operations and Maintenance),是指對計算機(jī)系統(tǒng)、網(wǎng)絡(luò)設(shè)施以及軟件應(yīng)用進(jìn)行有效運行和穩(wěn)定維護(hù)的工作。
在信息技術(shù)領(lǐng)域中,運維是一項重要的工作,它涵蓋了硬件設(shè)備、網(wǎng)絡(luò)設(shè)施、操作系統(tǒng)、數(shù)據(jù)庫、服務(wù)器等各個方面。運維人員負(fù)責(zé)監(jiān)控系統(tǒng)運行狀態(tài)、處理系統(tǒng)故障、進(jìn)行性能優(yōu)化、部署更新和維護(hù)安全等工作。Docker
是運維人員部署項目的高效工具。
一、安裝docker
查看centos版本信息,centos7
以上已內(nèi)置docker
安裝比較方便,參考
cat /etc/redhat-release
centos 7
下安裝docker
# 安裝Docker所需的一些依賴
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 安裝最新版本的Docker
sudo yum install docker-ce docker-ce-cli containerd.io
在sudo yum install -y docker
這條命令中,-y
是一個命令行選項,表示在安裝過程中自動應(yīng)答"yes"到所有的確認(rèn)提示。
這個選項對于在服務(wù)器環(huán)境中使用尤其有用,因為在這種環(huán)境中,可能需要進(jìn)行大量的包安裝和配置,如果每次都手動確認(rèn),會非常麻煩。使用-y
選項可以自動應(yīng)答所有的確認(rèn)提示,大大簡化操作。
啟用并啟動Docker服務(wù)
sudo systemctl enable docker
sudo systemctl start docker
驗證docker
是否安裝成功
docker run hello-world
# 或者
sudo docker --version
二、啟動docker
啟動Docker服務(wù),并設(shè)置為開機(jī)啟動
systemctl start docker.service
systemctl enable docker.service
如果啟動docker
失敗,可以先卸載再重裝
查看docker
的版本
docker version
修改鏡像網(wǎng)址
創(chuàng)建daemon
文件
vi /etc/docker/daemon.json
輸入一下內(nèi)容
{ "registry-mirrors":["https://registry.docker-cn.com"],
"live_restrore":true}
然后esc
鍵返回,并輸入:wq
保存退出文件
重啟docker
,并驗證鏡像是否安裝成功
systemctl restart docker
docker search redis
三、獲取docker鏡像
將image文件從倉庫下載到本地, pull獲取鏡像,library對應(yīng)的文件組
docker pull library/hello-world
獲取目標(biāo)image_name
鏡像
docker pull image_name
下載centos7鏡像,:7
指定了對應(yīng)的centos
版本:
docker pull centos:7
下載python3.9鏡像
docker pull python:3.9
查看已有鏡像,Docker鏡像保存在/var/lib/docker
目錄下
docker images
運行hello-world
鏡像
docker run hello-world
修改本地鏡像名字(小寫)
docker tag centos:7 mycentos:1
刪除倉庫為 docker.o/tomcat
, 標(biāo)簽為7.0.77-jre7
的鏡像
docker rmi docker.io/tomcat:7.0.77-jre7
刪除鏡像ID為b39c68b7af30的鏡像
docker rmi b39c68b7af30
本地鏡像的刪除
docker rmi centos:7
查看正在運行的容器
docker ps
查看所有容器,無論是否正在運行
docker ps -a
CONTAINER ID
:容器的唯一表示ID。IMAGE
:創(chuàng)建容器時使用的鏡像。COMMAND
:容器最后運行的命令。CREATED
:創(chuàng)建容器的時間。STATUS
:容器狀態(tài)。PORTS
:對外開放的端口。NAMES
:容器名。可以和容器ID一樣唯一標(biāo)識容器,同一臺宿主機(jī)上不允許有同名容器存在,否則會沖突。
根據(jù)已有的鏡像創(chuàng)建容器
docker run -it --name=c2 centos:7
啟動python3.9
docker run -it --name=python3.9 python:3.9
參數(shù)的解釋:-i
表示讓容器的標(biāo)準(zhǔn)輸入保持打開-t
表示為容器重新分配一個偽輸入終端--name
表示為創(chuàng)建出來的容器起一個名稱,名稱為c2centos
表示根據(jù)鏡像的名稱
注意:這種方式表示前臺運行容器,退出終端之后,容器會關(guān)閉,退出之前可以在xshell中打開另個一終端來查看目前正在運行的容器
退出終端之后,可以再次查看,看看容器是否關(guān)閉
如果需要在后臺啟動容器,可以加上參數(shù)-d
命令如下:
docker run -d --name=c3 centos:7
但是只加-d 不加-it會導(dǎo)致啟動成功之后,容器就直接關(guān)閉,所以后臺啟動的時候通常都是使用-itd的方式運行容器
docker run -itd --name=c3 centos:7
例子
docker run -p localhost:3307:3306 --name scrapersql --privileged=true \
-v /database/mysql:/var/lib/mysql \
-e "MYSQL_ALLOW_EMPTY_PASSWORD=true" \
-d mysql:5.7
說明localhost
的3307端口上創(chuàng)建一個MySQL服務(wù),并將其映射到主機(jī)的3306端口--name
設(shè)置鏡像名字-v
將主機(jī)上的 /database/mysql
目錄掛載到容器內(nèi)的 /var/lib/mysql
目錄
退出容器-e
:該選項用于設(shè)置環(huán)境變量。-e "MYSQL_ALLOW_EMPTY_PASSWORD=true"
表示在容器中設(shè)置一個環(huán)境變量MYSQL_ALLOW_EMPTY_PASSWORD
,并將其值設(shè)置為true
。這個環(huán)境變量的作用是允許空的MySQL密碼
exit
設(shè)置端口號
docker run -itd -p 8081:8080 tomcat
8081
指的是宿主機(jī)的端口8080
指的是容器里面tocmat的端口號-p
表示端口號參數(shù)
從客戶機(jī)上訪問容器,需要有端口映射,docker容器默認(rèn)采用橋接模式與宿主機(jī)通信,需要將宿主機(jī)的ip端口映射到容器的ip端口上;
橋接模式,也就是將虛擬機(jī)的虛擬網(wǎng)絡(luò)適配器與主機(jī)的物理網(wǎng)絡(luò)適配器進(jìn)行交接,虛擬機(jī)中的虛擬網(wǎng)絡(luò)適配器可通過主機(jī)中的物理網(wǎng)絡(luò)適配器直接訪問到外部網(wǎng)絡(luò)。簡而言之,這就好像在局域網(wǎng)中添加了一臺新的、獨立的計算機(jī)一樣。因此,虛擬機(jī)也會占用局域網(wǎng)中的一個 IP 地址,并且可以和其他終端進(jìn)行相互訪問。
查看容器的詳細(xì)信息
docker inspect container_id/container_name
查看容器的日志信息
docker logs container_id/container_name
如果提示FileNotFoundException 則有可能是 容器目錄下的conf文件夾沒有權(quán)限 可以使用 chmod -R遞歸設(shè)置權(quán)限
從宿主機(jī)復(fù)制到容器:docker cp 宿主機(jī)本地路徑 容器名字/ID:容器路徑
docker cp /root/123.txt mycentos:/home/
# 在/root目錄下創(chuàng)建mysql目錄用于存儲mysql數(shù)據(jù)信息
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3366:3306 \
--name=c_mysql \
-v /opt/mysql/conf:/etc/mysql/conf.d \
-v /opt/mysql/logs:/logs \
-v /opt/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:5.7
參數(shù)說明:
-p 3366:3306**:將容器的 3306 端口映射到宿主機(jī)的 3307 端口。
-v etc/conf:/etc/mysql/conf.d**:將主機(jī)當(dāng)前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。配置目錄
-v etc/logs:/logs**:將主機(jī)當(dāng)前目錄下的 logs 目錄掛載到容器的 /logs。日志目錄
-v etc/data:/var/lib/mysql** :將主機(jī)當(dāng)前目錄下的data目錄掛載到容器的 /var/lib/mysql 。數(shù)據(jù)目錄
-e MYSQL_ROOT_PASSWORD=root:**初始化 root 用戶的密碼。
啟動容器
docker start container_name/container_id
停止容器
docker stop container_name/container_id
重啟容器
docker restart container_name/container_id
啟動容器后,進(jìn)入到容器內(nèi)部
docker attach container_name/containere_id
刪除容器
docker rm container_name/container_id
查看當(dāng)前系統(tǒng)docker信息
docker info
獲取最新的centos
鏡像
docker pull centos:latest
查看鏡像信息
sudo docker images
查看docker信息
docker info
docker exec -it xxxxx bash
docker exec -it xxxxx bash
,這是用于在運行的 Docker 容器中打開一個交互式終端(bash shell)的命令。
-
docker exec
:這是 Docker 命令行工具中用于在運行的容器中執(zhí)行命令的命令。 -
-it
:這是兩個選項的結(jié)合,-i
代表 interactive(交互式),-t
代表 tty(終端)。這兩個選項一起使用,允許你在容器中運行一個交互式命令行會話。 -
xxxx
:這是你要在其內(nèi)部運行命令的 Docker 容器的 ID 或名稱。你需要用你實際的容器 ID 或名稱替換xxxx
。 -
bash
:這是你要在容器中運行的命令。在這個例子中,我們正在請求 Docker 在容器中啟動一個 bash shell。因此,整個命令的意思是:“在運行的容器 xxxx 中啟動一個交互式的 bash shell?!?/li>
mysql
create database `scraping` default character set utf8mb4;
create database `projectdb` default character set utf8mb4;
create database `taskdb` default character set utf8mb4;
create database `resultdb` default character set utf8mb4;
quit
通過上述命令進(jìn)入mysql
docker build -t scraper:latest . # 注意后面的點.
命令 docker build -t scraper:latest .
用于在Docker環(huán)境中構(gòu)建一個新的鏡像,并將其標(biāo)記為 scraper:latest
。如果你要運行的程序在Dockerfile中已經(jīng)定義好了,那么這條命令會從Dockerfile開始構(gòu)建,然后創(chuàng)建一個包含你程序的新鏡像。
如果在運行這個命令時遇到了問題,以下是一些可能的原因:
- Dockerfile不存在或者不在當(dāng)前目錄。你需要確保你在包含Dockerfile的目錄下運行這個命令,或者使用
-f
參數(shù)來指定Dockerfile的位置。 - Docker環(huán)境沒有正確安裝或者配置。你可以通過
docker --version
來檢查Docker是否正確安裝并運行。 - 網(wǎng)絡(luò)問題。在某些情況下,網(wǎng)絡(luò)問題可能會阻止Docker從Internet下載需要的文件。如果可能的話,嘗試更換網(wǎng)絡(luò)環(huán)境或者使用VPN。
- Dockerfile有錯誤或者不完整。你需要檢查你的Dockerfile以確保其正確性。
四、創(chuàng)建鏡像
使用命令行創(chuàng)建鏡像
docker commit
命令用于根據(jù) Docker容器 的更改創(chuàng)建一個新的 Dokcer鏡像。該命令后面的 CONTAINER
可以是容器Id,或者是容器名。
docker commit 容器id 鏡像名稱:版本號
docker save
用來將一個或多個image打包保存。如:將本地鏡像庫中的image1和image2打包到images.tar中
docker save -o 壓縮文件名稱 鏡像名稱:版本號
docker save -o images.tag image1:v1 image2:v1
docker load
用于將打包的tar中包含的鏡像load到本地鏡像庫,但不能重命名其中的鏡像名。
docker load –i 壓縮文件名稱
docker load -i images.tar
使用dockerfile創(chuàng)建鏡像
dockerfile
FROM centos:7 #定義父鏡像
MAINTAINER yjf #定義作者信息
RUN yum install -y vim # 執(zhí)行安裝vim命令
WORKDIR /opt # 定義默認(rèn)的工作目錄
CMD /bin/bash # 定義容器啟動執(zhí)行的命令
通過dockerfile構(gòu)建鏡像
docker build -f my_dockerfile -t xxx:7
五、docker報錯
ERROR
【docker】報錯:Got permission denied while trying to connect to the Docker daemon socket at unix:///var/
需要使用root
權(quán)限
ERROR
docker pull mysql 報missing signature key錯誤
如果安裝docker用的是yum install docker命令的話,下載下來的docker版本未舊版本,所有數(shù)字簽名有問題
https://blog.csdn.net/Single_for_life/article/details/133653113
su root
https://www.php.cn/faq/506200.html
https://www.modb.pro/db/586199
https://www.bilibili.com/read/cv22443043/文章來源:http://www.zghlxwxcb.cn/news/detail-832555.html
https://blog.csdn.net/m0_73409141/article/details/131425285
https://worktile.com/kb/ask/30572.html
https://blog.csdn.net/swadian2008/article/details/109518783
https://blog.csdn.net/qq_47614329/article/details/130387532
https://blog.csdn.net/weixin_41384860/article/details/128819642
https://blog.51cto.com/u_16099211/6314870文章來源地址http://www.zghlxwxcb.cn/news/detail-832555.html
到了這里,關(guān)于【Docker】有用的命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!