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

