Docker打包及部署項目完整步驟
一、什么是Docker?
Docker 是一個開源的容器化平臺,用于構(gòu)建、部署和運行應(yīng)用程序。它使開發(fā)人員能夠?qū)④浖捌渌幸蕾図棿虬揭粋€稱為容器的標準單元中。這個容器可以在任何支持 Docker 的環(huán)境中運行,無論是開發(fā)人員的個人計算機、測試環(huán)境還是生產(chǎn)服務(wù)器。通過使用 Docker,開發(fā)人員可以擺脫「在我的機器上可運行」的問題,因為容器提供了一種標準化的方式來打包和分發(fā)應(yīng)用程序。開發(fā)人員可以創(chuàng)建一個 Docker 鏡像,其中包含了應(yīng)用程序以及所有依賴項的配置,并將其部署到任何支持 Docker 的地方,而無需擔心環(huán)境差異和依賴項沖突。
二、Docker基本常識
2.1 Dockerfile
Dockerfile是一個文本文件,其中包含了構(gòu)建 Docker 鏡像所需的一系列步驟和指令。通過編寫 Dockerfile 文件,可以生成我們想要的鏡像
2.2 鏡像
Docker 鏡像是 Docker 容器的基礎(chǔ)構(gòu)建組件。它是一個只讀的模板,包含了運行了我們打包的項目、環(huán)境變量、配置數(shù)據(jù)和依賴項。你可以將 Docker 鏡像視為一個快照,其中包含了構(gòu)建應(yīng)用程序的完整文件系統(tǒng)。
2.3 容器
Docker 容器是 Docker 平臺上運行的一個實例化的軟件單元。容器是基于 Docker 鏡像創(chuàng)建的,它使用鏡像作為其文件系統(tǒng)和基礎(chǔ)環(huán)境,運行應(yīng)用程序及其所有依賴項,我們可以通過部署好的容器,在其他設(shè)備上訪問我們打包的項目
三、項目打包
這里我們以php的web項目為例該項目目錄如下

1.Dockerfile文件編寫
文件參數(shù)詳解
FROM:指定基礎(chǔ)鏡像名稱和版本,將打包的項目在該基礎(chǔ)鏡像上運行
LABEL:為鏡像添加元數(shù)據(jù),可以用于標識鏡像的作者、版本、描述等信息(可忽略)
ENV:設(shè)置環(huán)境變量,可以在容器內(nèi)部使用
WORKDIR:設(shè)置工作目錄,用于指定容器內(nèi)部的工作目錄,后續(xù)的命令都將在該目錄下執(zhí)行
COPY:從本地復制文件至創(chuàng)建的鏡像文件
RUN: 對創(chuàng)建的鏡像使用的命令
CMD: 容器被創(chuàng)建啟動時執(zhí)行的命令
文件內(nèi)容如下
FROM nickistre/ubuntu-lamp LABEL Elite RUN apt-get update -y COPY ./friend/* /var/www/html/ RUN service apache2 restart
這里我們拉取了一個帶有l(wèi)amp(Linux+Apache+Mysql+Php)環(huán)境的ubuntu鏡像作為web項目的基礎(chǔ)鏡像,然后將鏡像表示設(shè)為 Elite,然后使用了RUN對鏡像執(zhí)行了兩條命令(更新容器內(nèi)部的軟件包列表,以及開啟Apache服務(wù)),然后使用COPY命令,將本地 friend 目錄里的項目復制到了鏡像的/var/www/html/目錄里,這樣我們的Dockerfile文件就做好了
2.開始打包
在Dockerfile文件所在目錄,使用命令如下
docker build -t frid1:1.0 .
具體解釋如下:這條命令的作用是在當前目錄下的 Dockerfile 中定義的構(gòu)建步驟中,根據(jù) Dockerfile 的指令和配置構(gòu)建一個新的鏡像,并為用-t將該鏡像命名為 frid1,標簽為 1.0。
該命令語法如下:
docker build [OPTIONS] PATH OPTIONS 是一些可選參數(shù),而 PATH 則是指定包含 Dockerfile 的路徑
常用的一些參數(shù)包括:
-t 或 --tag:用于為構(gòu)建的鏡像指定名稱和標簽。例如 -t myimage:1.0 表示將構(gòu)建的鏡像命名為 myimage,標簽為 1.0。
-f 或 --file:用于指定替代的 Dockerfile 文件路徑。默認情況下,docker build 命令會在 PATH 目錄中查找名為 Dockerfile 的文件,但你可以使用 -f 參數(shù)指定其他文件名。
--build-arg:用于傳遞構(gòu)建時的參數(shù)值給 Dockerfile 中的 ARG 指令。例如 --build-arg MY_VAR=value 表示將值 value 傳遞給 Dockerfile 中的變量 MY_VAR。
--no-cache:表示在構(gòu)建過程中不使用緩存的鏡像層。如果之前的構(gòu)建產(chǎn)生了緩存的鏡像層,這個參數(shù)可以忽略并重新執(zhí)行所有的指令
這樣我們的鏡像便制作成功

四、項目拉起
我們可以通過命令
docker images
來查看剛才制作的鏡像

然后通過命令
docker run -itd -p 666:80 frid1:1.0
解釋一下每個參數(shù)的含義:
-itd:-i 表示以交互模式運行容器,-t 可以分配一個偽終端,-d 表示以“后臺模式”(detached mode)運行容器。-p 666:80:將主機的 666 端口映射到容器的 80 端口。這樣,可以通過訪問主機的 666 端口來訪問容器內(nèi)運行的應(yīng)用程序。frid1:1.0:指定要使用的鏡像名稱和標簽。在這里,使用的鏡像名稱是 frid1,版本號是 1.0。
該命令語法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS 是一些可選參數(shù),IMAGE 是指定要運行的鏡像名稱或標簽,COMMAND 是容器內(nèi)部要執(zhí)行命令,ARG... 是傳遞給容器命令的參數(shù)
常用的一些參數(shù)包括:
-d:表示以“后臺模式”(detached mode)運行容器,在容器內(nèi)部執(zhí)行的命令會在后臺運行。如果不使用該參數(shù),則容器會在前臺運行,并將命令輸出打印到終端。
-p:用于設(shè)置主機和容器之間的端口映射。例如 -p 8080:80 表示將主機的 8080 端口映射到容器的 80 端口。
-v:用于設(shè)置主機和容器之間的目錄掛載。例如 -v /host/directory:/container/directory 表示將主機上的 /host/directory 目錄掛載到容器內(nèi)的 /container/directory 目錄。
--name:用于為容器指定一個名稱。如果不指定名稱,Docker 將自動生成一個唯一的容器名稱。
--rm:表示在容器退出后自動刪除容器。這在臨時運行的容器上非常有用。
--network:用于指定容器連接的網(wǎng)絡(luò)??梢允褂媚J的 bridge 網(wǎng)絡(luò)或自定義網(wǎng)絡(luò)。
項目成功拉起

總結(jié)
到此這篇關(guān)于Docker打包及部署項目的文章就介紹到這了,更多相關(guān)Docker打包部署項目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker出現(xiàn)tag顯示none鏡像的處理方案
本文介紹了Docker中出現(xiàn)REPOSITORY和TAG都顯示為<none>的鏡像,即懸掛鏡像的原因,并提供了解決方法,包括查找和刪除懸掛鏡像,以及為它們指定新的標簽2025-02-02
Mac系統(tǒng)上用Docker搭建lamp環(huán)境
這篇文章主要給大家介紹了Mac系統(tǒng)上用Docker如何搭建lamp環(huán)境,文章給大家介紹的很詳細,有需要的朋友們可以參考借鑒,下面來一起看看吧。2016-12-12
宿主機無法訪問docker容器中nginx服務(wù)的問題解決
在虛擬機中部署Docker并安裝Nginx后,宿主機無法訪問容器內(nèi)的Nginx服務(wù),通過檢查端口映射、防火墻狀態(tài)、進入容器內(nèi)部啟動Nginx以及檢查/修改內(nèi)核的IP轉(zhuǎn)發(fā)設(shè)置,解決了該問題,感興趣的可以了解一下2024-11-11

