Docker打包及部署項(xiàng)目完整步驟
一、什么是Docker?
Docker 是一個(gè)開源的容器化平臺(tái),用于構(gòu)建、部署和運(yùn)行應(yīng)用程序。它使開發(fā)人員能夠?qū)④浖捌渌幸蕾図?xiàng)打包到一個(gè)稱為容器的標(biāo)準(zhǔn)單元中。這個(gè)容器可以在任何支持 Docker 的環(huán)境中運(yùn)行,無(wú)論是開發(fā)人員的個(gè)人計(jì)算機(jī)、測(cè)試環(huán)境還是生產(chǎn)服務(wù)器。通過(guò)使用 Docker,開發(fā)人員可以擺脫「在我的機(jī)器上可運(yùn)行」的問(wèn)題,因?yàn)槿萜魈峁┝艘环N標(biāo)準(zhǔn)化的方式來(lái)打包和分發(fā)應(yīng)用程序。開發(fā)人員可以創(chuàng)建一個(gè) Docker 鏡像,其中包含了應(yīng)用程序以及所有依賴項(xiàng)的配置,并將其部署到任何支持 Docker 的地方,而無(wú)需擔(dān)心環(huán)境差異和依賴項(xiàng)沖突。
二、Docker基本常識(shí)
2.1 Dockerfile
Dockerfile是一個(gè)文本文件,其中包含了構(gòu)建 Docker 鏡像所需的一系列步驟和指令。通過(guò)編寫 Dockerfile 文件,可以生成我們想要的鏡像
2.2 鏡像
Docker 鏡像是 Docker 容器的基礎(chǔ)構(gòu)建組件。它是一個(gè)只讀的模板,包含了運(yùn)行了我們打包的項(xiàng)目、環(huán)境變量、配置數(shù)據(jù)和依賴項(xiàng)。你可以將 Docker 鏡像視為一個(gè)快照,其中包含了構(gòu)建應(yīng)用程序的完整文件系統(tǒng)。
2.3 容器
Docker 容器是 Docker 平臺(tái)上運(yùn)行的一個(gè)實(shí)例化的軟件單元。容器是基于 Docker 鏡像創(chuàng)建的,它使用鏡像作為其文件系統(tǒng)和基礎(chǔ)環(huán)境,運(yùn)行應(yīng)用程序及其所有依賴項(xiàng),我們可以通過(guò)部署好的容器,在其他設(shè)備上訪問(wèn)我們打包的項(xiàng)目
三、項(xiàng)目打包
這里我們以php的web項(xiàng)目為例該項(xiàng)目目錄如下
1.Dockerfile文件編寫
文件參數(shù)詳解
FROM:指定基礎(chǔ)鏡像名稱和版本,將打包的項(xiàng)目在該基礎(chǔ)鏡像上運(yùn)行
LABEL:為鏡像添加元數(shù)據(jù),可以用于標(biāo)識(shí)鏡像的作者、版本、描述等信息(可忽略)
ENV:設(shè)置環(huán)境變量,可以在容器內(nèi)部使用
WORKDIR:設(shè)置工作目錄,用于指定容器內(nèi)部的工作目錄,后續(xù)的命令都將在該目錄下執(zhí)行
COPY:從本地復(fù)制文件至創(chuàng)建的鏡像文件
RUN: 對(duì)創(chuàng)建的鏡像使用的命令
CMD: 容器被創(chuàng)建啟動(dòng)時(shí)執(zhí)行的命令
文件內(nèi)容如下
FROM nickistre/ubuntu-lamp LABEL Elite RUN apt-get update -y COPY ./friend/* /var/www/html/ RUN service apache2 restart
這里我們拉取了一個(gè)帶有l(wèi)amp(Linux+Apache+Mysql+Php)環(huán)境的ubuntu鏡像作為web項(xiàng)目的基礎(chǔ)鏡像,然后將鏡像表示設(shè)為 Elite,然后使用了RUN對(duì)鏡像執(zhí)行了兩條命令(更新容器內(nèi)部的軟件包列表,以及開啟Apache服務(wù)),然后使用COPY命令,將本地 friend 目錄里的項(xiàng)目復(fù)制到了鏡像的/var/www/html/目錄里,這樣我們的Dockerfile文件就做好了
2.開始打包
在Dockerfile文件所在目錄,使用命令如下
docker build -t frid1:1.0 .
具體解釋如下:這條命令的作用是在當(dāng)前目錄下的 Dockerfile 中定義的構(gòu)建步驟中,根據(jù) Dockerfile 的指令和配置構(gòu)建一個(gè)新的鏡像,并為用-t將該鏡像命名為 frid1,標(biāo)簽為 1.0。
該命令語(yǔ)法如下:
docker build [OPTIONS] PATH OPTIONS 是一些可選參數(shù),而 PATH 則是指定包含 Dockerfile 的路徑
常用的一些參數(shù)包括:
-t 或 --tag:用于為構(gòu)建的鏡像指定名稱和標(biāo)簽。例如 -t myimage:1.0 表示將構(gòu)建的鏡像命名為 myimage,標(biāo)簽為 1.0。
-f 或 --file:用于指定替代的 Dockerfile 文件路徑。默認(rèn)情況下,docker build 命令會(huì)在 PATH 目錄中查找名為 Dockerfile 的文件,但你可以使用 -f 參數(shù)指定其他文件名。
--build-arg:用于傳遞構(gòu)建時(shí)的參數(shù)值給 Dockerfile 中的 ARG 指令。例如 --build-arg MY_VAR=value 表示將值 value 傳遞給 Dockerfile 中的變量 MY_VAR。
--no-cache:表示在構(gòu)建過(guò)程中不使用緩存的鏡像層。如果之前的構(gòu)建產(chǎn)生了緩存的鏡像層,這個(gè)參數(shù)可以忽略并重新執(zhí)行所有的指令
這樣我們的鏡像便制作成功
四、項(xiàng)目拉起
我們可以通過(guò)命令
docker images
來(lái)查看剛才制作的鏡像
然后通過(guò)命令
docker run -itd -p 666:80 frid1:1.0
解釋一下每個(gè)參數(shù)的含義:
-itd:-i 表示以交互模式運(yùn)行容器,-t 可以分配一個(gè)偽終端,-d 表示以“后臺(tái)模式”(detached mode)運(yùn)行容器。-p 666:80:將主機(jī)的 666 端口映射到容器的 80 端口。這樣,可以通過(guò)訪問(wèn)主機(jī)的 666 端口來(lái)訪問(wèn)容器內(nèi)運(yùn)行的應(yīng)用程序。frid1:1.0:指定要使用的鏡像名稱和標(biāo)簽。在這里,使用的鏡像名稱是 frid1,版本號(hào)是 1.0。
該命令語(yǔ)法如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS 是一些可選參數(shù),IMAGE 是指定要運(yùn)行的鏡像名稱或標(biāo)簽,COMMAND 是容器內(nèi)部要執(zhí)行命令,ARG... 是傳遞給容器命令的參數(shù)
常用的一些參數(shù)包括:
-d:表示以“后臺(tái)模式”(detached mode)運(yùn)行容器,在容器內(nèi)部執(zhí)行的命令會(huì)在后臺(tái)運(yùn)行。如果不使用該參數(shù),則容器會(huì)在前臺(tái)運(yùn)行,并將命令輸出打印到終端。
-p:用于設(shè)置主機(jī)和容器之間的端口映射。例如 -p 8080:80 表示將主機(jī)的 8080 端口映射到容器的 80 端口。
-v:用于設(shè)置主機(jī)和容器之間的目錄掛載。例如 -v /host/directory:/container/directory 表示將主機(jī)上的 /host/directory 目錄掛載到容器內(nèi)的 /container/directory 目錄。
--name:用于為容器指定一個(gè)名稱。如果不指定名稱,Docker 將自動(dòng)生成一個(gè)唯一的容器名稱。
--rm:表示在容器退出后自動(dòng)刪除容器。這在臨時(shí)運(yùn)行的容器上非常有用。
--network:用于指定容器連接的網(wǎng)絡(luò)??梢允褂媚J(rèn)的 bridge 網(wǎng)絡(luò)或自定義網(wǎng)絡(luò)。
項(xiàng)目成功拉起
總結(jié)
到此這篇關(guān)于Docker打包及部署項(xiàng)目的文章就介紹到這了,更多相關(guān)Docker打包部署項(xiàng)目?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker刪除某個(gè)鏡像的實(shí)現(xiàn)方法
在使用 Docker 時(shí),經(jīng)常需要?jiǎng)h除不再需要的鏡像、容器和卷,以釋放存儲(chǔ)空間,本文主要介紹了Docker刪除某個(gè)鏡像的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02docker-compose中啟動(dòng)鏡像失敗的幾種解決方法
本文主要介紹了docker-compose中啟動(dòng)鏡像失敗的幾種解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07解決使用Docker Compose管理容器的問(wèn)題
在Docker Compose中,根據(jù)一個(gè)配置文件,將所有與應(yīng)用系統(tǒng)相關(guān)的應(yīng)用和對(duì)應(yīng)的容器進(jìn)行配置,再根據(jù)Docker Compose提供的命令進(jìn)行啟動(dòng),就可以解決上面說(shuō)的多容器之間的復(fù)雜問(wèn)題,感興趣的朋友跟隨小編一起看看吧2021-09-09Docker出現(xiàn)tag顯示none鏡像的處理方案
本文介紹了Docker中出現(xiàn)REPOSITORY和TAG都顯示為<none>的鏡像,即懸掛鏡像的原因,并提供了解決方法,包括查找和刪除懸掛鏡像,以及為它們指定新的標(biāo)簽2025-02-02Mac系統(tǒng)上用Docker搭建lamp環(huán)境
這篇文章主要給大家介紹了Mac系統(tǒng)上用Docker如何搭建lamp環(huán)境,文章給大家介紹的很詳細(xì),有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-12-12Docker容器自啟動(dòng)的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker容器自啟動(dòng)的實(shí)現(xiàn)方法,詳細(xì)的介紹了Docker的 Restart policy命令,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2018-09-09宿主機(jī)無(wú)法訪問(wèn)docker容器中nginx服務(wù)的問(wèn)題解決
在虛擬機(jī)中部署Docker并安裝Nginx后,宿主機(jī)無(wú)法訪問(wèn)容器內(nèi)的Nginx服務(wù),通過(guò)檢查端口映射、防火墻狀態(tài)、進(jìn)入容器內(nèi)部啟動(dòng)Nginx以及檢查/修改內(nèi)核的IP轉(zhuǎn)發(fā)設(shè)置,解決了該問(wèn)題,感興趣的可以了解一下2024-11-11