dockerfile---創建鏡像

dockerfile創建鏡像:創建自定義鏡像。
包擴配置文件的創建,掛載點,對外暴露的端口。設置環境變量。

docker鏡像的方式:

1、基于官方源進行創建

根據官方提供的鏡像源,創建鏡像,然后拉起容器。是一個白板,只能提供基礎的功能,擴展性的功能還是需要自定義(進入容器進行操)


2、基于模板進行創建

3、dockerfile

聯合文件系統(UnionFS),docker的基礎。鏡像通過分成來進行集成,特性:一次同時加載多個文件系統,但是從外面來看,就是一個文件系統。
docker鏡像實際上由一層一層的文件系統組成,這種層級的文件系統就是UnionFS。
每一層都是layers,每一層都包含文件系統的一部分,這些層次疊加在一起,最終形成的就是rootfs。

docker原理

bootfs:宿主機提供的內核和引導程序
roosfs:就是容器的操作系統,在dockerfile中,我們可以自己指定。
rootfs是多個基礎鏡像和應用鏡像結合起來的只讀層。鏡像實際上就是一個只讀文件
容器基于鏡像實力,運行起來后容器可變成可讀可寫層。

docker報錯

在dockerfile當中每創建一個指定都是一格鏡像,鏡像層被緩存和復用
1-6層
1-4 4失敗
再次執行1-4直接完成,繼續運行5-6

一旦有一層鏡像失敗,那么所有的鏡像層都會失敗。鏡像也不會創建
鏡像層是不可變的,在某一次添加一個新的命令,在下一次刪除指令,鏡像中基于這個命令創建的文件依然存在,但在容器中不可見。

總結以上描述核心:用戶個性化定制docker的鏡像

dockerfile的結構:

1、基礎鏡像信息
2、維護者信息
3、鏡像的操作指令
4、容器啟動時,執行的命令。

docker logs 沒日志原因?????????

nginx:定義好了容器執行的命令 /bin/bash,覆蓋了容器內的標準輸出。

dockerfile語法:

類型名說明
FROM指定基礎鏡像的信息,指定容器的操作系統。
MAINTAINER指定維護者信息(可有可無)
RUN在基礎鏡像上執行的命令,每個run就是一層,分層越多,鏡像就越大。
ENTRYPOINT設置容器運行時的命令(容器內部運行的主程序)
CMD可以指定容器運行時的默認命令(docker run /bin/bash后面加了其他的命令,cmd指令將會被覆蓋)
EXPOSE暴露端口(指定容器的運行端口)
ENV設置環境變量,環境變量可以被run命令使用(聲明容器運行需要的環境變量)
ADD復制,解壓。解壓不支持.zip和.tlr,tar.gz tar.bz2 支持url的地址解壓和復制(解壓)
COPY復制文件,不能解壓,而且只能復制本地文件。文件要和dockerfile在一個目錄.。(官方推薦)
VOLUME創建一個容器內的掛載點,既可以為宿主機掛載,也可以供容器掛載。
USER設置運行鏡像時使用的用戶或者UID(可以不加)
WORKDIR未后續指令設置的工作目錄。
ONBUILD這個鏡像可以被其他鏡像引用,需要這個命令。
ARG傳參,用于創建容器時,傳遞參數。ENV用于容器運行時設置環境變量。

CMDENTRYPOINT的區別

?cmd可以把參數傳給ENTRYPOINT的默認命令。
有多個entrypoint和多個cmd,只會運行最后一個(一個dockerfile當中只會有一個entrypoint和cmd)
?ENTRYPOINT指令不會被覆蓋,CMD的指令如果在docker run的后面加上輸出,會被覆蓋。
ENTRYPOINT和CMD的指令在容器啟動時執行,都會成為容器的主進程。主進程負責接受信號,處理容器的生命周期,主進程退出,容器也將終止運行。

RUN命令的優化:

核心作用:主要是減少鏡像的層數:把多個run命令寫一起。

&& 符號:

RUN yum-y install nginx && make -j 4 && make install
前一個命令執行成功,才會執行下一個命令。

; 符號:

RUN yum-y install nginx;make -j 4;make install
不管前一個命令執行成功,后面的命令都會執行。

||?符號:

RUN yum-y install nginx || make -j 4
如果前面的命令執行失敗,才會執行后面的操作

\:換行

RUN yum-y install nginx \?
&& make -j 4 \?
&& make install可讀寫更高

copy和add區別

copy和add都可以把本地文件復制到鏡像中,官方推薦復制用copy
add:可以解壓,add可以在復制文件之后會自動解壓,可以支持URL下載源文件,支持下載,但是不能解壓。通過URL拷貝的文件無法自動解壓。
copy:只能復制,不能解壓,而且只能是本地文件,不支持URL路徑

centos7 構建一個apache的dockerfile(編譯安裝):

所需的包放在與Dockerfile文件同一個目錄下

vim DockerfileFROM centos:7
MAINTAINER "this is my apache <LYW>"
RUN yum -y install gcc gcc-c++ make pcre pcre-devel expat-devel perl
ADD apr-1.6.2.tar.gz /opt
ADD apr-util-1.6.0.tar.gz /opt
ADD httpd-2.4.29.tar.bz2 /opt
RUN mv /opt/apr-1.6.2 /opt/httpd-2.4.29/srclib/apr && mv /opt/apr-util-1.6.0 /opt/httpd-2.4.29/srclib/apr-util &&\
cd /opt/httpd-2.4.29 &&\
./configure --prefix=/usr/local/httpd --enable-so --enable-rewrite --enable-charset-lite --enable-cgi &&\
make -j 4 && make install
EXPOSE 80
CMD ["/usr/local/httpd/bin/apachectl","-D","FOREGROUND"]

創建啟動容器

docker run -itd --name 容器 鏡像名:標簽例
docker run -itd --name test1 apache1:centos

centos7 構建一個apache的dockerfile(編譯安裝):

FROM centos:7
MAINTAINER "this is my nginx <LYW>"
RUN yum -y install gcc pcre-devel openssl-devel zlib-devel openssl openssl-devel
ADD nginx-1.22.0.tar.gz /opt
RUN useradd -M -s /sbin/nologin nginx &&\
cd /opt/nginx-1.22.0 &&\
mkdir -p /usr/local/nginx/run/ &&\
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module &&\
chown -R nginx.nginx /usr/local/nginx &&\
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ &&\
make -j 4 && make install
EXPOSE 80
RUN
CMD ["/usr/local/nginx/sbin","-g","daemon off;"]

創建啟動容器

docker run -itd --name nginx1 nginx:centos

操作中遇到的問題

1、yum安裝出錯

解決方法:重啟docker

systemctl restart docker.service

2、報錯:RUN中&&\與下一個命令一起

解決方案:將下一條命令run單寫
??? ? ??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213869.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213869.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213869.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

初識人工智能,一文讀懂強化學習的知識文集(5)

&#x1f3c6;作者簡介&#xff0c;普修羅雙戰士&#xff0c;一直追求不斷學習和成長&#xff0c;在技術的道路上持續探索和實踐。 &#x1f3c6;多年互聯網行業從業經驗&#xff0c;歷任核心研發工程師&#xff0c;項目技術負責人。 &#x1f389;歡迎 &#x1f44d;點贊?評論…

2023年運營級網賺網盤平臺搭建指南(包含源碼和教程)

源碼介紹 為什么要考慮自己搭建網盤呢&#xff1f;現如今&#xff0c;許多大型網盤平臺都對文件添加了各種限制&#xff0c;導致很多文件容易被刪除。而且&#xff0c;大部分網盤還會限制下載速度&#xff0c;如果沒有開通VIP會員&#xff0c;使用起來非常不便。 本指南提供了…

免費節假日api接口使用教程-聚合數據

免費節假日api接口使用教程-聚合數據 文章目錄 &#x1f4d6;訪問官網&#x1f330;例子完整代碼&#x1f58a;?最后總結 &#x1f4d6;訪問官網 聚合數據 官網地址 https://dashboard.juhe.cn/home 點擊api 接口文檔 &#x1f330;例子 get方式 curl -k -i -d “key您申請…

解決Git提交錯誤分支

如果 Git 提交到錯誤的分支&#xff0c;可以通過以下步驟將其轉移到正確的分支上&#xff1a; 1.檢查當前所在的分支&#xff0c;可以通過 git branch 命令查看。 git branch2.切換到正確的分支&#xff0c;可以通過 git checkout <正確的分支名> 命令進行切換。 git …

vue使用echarts顯示中國地圖

項目引入echarts以后&#xff0c;在頁面創建canvas標簽 引入一個公共js文件&#xff08;下面這段代碼就是china.js文件&#xff09; (function (root, factory) {if (typeof define function && define.amd) {// AMD. Register as an anonymous module.define([ex…

【EXCEL】折線圖添加垂直x軸的豎線|畫圖

相關鏈接&#xff1a;excel 添加垂直豎向直線 如何在Excel中添加水平和垂直線&#xff1f; 因為加輔助列有點不習慣&#xff0c;已經有分位數橫坐標了&#xff0c;想著試下用散點圖的誤差線畫 效果圖&#xff1a; 步驟&#xff1a; s1&#xff1a;隨便框選兩列數據–>插入(…

大創項目推薦 卷積神經網絡手寫字符識別 - 深度學習

文章目錄 0 前言1 簡介2 LeNet-5 模型的介紹2.1 結構解析2.2 C1層2.3 S2層S2層和C3層連接 2.4 F6與C5層 3 寫數字識別算法模型的構建3.1 輸入層設計3.2 激活函數的選取3.3 卷積層設計3.4 降采樣層3.5 輸出層設計 4 網絡模型的總體結構5 部分實現代碼6 在線手寫識別7 最后 0 前言…

深入理解JavaScript異步編程與Promise

異步編程的背景 在Web開發中&#xff0c;異步編程是為了解決JavaScript的單線程執行模型導致的阻塞問題。異步編程允許程序在等待某些操作完成的同時&#xff0c;繼續執行其他任務&#xff0c;提高了程序的效率和響應速度。 回調地獄與Promise的誕生 回調地獄是異步編程中一…

Unity中實現ShaderToy卡通火(一)

文章目錄 前言一、準備好我們的后處理基礎腳本1、C#&#xff1a;2、Shader&#xff1a; 二、開始逐語句對ShaderToy進行轉化1、首先&#xff0c;找到我們的主函數 mainImage2、其余的方法全部都是在 mainImage 函數中調用的方法3、替換后的代碼(已經沒報錯了&#xff0c;都是效…

智能優化算法應用:基于正余弦算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于正余弦算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于正余弦算法3D無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.正余弦算法4.實驗參數設定5.算法結果6.參考文…

基于單個參數線性回歸的機器學習代碼

本文為學習吳恩達版本機器學習教程的代碼整理&#xff0c;使用的數據集為https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes/blob/f2757f85b99a2b800f4c2e3e9ea967d9e17dfbd8/code/ex1-linear%20regression/ex1data1.txt 將數據集和py代碼放到同一目錄中&#xff0c;使…

2023最新八股文前端面試題

第一章 Css 1.說一下CSS的盒模型。 在HTML頁面中的所有元素都可以看成是一個盒子盒子的組成:內容content、內邊距padding、邊框border、外邊距margin盒模型的類型: 標準盒模型 margin border padding content IE盒模型 margin content(border padding) 控制盒模型的模式…

淘寶api接口測試方式(item_get-獲得淘寶商品詳情)

注冊淘寶開放平臺賬號&#xff1a;首先&#xff0c;你需要在淘寶開放平臺上注冊一個賬號&#xff0c;并創建一個應用。獲取App Key和Secret Key&#xff1a;在創建應用后&#xff0c;你會獲得App Key和Secret Key&#xff0c;這些憑證將用于調用API。了解淘寶商品詳情接口&…

【開源】基于Vue+SpringBoot的免稅店商城管理系統

文末獲取源碼&#xff0c;項目編號&#xff1a; S 069 。 \color{red}{文末獲取源碼&#xff0c;項目編號&#xff1a;S069。} 文末獲取源碼&#xff0c;項目編號&#xff1a;S069。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、系統設計2.1 功能模塊設計2.2 研究方法 三、系統…

什么是圖片懶加載(image lazy loading)?它的作用是什么?

聚沙成塔每天進步一點點 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 歡迎來到前端入門之旅&#xff01;感興趣的可以訂閱本專欄哦&#xff01;這個專欄是為那些對Web開發感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發…

如何使用vue開發vscode插件

以下是一個簡單的示例&#xff0c;演示如何使用Vue和VSCode的Webview API來開發一個簡單的VSCode插件&#xff1a; 創建一個VSCode插件項目 首先&#xff0c;你需要創建一個VSCode插件項目。你可以使用VSCode的插件生成器來快速創建一個基本的項目結構。從VSCode的命令面板中運…

【Flutter】graphic圖表實現tooltip一段時間后自動隱藏

概述 graphic圖表中提供了自定義tooltip的事件&#xff0c;可通過selections中on和clear配置手勢選項和可識別設備&#xff0c;默認情況下tooltip需要雙擊隱藏&#xff0c;但這并不符合我們的需求。通過調研發現&#xff0c;若想實現tooltip隔幾秒后隱藏&#xff0c;可通過Str…

3DMax物理畫筆物體填充放置繪制畫筆插件安裝使用方法

3DMax物理畫筆物體填充放置繪制畫筆插件&#xff0c;允許您使用筆刷以非常自然的方式用物品快速填充場景&#xff0c;并使用剛體模擬自動放置它們。 無論你是從事建筑、游戲電影還是商業。。。等等&#xff0c;你經常需要用一些物品為你的場景添加細節。手工放置它們是乏味的&…

Threejs發光閃爍提示特效

一、導語 發光閃爍特效應該在我們的項目中是經常需要去封裝的一個特效吧&#xff0c;一般用于點擊選擇&#xff0c;選中物體&#xff0c;或者一些特效加持于中心物體&#xff0c;物體碰撞檢測后的發光特效等等 二、分析 我們可以合理的使用后處理特效&#xff0c;上步驟&am…

hive查看數據庫出現org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

FAILED: HiveException java,lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 在啟動hive后&#xff0c;使用show databses查看數據庫時發現&#xff0c;出現了這個錯誤 情況一&#xff1a; 根據搜索查找以及…