文章目錄
- 一、名詞概念
- Docker鏡像
- Docker鏡像倉庫
- 二、Docker鏡像倉庫常用命令
- 三、容器啟動相關指令
- Nginx
- docker run
- docker ps
- 四、綜合實例
- 1.搭建Nginx服務
- 2.Docker hub上創建私有倉庫
一、名詞概念
Docker鏡像
Docker 鏡像:是一個只讀的模板,它包含了創建并運行一個 Docker 容器所需的所有指令、文件系統和參數。
??可以把它想象成一個軟件的安裝包或模具。這個安裝包不僅包含了程序本身,還包含了它運行所需的所有依賴項(如庫、環境變量、配置文件等)。
一個生動的比喻:做蛋糕
- Dockerfile(食譜):這是一個文本文件,里面寫滿了做蛋糕的指令,比如“準備面粉”、“加入雞蛋”、“在 180°C 下烘烤 30 分鐘”。
- Docker 鏡像(蛋糕模具):你根據“食譜”(Dockerfile)的指令,準備好所有原材料(代碼、依賴庫),并烤好了一個完整的、但還沒切的蛋糕。這個蛋糕被做成了一個標準的“模具”(鏡像)。這個模具是只讀的,保證了每次用它做出來的蛋糕都是一模一樣的。
- Docker 容器(切下來的蛋糕):當你從“模具”(鏡像)里切下一塊蛋糕來吃時,這塊蛋糕就是一個容器。它是鏡像的一個運行實例,是可讀可寫的。你可以在這塊蛋糕上加上草莓(對容器進行修改),但這不會影響原來的模具(鏡像)。
Docker鏡像倉庫
Docker 鏡像倉庫:是一個集中存儲和分發 Docker 鏡像的服務,就像一個專門的應用商店(如 iOS 的 App Store)或代碼倉庫(如 GitHub),但它只管理 Docker 鏡像。
你可以把它想象成一個圖書館:
-
書 = Docker 鏡像
-
圖書館 = Docker 鏡像倉庫
-
借書/還書 = 拉取鏡像/推送鏡像
docker官方架構圖:
docker鏡像倉庫架構圖:
docker官網:https://www.docker.com/
實際工作鏡像倉庫的使用
- 開發環境:開發人員使用的一套環境
- 測試環境:需求開發完成后,發布到供測試人員進行測試的環境
- 預發布環境:版本測試完成后,發布到和生產類似的環境,提前模擬生產發布
- 生產環境:真正面向客戶的環境
二、Docker鏡像倉庫常用命令
docker命令學習
命令行:docker --help
官網學習:www.docker.com -> Developers -> Documentation -> Reference ->Docker CLI
docker login
功能:登陸到一個 Docker 鏡像倉庫,如果未指定鏡像倉庫地址,默認為官方倉庫 Docker Hub
語法:
docker login [OPTIONS] [SERVER]
關鍵參數
-u
: 登陸的用戶名-p
: 登陸的密碼
示例:
docker login
docker login https://index.docker.io/vi/
docker login -u zhangsan
docker pull
功能:從鏡像倉庫中拉取或者更新指定鏡像到本地
語法:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
關鍵參數:
-a
:拉取所有 tagged 鏡像--disable-content-trust
:忽略鏡像的校驗,默認開啟
示例:
docker pull nginx:1.23.3
docker push
功能:將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫
語法:
docker push [OPTIONS] NAME[:TAG]
別名:docker image push
關鍵參數:
-a
:推送所有 tagged 鏡像--disable-content-trust
:忽略鏡像的校驗,默認開啟
在推送push前需要在官網創建自己的倉庫。push推送時需要用這個格式的標簽名:用戶名/倉庫名:標簽
使用tag命令將要推送的鏡像起一個標簽名:
比如:docker tag nginx:1.23.4 zhangsan/mybitnginx:v1.23.4
推送:
docker push zhangsan/mybitnginx:v1.23.4
docker search
功能:從 Docker Hub 查找鏡像
語法:
docker search [OPTIONS] TERM
關鍵參數:
--no-trunc
:顯示完整的鏡像描述-f <過濾條件>
:列出收藏數不小于指定值的鏡像
示例:
docker search -f stars=10 nginx
docker logout
功能:登出一個 Docker 鏡像倉庫,如果未指定鏡像倉庫地址,默認為官方倉庫 Docker Hub
語法:
docker logout [SERVER]
docker images
功能:列出本地鏡像
語法:
docker images [OPTIONS] [REPOSITORY[:TAG]]
別名:docker image ls
, docker image list
關鍵參數:
-a
:列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層);--digests
:顯示鏡像的摘要信息;-f
:顯示滿足條件的鏡像;--format
:指定返回值的模板文件;--no-trunc
:顯示完整的鏡像信息;-q
:只顯示鏡像 ID。
docker image
功能:查看鏡像詳細信息
語法:
docker image inspect [OPTIONS] IMAGE [IMAGE...]
示例:
docker image list
docker image inspect 0f8498f13f3a
docker image inspect nginx:1.22.1
docker tag
功能:標記本地鏡像,將其歸入某一倉庫
語法:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
別名:docker image tag
示例:
docker tag ubuntu:22.04 zhangsan/myubuntu:v1.22.1
三、容器啟動相關指令
Nginx
??Nginx是一款高性能的開源軟件,最初被設計為“網頁服務器”,但現在更廣泛地被用作“反向代理”、“負載均衡器”和“HTTP 緩存”。
??可以把它想象成一個高效的“交通樞紐”或“萬能前臺”,它負責接收所有進入網站的流量(請求),然后智能地將這些流量引導到正確的服務器(或服務)上,同時還能處理安全、加速等多項任務。
- 正向代理:代理客戶端(如 VPN),替客戶端去訪問網站,隱藏客戶的身份。
- 反向代理:代理服務器端,替服務器接收客戶端的請求。客戶端并不知道真正處理它請求的是后端的哪臺服務器。
反向代理:
- 隱藏后端架構:保護內部服務器(如 Node.js, Java, Python 應用服務器)的安全,不直接暴露在公網上。
- 負載均衡:當你的網站訪問量很大時,一臺服務器會扛不住。你會擁有多臺完全一樣的服務器(形成一個服務器集群)。Nginx 作為反向代理,可以像一個大管家一樣,把收到的用戶請求“均勻地”分發給后端的多臺服務器。
- 擴展性:通過添加更多服務器來輕松應對高流量。
- 高可用性:如果其中一臺服務器宕機了,Nginx會自動停止將請求發往那臺壞掉的機器,保證服務不中斷。
- 減輕單臺服務器壓力:每臺服務器都不會過載。
HTTP 緩存
Nginx 可以把后端服務器的響應(如網頁、圖片)臨時存儲(緩存)在自己這里。
??工作流程:當第一個用戶請求某個頁面時,Nginx 會去后端服務器獲取數據,然后返回給用戶,同時自己保存一份。當第二個用戶請求同一個頁面時,Nginx直接把自己緩存的內容返回給用戶,而不用再去麻煩后端服務器。
好處:
- 極大加快響應速度:用戶感覺網站變得飛快。
- 極大減輕后端服務器壓力:后端服務器只需要處理動態請求,靜態內容由 Nginx 緩存提供。
Nginx安裝
檢查是否已經安裝:ps -ef | grep nginx
,如果有了就不用裝
下載安裝:
- Ubuntu:
sudo apt install nginx -y
- CentOS:
sudo yum install nginx -y
- 啟動:
systemctl restart nginx
查看效果:
打開瀏覽器輸入云服務器公網ip,會出現這樣的網頁:
docker run
功能: 創建一個新的容器并運行一個命令
語法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
別名:docker container run
關鍵參數:
-d
:后臺運行容器,并返回容器 ID-i
:以交互模式運行容器,通常與 -t 同時使用-t
:為容器重新分配一個偽輸入終端,通常與 -i 同時使用-P
:隨機端口映射,容器內部端口隨機映射到主機的端口-p
:指定端口映射,格式為:主機(宿主)端口:容器端口--name="nginx-lb"
:為容器指定一個名稱-h "mars"
:指定容器的 hostname-e username="ritchie"
:設置環境變量--cpuset-cpus="0-2" or --cpuset-cpus="0,1,2"
:綁定容器到指定 CPU 運行-m
:設置容器使用內存最大值--network="bridge"
:指定容器的網絡連接類型--link=[]
:添加鏈接到另一個容器--volume, -v
:綁定一個卷-rm
:shell 退出的時候自動刪除容器
示例:
到官網找到centos7
查看宿主機版本:cat /etc/*release*
將centos:7拉取到本地:docker pull centos:7
運行centos:7:docker run centos:7
這里執行docker run 不帶任何選項看上去沒有任何效果,其實這個容器已經被打開了但因為沒交互所以退出了。
使用docker ps -a
可以看到歷史執行過的容器
添加-it選項以交互形式運行容器,如下:
注意:通常不會單獨使用-i或-t選項,需要兩個一起使用,即-it(常用于交互式容器)
接下來我們運行一個nginx:1.24.0
容器,如果本地沒有會自動從服務器拉取。
使用docker ps
查看運行狀態
??當我們在瀏覽器中直接訪問服務器(宿主機)時,訪問的是宿主機本身的服務(如果有的話)。Docker容器擁有獨立的網絡命名空間,外網無法直接訪問容器內的Nginx服務。需要通過端口映射將宿主機的端口與容器的端口進行綁定。例如,將宿主機的7070端口映射到容器Nginx的80端口后,當訪問宿主機IP的7070端口時,流量會被自動轉發到容器內部的80端口,從而訪問到容器中的Nginx服務。
如下-p選項的使用:
-P是綁定隨機端口,后面不用帶任何信息,該選項很少使用,如:docker run -P -d nginx:1.24.0
--name
選項改變容器名字,使用新起的容器名與其交互會變得很方便。
-h
:改變容器主機名
-e
:添加容器的環境變量
-m
:設置容器使用內存最大值,如下給限定容器內存使用500MB
docker run -d -m 500m --name mynginx3 nginx:1.24.0
docker stats mynginx3
-rm
選項:shell 退出的時候自動刪除容器,使用docker ps -a是查不到的。
如:docker run -it --name=mycentos4 -rm centos:7
docker ps
功能: 列出容器信息
語法:
docker ps [OPTIONS]
別名:docker container ls
, docker container list
, docker container ps
關鍵參數:
-a
:顯示所有的容器,包括未運行的。-f
:根據條件過濾顯示的內容。--format
:指定返回值的模板文件。如 json 或者 table-l
:顯示 latest 的容器。-n
:列出最近創建的 n 個容器。--no-trunc
:不截斷輸出。-q
:靜默模式,只顯示容器編號。-s
:顯示總的文件大小。
四、綜合實例
1.搭建Nginx服務
查找nginx鏡像版本:
方法一:shell中執行docker search nginx
如下:(不推薦)
方法二:登陸官網查找:
- 拉取鏡像:
docker pull nginx:1.24.0
- 查看有沒有到本地:
docker images nginx
- 看詳細信息:
docker image inspect nginx:1.24.0
- 啟動Nginx容器:
- 綁定宿主機7077端口
- 將容器重命名為myweb
- 將主機名命名為myweb.com
- 添加環境變量myenv=test
- 后端運行
即:
docker run -p 7077:80 --name=myweb -h myweb.com -e myenv=test -d nginx:1.24.0
假設我們要調整首頁:
添加選項-it,以前臺交互的形式啟動
docker run -p 7078:80 --name=myweb -h myweb.com -e myenv=test -it nginx:1.24.0 bash
此時nginx并沒有啟動,需要再命令行輸入nginx
啟動nginx。
修改首頁:
- 進入目錄:
cd /usr/share/nginx/html/
- 修改index.html中的內容如:
效果如下:
2.Docker hub上創建私有倉庫
BusyBox介紹
??BusyBox 是一個集成了三百多個最常用 Linux 命令和工具的軟件。例如 ls、cat 和 echo 、grep、find、mount 以及 telnet等。有些人將 BusyBox 稱為 Linux 工具里的瑞士軍刀。而所有這一切功能卻只有區區 1M 左右的大小。因海外帶寬較小,我們拉取該鏡像推送到自己的倉庫。
CentOS安裝:
- 創建一個目錄:
mkdir -p /data/myhou
- 進入目錄:
cd /data/myhou
- 下載在該目錄下:
wget https://busybox.net/downloads/binaries/1.28.1-defconfig-multiarch/busybox-x86_64 --no-check-certificate
- 重命名:
mv busybox-x86_64 busybox
(可不做) - 授權:
chmod +x busybox
- 測試:
./busybox ls
Ubuntu安裝:
apt install busybox -y
到Docker官網創建倉庫:
- 拉取一個busybox:
docker pull busybox:1.35.0
- 根據推送規則給busybox設置標簽:
docker tag busybox:1.35.0 saal0/qsy_box:v1.0
- 登陸docker(如果沒有登陸):
docker login
- 推送到倉庫:
docker push saal0/qsy_box:v1.0
除此之外還可以推送到騰訊云,阿里云等。登陸騰訊云/阿里云官網,搜索容器鏡像服務,就可以搭建自己的倉庫,注意推送和拉取規則。這里就不演示。