docker制作鏡像的兩種方式保姆級(jí)教程
現(xiàn)在的docker使用因?yàn)楦咝Х奖悖疽呀?jīng)普遍通用,為了幫助一些小白更好上手掌握制作鏡像,作者寫了這篇文章,以期能夠更好的幫助你快捷使用docker
docker的簡介
Docker 是一個(gè)開源的容器化平臺(tái),它允許開發(fā)者將應(yīng)用程序及其依賴(如代碼、運(yùn)行時(shí)、系統(tǒng)工具、庫、配置文件等)打包到一個(gè)輕量級(jí)、可移植的容器中,并在任何支持 Docker 的環(huán)境中一致地運(yùn)行。
?? 核心思想:“一次構(gòu)建,到處運(yùn)行”(Build Once, Run Anywhere)
虛擬機(jī)(VM)vs 容器
| 特性 | 容器 | 虛擬機(jī) |
|---|---|---|
| 隔離級(jí)別 | 進(jìn)程級(jí)隔離 | 硬件級(jí)隔離(Hypervisor) |
| 啟動(dòng)速度 | 毫秒級(jí)(快) | 秒級(jí)~分鐘級(jí)(慢) |
| 資源占用 | 低(共享宿主機(jī)內(nèi)核) | 高(每個(gè) VM 有完整 OS) |
| 鏡像大小 | 幾十 MB ~ 幾百 MB | 幾 GB 起 |
| 可移植性 | 極高 | 較低 |
| 典型代表 | Docker, containerd | VMware, VirtualBox, Hyper-V |
? 簡單說:容器 = 輕量級(jí)、秒啟、高效的應(yīng)用沙箱
鏡像制作的兩種方式
1.使用 docker commit 命令基于容器創(chuàng)建鏡像(適合快速測(cè)試,不推薦用于生產(chǎn))
2.使用 Dockerfile 編寫構(gòu)建指令,通過 docker build 創(chuàng)建鏡像(推薦方式,可復(fù)用、可版本控制)
方式一:使用 docker commit(從運(yùn)行中的容器創(chuàng)建鏡像)
?? 注意:這種方式適合臨時(shí)調(diào)試,但不符合“基礎(chǔ)設(shè)施即代碼”原則,不建議用于正式項(xiàng)目。說粗俗點(diǎn)就是救救火可以,但是正規(guī)開發(fā)不建議,而且有諸多限制且聽我細(xì)細(xì)分解。
步驟 1:拉取基礎(chǔ)鏡像并啟動(dòng)容器
拉取一個(gè) Ubuntu 鏡像
docker pull ubuntu:22.04
這里拉的是基礎(chǔ)鏡像,就是一個(gè)能跑ubuntu的極簡環(huán)境,也是因?yàn)闃O簡環(huán)境所以有些驅(qū)動(dòng)沒有跑一些復(fù)雜的軟件可能會(huì)出現(xiàn)驅(qū)動(dòng)丟失等錯(cuò)誤。
啟動(dòng)一個(gè)交互式容器(-it 表示交互終端)
docker run -it --name my_container ubuntu:22.04 /bin/bash
目的:配置模型運(yùn)行環(huán)境
步驟 2:在容器內(nèi)做修改(比如安裝軟件)
在容器內(nèi)安裝模型運(yùn)行所需各種庫
我拿nginx舉例
更新包列表
apt update
安裝 nginx(舉例)
apt install -y nginx
驗(yàn)證是否安裝成功
nginx -v
如果是模型等原理是相同的,但是你需要做的是下載各種依賴庫,然后通過docker cp的指令把需要的模型復(fù)制過去。然后使用指令讓模型跑起來,并能看到自己想要的結(jié)果即可。
步驟3:在主機(jī)上封裝整個(gè)容器為新鏡像
退出容器,退出容器指令exit
查看已停止的容器
docker ps -a
將容器提交為新鏡像
docker commit my_container my_nginx_image:v1
my_container是容器名 my_nginx_image:v1是鏡像名加版本號(hào)。
步驟 4:驗(yàn)證新鏡像
以nginx的鏡像舉例
查看本地鏡像
docker images
啟動(dòng)新鏡像測(cè)試
docker run -it my_nginx_image:v1 /bin/bash
進(jìn)入后可執(zhí)行 nginx -v 驗(yàn)證是否保留了安裝
如果是模型或其他
docker run -it --rm my_nginx_image:v1 /bin/bash
可以是這個(gè)指令用完就停止容器
從上面可見這種方式無法追溯變更過程,也不便于團(tuán)隊(duì)協(xié)作。
方式二:使用 Dockerfile(推薦方式強(qiáng)烈安利?。。。?/h2>
你選取一臺(tái)與上線環(huán)境架構(gòu)相同的線下機(jī)子,最好還能通網(wǎng)(方便下載各種需要的環(huán)境)
步驟1:下載需要的各種依賴
如果是通網(wǎng)的,直接用包管理器下就好了,apt install或yum install有啥用啥,能下好就好,自己大多數(shù)情況下不用改全局了,都幫你自動(dòng)配置
步驟2:跑起你需要跑的
確保該環(huán)境下你的東西能跑起來,拿我用包管理器下載的nginx舉例就是
nginx start
只要能跑起來并能查到他的線程,你就事半功倍了。
步驟3:寫填寫Dockerfile
創(chuàng)建個(gè)文件夾在文件夾下
nano Dockerfile
以包管理器的nginx舉例,它的Dockerfile如下
# 使用官方 Ubuntu 22.04 作為基礎(chǔ)鏡像
FROM ubuntu:22.04
# 設(shè)置環(huán)境變量,避免 apt 彈出交互提示
ENV DEBIAN_FRONTEND=noninteractive
# 更新系統(tǒng)并安裝 nginx
RUN apt update && \
apt install -y nginx && \
rm -rf /var/lib/apt/lists/*
# 暴露 80 端口(文檔說明用途,實(shí)際運(yùn)行需配合 -p)
EXPOSE 80
# 啟動(dòng) nginx(前臺(tái)運(yùn)行,否則容器會(huì)退出)
CMD ["nginx", "-g", "daemon off;"]
步驟4:構(gòu)建鏡像
在 Dockerfile 所在目錄執(zhí)行:
docker build -t my_nginx_image_from_dockerfile:v1 .
該指定為打包鏡像my_nginx_image_from_dockerfile:v1這個(gè)為鏡像名稱加版本號(hào)。注意后面還有一點(diǎn)哦別漏下,
-t:指定鏡像名和標(biāo)簽
.:表示當(dāng)前目錄為構(gòu)建上下文(context)
步驟 5:運(yùn)行鏡像
以nginx舉例哦
# 后臺(tái)運(yùn)行,并映射 8080 主機(jī)端口到容器 80 端口 docker run -d -p 8080:80 --name my_web my_nginx_image_from_dockerfile:v1
然后在宿主機(jī)瀏覽器訪問:http://localhost:8080,應(yīng)該能看到 Welcome to nginx! 頁面。
到此dockerfile優(yōu)勢(shì)一目了然,可版本控制、可重復(fù)構(gòu)建、清晰透明、適合 CI/CD。
步驟 6:內(nèi)卷?。。?/h3>
優(yōu)化 Dockerfile(多階段構(gòu)建、減小體積等)
使用 .dockerignore 忽略無關(guān)文件
合并 RUN 命令減少層數(shù)
使用更小的基礎(chǔ)鏡像(如 alpine)
多階段構(gòu)建(適用于編譯型語言如 Go、Java)
作者懶得碼字了,有興趣留言,作者看到了就繼續(xù)寫了。
總結(jié)
到此這篇關(guān)于docker制作鏡像的兩種方式保姆級(jí)教程的文章就介紹到這了,更多相關(guān)docker如何制作鏡像內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Ubuntu上使用Docker部署DeepSeek的詳細(xì)步驟
docker是容器化技術(shù)的代表,它能夠?qū)?yīng)用程序及其依賴項(xiàng)打包成一個(gè)獨(dú)立的容器,在 DeepSeek 部署中,使用 docker 可以確保 deepseek - r1 在不同環(huán)境中具有一致的運(yùn)行狀態(tài),本文給大家介紹了在Ubuntu上使用Docker部署DeepSeek的詳細(xì)步驟,需要的朋友可以參考下2025-02-02
docker可視化管理工具portainer忘記密碼重置教程的實(shí)現(xiàn)
本文主要介紹了docker可視化管理工具portainer忘記密碼重置教程的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08
dockerfile發(fā)布springboot項(xiàng)目實(shí)踐
使用Docker的其中一個(gè)目的,是為了更加簡單,方便的部署我們編寫的服務(wù),本文主要介紹了dockerfile發(fā)布springboot項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2023-08-08
Docker 搭建集群MongoDB的實(shí)現(xiàn)步驟
這篇文章主要介紹了Docker 搭建集群MongoDB的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Docker Registry倉庫加密傳輸與登錄認(rèn)證方式
本文詳細(xì)介紹了如何為Docker私有倉庫配置加密傳輸(TLS)和認(rèn)證功能,包括生成自簽名證書、配置客戶端證書、添加認(rèn)證文件和測(cè)試倉庫功能2025-12-12
啟動(dòng)docker錯(cuò)誤systemctl status docker.service問題及解決
文章討論了啟動(dòng)Docker和執(zhí)行docker ps命令失敗的問題,但docker -v顯示成功,解決辦法包括在阿里云容器鏡像中找到鏡像加速器或使用公共鏡像地址,默認(rèn)情況下,Docker使用官方地址2025-01-01
Docker安裝RabbitMQ AMQP協(xié)議及重要角色
這篇文章主要為大家介紹了Docker安裝RabbitMQ AMQP協(xié)議和主要角色詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05

