摘要:第三種是最簡(jiǎn)單的設(shè)置方法,設(shè)置了在容器容器時(shí)直接生效。中的是什么意思,是什么意思,后面跟個(gè)為又是什么意思表示交互,表示偽終端,是后臺(tái)運(yùn)行,是容器啟動(dòng)時(shí)執(zhí)行命令在容器中打開(kāi)一個(gè)進(jìn)程進(jìn)入。
項(xiàng)目背景
搭建一個(gè)基于springcloud的分布式博客系統(tǒng),已經(jīng)實(shí)現(xiàn)了基于eureka的配置中心和注冊(cè)中心,為了減少本地的內(nèi)存壓力,使用docker將配置中心注冊(cè)中心放到服務(wù)器上
初學(xué)者初探dockerfile中的WORKDIR的用處
docker build -t imageName path, 這里path指的是上下文路徑,如ADD COPY等命令都需要一個(gè)源路徑和目標(biāo)路徑,那么源路徑和目標(biāo)路徑的定位是相對(duì)于那個(gè)路徑呢? 源路徑就是相對(duì)于path,它只能訪問(wèn)path下的目錄,在path外的目標(biāo)是不能被訪問(wèn)到,目標(biāo)路徑相對(duì)的就是這個(gè)WORKDIR,表示當(dāng)前容器在運(yùn)行是訪問(wèn)的根路徑,比如RUN java -jar target.jar的時(shí)候,這個(gè)target在容器中的某個(gè)目錄下,通過(guò)WORKDIR定位到這個(gè)目錄,就能能通過(guò)RUN 來(lái)執(zhí)行到這個(gè)target.jar,而不需要在RUN中指定額外的相對(duì)或者絕對(duì)路徑定位這個(gè)jar文件
制作一個(gè)含有jdk環(huán)境的Dockefile
制作這么一個(gè)Dockerfile也不難,指定FROM centos, 通過(guò)add將jar解壓到容器目錄里面,最后通過(guò)ENTRYPOINT 指定java -jar && tail -f > /etc/null執(zhí)行springboot的jar包并保證進(jìn)程不退出。但jdk的環(huán)境變量配置需要注意,有三種寫法,一種通過(guò)RUN SED -i "$a" /etc/profile 將jdk的環(huán)境變量寫進(jìn)profile,第二種通過(guò)RUN echo "JAVA_HOME" >> /etc/profile,第三種直接通過(guò)dockerfile提供的ENV JAVA_HOME 來(lái)設(shè)置jdk的環(huán)境變量。前面兩種都是通過(guò)在/etc/profile中寫環(huán)境變量來(lái)完成,但是指定RUN source /etc/profile是行不通的,你需要進(jìn)入容器中source /etc/profile才能讓/etc/profile的環(huán)境變量生效。第三種是最簡(jiǎn)單的設(shè)置方法,設(shè)置了在容器容器時(shí)直接生效。
RUN命令中的&&命令連接
RUN command 一個(gè)RUN會(huì)產(chǎn)生一個(gè)中間的容器,那么一套相關(guān)的命令可以通過(guò)RUM command && command來(lái)進(jìn)行連接,換行可以指定 ,如果不指定直接換行連接command會(huì)出現(xiàn)一些語(yǔ)法錯(cuò)誤,這樣有什么好處呢?更加直觀?命令功能分塊集中?你覺(jué)得好就對(duì)了何必教科書般的說(shuō)出個(gè)之所以然來(lái),RUM cd /usr/local && npm install這條命令如果分開(kāi)寫成兩個(gè)RUN會(huì)如何? 導(dǎo)致install訪問(wèn)不到/usr/local的文件,它因?yàn)槭侵匦麻_(kāi)始一個(gè)容器,訪問(wèn)的路徑時(shí)WORKDIR指定的根目錄
CMD的ENTRYPOINT的區(qū)別
dockerfile中的一些指令都是可以通過(guò)docker run來(lái)覆蓋的,比如 -v 掛載可以覆蓋VOLUME -p 可以覆蓋EXPOSE指定的端口, -w可以覆蓋WORKDIR,-v 可以覆蓋ENV環(huán)境變量,這里的docker run imageId command 中的command可以覆蓋CMD,所以容器的啟動(dòng)后執(zhí)行的命令還是寫在ENTRYPOINT比較好,避免被覆蓋掉。
docker run中的-it是什么意思,-d是什么意思, 后面跟個(gè)command為/bin/bash又是什么意思
i表示交互,t表示偽終端,-d是后臺(tái)運(yùn)行,/bin/bash是容器啟動(dòng)時(shí)執(zhí)行/bin/bash命令在容器中打開(kāi)一個(gè)進(jìn)程進(jìn)入/bin/bash。解釋了但是沒(méi)有實(shí)踐又怎么知道是怎么個(gè)回事。那么如果不指定-d,會(huì)使容器在前臺(tái)執(zhí)行進(jìn)程,將控制臺(tái)打印這些執(zhí)行信息,如果指定了-d那么容器進(jìn)程在后臺(tái)執(zhí)行,不會(huì)打印執(zhí)行信息,也不用想辦法退出當(dāng)前容器執(zhí)行的進(jìn)程。一般運(yùn)行docker run以后直接在控制臺(tái)打印這個(gè)容器的id信息,但是我又想進(jìn)入容器怎么辦?docker exec嗎,我執(zhí)行進(jìn)去看看不想寫這個(gè)命令,這時(shí)候可以通過(guò)docker run -it /bin/bash 執(zhí)行完就能進(jìn)入到這個(gè)容器里面查看一些信息,這應(yīng)該就是所謂的交互
dockerfile通過(guò)docker build通過(guò)docker images可以找到這個(gè)鏡像,刪除dockerfile上下文會(huì)生效嗎
刪掉上下文以后,也是可以通過(guò)docker run ,docker restart 來(lái)運(yùn)行容器,需要注意一點(diǎn),docker restart會(huì)重新執(zhí)行一遍之前運(yùn)行的docker run命令,如果這時(shí)候掛載點(diǎn)剛好是dockerfile上下文目錄,那么docker restart以后發(fā)現(xiàn)宿主機(jī)找不到掛載目錄(已經(jīng)被刪掉),就會(huì)生成一個(gè)指定的掛載目錄名(之前在dockerfile run -v指定的名字),同時(shí)容器如果執(zhí)行一個(gè)jar包剛好在掛載目錄下,這時(shí)候就會(huì)找不到j(luò)ar文件,從而報(bào)錯(cuò),想要查看docker 容器執(zhí)行的日志可以通過(guò)docker logs imageId來(lái)完成
掛載目錄的理解
掛載目錄可以在dockerfile中通過(guò)volume指定,這只能指定容器的掛載目錄,宿主機(jī)的掛載目錄自動(dòng)生成,可以通過(guò)docker inspect imageId查看,也可以通過(guò)docker run -v path:path 指定,那么我在宿主機(jī)的掛載目錄中更改一些信息,它會(huì)立馬響應(yīng)到容器對(duì)應(yīng)掛載的目錄里面
dockerfile制作啟動(dòng)springboot項(xiàng)目的鏡像,如何更新jar包
最初認(rèn)為只要掛載好宿主機(jī)的存放jar的目錄到指定的容器目錄中,通過(guò)docker restart重新執(zhí)行dockerfile中的ENTRYPOINT java -jar target.jar命令來(lái)執(zhí)行這個(gè)容器的掛載目錄更新的target.jar,這樣就能完成jar的更新,發(fā)現(xiàn)行不通每次發(fā)布新的jar都需要通過(guò)docker build重新構(gòu)建鏡像,具體還需要實(shí)際操作總結(jié)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27881.html
摘要:第三種是最簡(jiǎn)單的設(shè)置方法,設(shè)置了在容器容器時(shí)直接生效。中的是什么意思,是什么意思,后面跟個(gè)為又是什么意思表示交互,表示偽終端,是后臺(tái)運(yùn)行,是容器啟動(dòng)時(shí)執(zhí)行命令在容器中打開(kāi)一個(gè)進(jìn)程進(jìn)入。 項(xiàng)目背景 搭建一個(gè)基于springcloud的分布式博客系統(tǒng),已經(jīng)實(shí)現(xiàn)了基于eureka的配置中心和注冊(cè)中心,為了減少本地的內(nèi)存壓力,使用docker將配置中心注冊(cè)中心放到服務(wù)器上 初學(xué)者初探 dock...
摘要:進(jìn)入發(fā)現(xiàn)運(yùn)行鏡像的容器有可能也是一個(gè)系統(tǒng)。每次使用都會(huì)創(chuàng)建一個(gè)容器,如果出現(xiàn)已經(jīng)存在的提示,請(qǐng)使用去移除這個(gè)容器。使用可以獲取權(quán)限容器如何查看準(zhǔn)確說(shuō)如何進(jìn)入到容器。這個(gè)就表示啟動(dòng)容器后啟動(dòng)保證有個(gè)進(jìn)行在運(yùn)行。 前言 這篇文章采用自問(wèn)自答的方式記錄自己的接觸Docker的所想與困惑. 學(xué)習(xí)方式 菜鳥教程過(guò)一遍 -> 實(shí)戰(zhàn)總結(jié) -> Docker官網(wǎng)查找細(xì)節(jié) 基礎(chǔ)知識(shí) Docker搜索鏡...
摘要:此命令下載測(cè)試鏡像并在容器中運(yùn)行它。國(guó)內(nèi)很多云服務(wù)商都提供了加速器服務(wù),例如阿里云加速器注冊(cè)用戶并且申請(qǐng)加速器,會(huì)獲得如這樣的地址。獲取鏡像阿里云鏡像庫(kù)上有大量的高質(zhì)量的鏡像可以用,這里我們就說(shuō)一下怎么獲取這些鏡像并運(yùn)行。 showImg(https://segmentfault.com/img/remote/1460000012924583); 這篇文章是我學(xué)習(xí) Docker 的記錄...
摘要:簡(jiǎn)介其實(shí)在這樣的一個(gè)云計(jì)算時(shí)代早就已被人眾所周知了它改變了傳統(tǒng)物理機(jī)的虛擬化方式使得機(jī)器的資源得到了高效的利用因?yàn)檫\(yùn)行在中的應(yīng)用實(shí)際上就是運(yùn)行在宿主機(jī)上的所以它是不需要進(jìn)行硬件層面的虛擬化以及運(yùn)行一個(gè)完整操作系統(tǒng)來(lái)支持于是在應(yīng)用代碼的執(zhí)行效 Docker簡(jiǎn)介 其實(shí)在這樣的一個(gè)云計(jì)算時(shí)代, Docker 早就已被人眾所周知了,它改變了傳統(tǒng)物理機(jī)的虛擬化方式,使得機(jī)器的資源得到了高效的利用...
摘要:圍繞軟件工程效率提升進(jìn)行一系列技術(shù)內(nèi)容分享,包括國(guó)內(nèi)外持續(xù)集成持續(xù)交付,持續(xù)部署自動(dòng)化測(cè)試等實(shí)踐教程工具與資源,以及一些工程師文化相關(guān)的程序員。劃分了數(shù)據(jù)庫(kù)日志安全監(jiān)控配置管理云服務(wù)等個(gè)大類,個(gè)工具。 CI Weekly 圍繞『 軟件工程效率提升』 進(jìn)行一系列技術(shù)內(nèi)容分享,包括國(guó)內(nèi)外持續(xù)集成、持續(xù)交付,持續(xù)部署、自動(dòng)化測(cè)試、 DevOps 等實(shí)踐教程、工具與資源,以及一些工程師文化相關(guān)...
閱讀 900·2023-04-26 01:37
閱讀 3373·2021-09-02 15:40
閱讀 966·2021-09-01 10:29
閱讀 2898·2019-08-29 17:05
閱讀 3427·2019-08-28 18:02
閱讀 1184·2019-08-28 18:00
閱讀 1493·2019-08-26 11:00
閱讀 2615·2019-08-26 10:27