国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【云原生 | 15】Dockerfile構(gòu)建鏡像實戰(zhàn)

這篇具有很好參考價值的文章主要介紹了【云原生 | 15】Dockerfile構(gòu)建鏡像實戰(zhàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??博主簡介
??????????云計算領(lǐng)域優(yōu)質(zhì)創(chuàng)作者
??????????2022年CSDN新星計劃python賽道第一名

??????????2022年CSDN原力計劃優(yōu)質(zhì)作者
??????????阿里云ACE認證高級工程師
??????????阿里云開發(fā)者社區(qū)專家博主

??交流社區(qū):CSDN云計算交流社區(qū)歡迎您的加入!

編寫 run.sh 腳本和 authorized_keys,階段六:零基礎(chǔ)入門云原生(Docker+k8s),云原生,docker,容器,運維,服務(wù)器?

目錄

1.使用Dockerfile創(chuàng)建鏡像

1.1?創(chuàng)建工作目錄

1.2?編寫run.sh腳本和authorized_keys文件

1.3?編寫Dockerfile?

1.4?創(chuàng)建鏡像?

?1.5?測試鏡像,運行容器

2. 鏡像的多級構(gòu)建

3.?Docker image Build 高級

3.1?鏡像 Cache 機制

3.2 Cache 機制的注意事項

3.3?命名方式的 stage?

3.4?Google 內(nèi)部精簡鏡像?


Dockerfile被認為是構(gòu)建Docker鏡像的標(biāo)準方式。人們常常會疑惑Dockerfile對于配置管理意味著什么。讀者也可能會有許多疑問(尤其是在對一些其他配置管理工具有些經(jīng)驗的時候),例如:
??如果基礎(chǔ)鏡像更改會發(fā)生什么?
??如果更改要安裝的包然后重新構(gòu)建會發(fā)生什么?
??它會取代Chef/Puppet/Ansible嗎?
事實上,Dockerfile很簡單:從給定的鏡像開始,Dockerfile為Docker指定一系列的shell命令和元指令,從而產(chǎn)出最終所需的鏡像。
Dockerfile提供了一個普通、簡單和通用的語言來配置Docker鏡像。使用 Dockerfile,用戶可以使用任何偏好的方式來達到所期望的最終狀態(tài)。用戶可以調(diào)用Puppet,可以從其他腳本里復(fù)制,甚至可以從一個完整的文件系統(tǒng)復(fù)制!
并不推薦使用 docker commit 的方法來構(gòu)建鏡像。相反,推薦使用被稱為Dockerfile 的定義文件和 docker build 命令來構(gòu)建鏡像。Dockerfile使用基本的基于DSL(Domain Specific Language))語法的指令來構(gòu)建一個Docker鏡像,我們推薦使用Dockerfile 方法來代替docker commit ,因為通過前者來構(gòu)建鏡像更具備可重復(fù)性、透明性以及冪等性。

1.使用Dockerfile創(chuàng)建鏡像

1.1?創(chuàng)建工作目錄

首先,創(chuàng)建一個sshd_ubuntu工作目錄:
$ mkdir sshd_ubuntu 
$ ls 
sshd_ubuntu
在其中,創(chuàng)建Dockerfile和run.sh文件:
$ cd sshd_ubuntu/ 
$ touch Dockerfile run.sh 
$ ls 
Dockerfile run.sh

1.2?編寫run.sh腳本和authorized_keys文件

腳本文件run.sh的內(nèi)容與前面一致:
#!/bin/bash 
/usr/sbin/sshd -D
在宿主主機上生成SSH密鑰對,并創(chuàng)建authorized_keys文件:
$ ssh-keygen -t rsa 
... 
$ cat ~/.ssh/id_rsa.pub >authorized_keys

1.3?編寫Dockerfile?

下面是Dockerfile的內(nèi)容及各部分的注釋,可以對比上一節(jié)中利用docker commit命令創(chuàng)建鏡像過程,所進行的操作基本一致:
#設(shè)置繼承鏡像
FROM ubuntu:14.04 
#提供一些作者的信息
MAINTAINER docker_user (user@docker.com) 
#下面開始運行更新命令
RUN apt-get update 
#安裝ssh服務(wù)
RUN apt-get install -y openssh-server 
RUN mkdir -p /var/run/sshd 
RUN mkdir -p /root/.ssh 
#取消pam限制
RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd 
#復(fù)制配置文件到相應(yīng)位置,并賦予腳本可執(zhí)行權(quán)限
ADD authorized_keys /root/.ssh/authorized_keys 
ADD run.sh /run.sh 
RUN chmod 755 /run.sh 
#開放端口
EXPOSE 22 
#設(shè)置自啟動命令
CMD ["/run.sh"]

1.4?創(chuàng)建鏡像?

在sshd_ubuntu目錄下,使用docker build命令來創(chuàng)建鏡像。這里需要注意最后還有一個“.”,表示使用當(dāng)前目錄中的Dockerfile:
$ cd sshd_ubuntu 
$ docker build -t sshd:Dockerfile .
如果大家使用Dockerfile創(chuàng)建自定義鏡像,那么需要注意的是Docker會自動刪除中間臨時創(chuàng)建的層,還需要注意每一步的操作和編寫的 Dockerfile中命令的對應(yīng)關(guān)系。
命令執(zhí)行完畢后,如果讀者可見“Successfully built XXX”字樣,則說明鏡像創(chuàng)建成功??梢钥吹?,以上命令生成的鏡像ID是 570c26a9de68。
在本地查看sshd:Dockerfile鏡像已存在:
$ docker images 
REPOSITORY       TAG         IMAGE ID         CREATED         VIRTUAL SIZE 
sshd             Dockerfile  570c26a9de68     4 minutes ago   246.5 MB 
sshd             ubuntu      7aef2cd95fd0     12 hours ago    255.2 MB 
busybox          latest      e72ac664f4f0     3 weeks ago     2.433 MB 
ubuntu           14.04       ba5877dc9bec     3 months ago    192.7 MB 
ubuntu           latest      ba5877dc9bec     3 months ago    192.7 MB

?1.5?測試鏡像,運行容器

使用剛才創(chuàng)建的sshd:Dockerfile鏡像來運行一個容器。
直接啟動鏡像,映射容器的22端口到本地的10122端口:
$ docker run -d -p 10122:22 sshd:Dockerfile 890c04ff8d769b604386ba4475253ae8c21fc92d60083759afa77573bf4e8af1 
$ docker ps 
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS     PORTS     NAMES 
890c04ff8d76     sshd:Dockerfile "/run.sh" 4 seconds ago Up 3 seconds   0.0.0.0:10122->22/tcp high_albattani
在宿主主機新打開一個終端,連接到新建的容器:
$ ssh 192.168.1.200 -p 10122 
root@890c04ff8d76:~#
效果與前面一致,鏡像創(chuàng)建成功。

2. 鏡像的多級構(gòu)建

Dockerfile > 鏡像(寫Dockerfile文件,然后docker build -t 鏡像名 Dockerfile文件路徑 =鏡像)

17.09以后的版本才支持,此版本之后的Ddockerfile文件中可以添加多個FROM,多級,前幾級都只是充當(dāng)基礎(chǔ)

編譯型語言才能支持多級構(gòu)建,如:golong語言,java語言等。解釋性語言如php,ruby,python等不支持多級構(gòu)建

即:如何制作鏡像時將 鏡像做到最小。

安裝 Docker 最新版軟件

yum install -y yum-utils device-mapper-persistent-data lvm2	#先安裝最新版docker所需的依賴及工具
yum-config-manager  --add-repo  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo		#配置yum源
yum install -y docker-ce	#安裝軟件
mkdir /etc/docker		#創(chuàng)建 /etc/docker 目錄
配置 daemon.注入以下內(nèi)容:
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "insecure-registries": ["harbor.hongfu.com"],
  "registry-mirrors": ["https://kfp63jaj.mirror.aliyuncs.com"]
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
systemctl daemon-reload && systemctl restart docker  #重啟docker服務(wù)
systemctl enable docker		#設(shè)為開機自啟

寫Dockerfile文件,在文件中可以寫多個FROM調(diào)用鏡像,還可以給每個被調(diào)用的鏡像重命名,方便后續(xù)的FROM調(diào)用前面的FROM

例如:Dockerfile文件

FROM golang:1.7.3
WORKDIR /go/src/github.com/sparkdevo/href-counter/
RUN go get -d -v golang.org/x/net/html
COPY app.go    .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/sparkdevo/href-counter/app .		#--from=0即調(diào)用第一個FROM
CMD ["./app"]

3.?Docker image Build 高級

3.1?鏡像 Cache 機制

Docker Daemnon 通過 Dockerfile 構(gòu)建鏡像時,當(dāng)發(fā)現(xiàn)即將新構(gòu)建出的鏡像與已有的某鏡像重復(fù)時,可以選擇放棄構(gòu)建新的鏡像, 而是選用已有的鏡像作為構(gòu)建結(jié)果,也就是采取本地已經(jīng) cache 的鏡像作為結(jié)果

3.2 Cache 機制的注意事項

ADD 命令與 COPY 命令:Dockerfile 沒有發(fā)生任何改變,但是命令A(yù)DD run.sh /?中 Dockerfile 當(dāng)前目錄下的 run.sh 卻發(fā)生了 變化,從而將直接導(dǎo)致鏡像層文件系統(tǒng)內(nèi)容的更新,原則上不應(yīng)該再使用cache。那么,判斷 ADD 命令或者 COPY 命令后 緊接 的文件是否發(fā)生變化,則成為是否延用cache 的重要依據(jù)。Docker 采取的策略是:獲取 Dockerfile 下內(nèi)容(包括文件 的部分 inode 信息),計算出一個唯一的 hash 值,若 hash 值未發(fā)生變化,則可以認為文件內(nèi)容沒有發(fā)生變化,可以使 用 cache 機制;反之亦然
RUN 命令存在外部依賴:一旦 RUN 命令存在外部依賴,如RUN apt-get update,那么隨著時間的推移,基于同一個基礎(chǔ)鏡像, 一年的 apt-get update 和一年后的 apt-get update, 由于軟件源軟件的更新,從而導(dǎo)致產(chǎn)生的鏡像理論上應(yīng)該不同。如果繼 續(xù)使用cache 機制,將存在不滿足用戶需求的情況。Docker 一開始的設(shè)計既考慮了外部依賴的問題,用戶可以使用參數(shù) --no-cache 確保獲取最新的外部依賴,命令為docker build --no-cache -t="my_new_image" .
樹狀的鏡像關(guān)系決定了,一次新鏡像的成功構(gòu)建將導(dǎo)致后續(xù)的 cache 機制全部失效:這一點很好理解,一旦產(chǎn)生一個新的鏡 像,同時意味著產(chǎn)生一個新的鏡像 ID,而當(dāng)前宿主機環(huán)境中肯定不會存在一個鏡像,此鏡像ID的父鏡像 ID 是新產(chǎn)生鏡像 的ID。這也是為什么,書寫 Dockerfile 時,應(yīng)該將更多靜態(tài)的安裝、配置命令盡可能地放在 Dockerfile 的較前位置

3.3?命名方式的 stage?

命名方式的 stage: 舊版本的 docker 是不支持 multi-stage 的,只有 17.05 以及之后的版本才開始支持
FROM golang:1.7.3 as builder
WORKDIR /go/src/github.com/sparkdevo/href-counter/
RUN go get -d -v golang.org/x/net/html
COPY app.go    .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /go/src/github.com/sparkdevo/href-counter/app .
CMD ["./app"]

3.4?Google 內(nèi)部精簡鏡像?

git clone https://github.com/GoogleContainerTools/distroless	#訪問不到用下方地址代理
hub.fastgit.org/GoogleContainerTools/distroless

????????結(jié)束語??????

為大家推薦一款刷題神奇?點擊鏈接訪問??途W(wǎng)https://www.nowcoder.com/link/jihexinliang260

各大互聯(lián)網(wǎng)大廠面試真題?;A(chǔ)題庫到進階題庫等各類面試題應(yīng)有盡有!

牛客網(wǎng)面經(jīng)合集,滿足大廠面試技術(shù)深度,快速構(gòu)建Java核心知識體系大廠面試官親授,備戰(zhàn)面試與技能提升,主要考點+主流場景+內(nèi)功提升+真題解析

編寫 run.sh 腳本和 authorized_keys,階段六:零基礎(chǔ)入門云原生(Docker+k8s),云原生,docker,容器,運維,服務(wù)器文章來源地址http://www.zghlxwxcb.cn/news/detail-837130.html

到了這里,關(guān)于【云原生 | 15】Dockerfile構(gòu)建鏡像實戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Dockerfile構(gòu)建鏡像與實戰(zhàn)

    Dockerfile構(gòu)建鏡像與實戰(zhàn)

    1)聯(lián)合文件系統(tǒng)(UnionFS) UnionFS(聯(lián)合文件系統(tǒng)) : Union文件系統(tǒng)(UnionFS)是一種分層、輕量級并且高性能的文件系統(tǒng),它支持對文件系統(tǒng)的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統(tǒng)下。AUFS、OberlayFS及Devicemapper都是一種UnionFS。 Union文件系統(tǒng)

    2024年02月08日
    瀏覽(26)
  • 【云原生】Docker鏡像的創(chuàng)建
Dockerfile 多階段構(gòu)建原理和使用場景

    【云原生】Docker鏡像的創(chuàng)建 Dockerfile 多階段構(gòu)建原理和使用場景

    創(chuàng)建鏡像有三種方法,分別為【基于已有鏡像創(chuàng)建】、【基于本地模板創(chuàng)建】以及【基于Dockerfile創(chuàng)建】。 (1)首先啟動一個鏡像,在容器里做修改 ?docker run -it --name web centos:7 /bin/bash ? ? #啟動容器 ?? ?yum install -y epel-release ?#安裝epel源 ?yum install -y nginx ? ? ? ? #安裝ng

    2024年02月12日
    瀏覽(30)
  • 【Dockerfile鏡像實戰(zhàn)】構(gòu)建LNMP環(huán)境并運行Wordpress網(wǎng)站平臺

    【Dockerfile鏡像實戰(zhàn)】構(gòu)建LNMP環(huán)境并運行Wordpress網(wǎng)站平臺

    公司在實際的生產(chǎn)環(huán)境中,需要使用Docker 技術(shù)在一臺主機上 創(chuàng)建LNMP服務(wù)并運行Wordpress網(wǎng)站平臺 。 然后對此服務(wù)進行相關(guān)的性能調(diào)優(yōu)和管理工作 主機 操作系統(tǒng) IP地址 主要軟件 宿主機 CentOS 7.3 x86_64 192.168.2.106 Docker 19.03 Nginx容器 172.18.0.10 Mysql容器 172.18.0.20 PHP容器 172.18.0.30 容

    2024年02月08日
    瀏覽(19)
  • windows部署python項目(以Flask為例)到docker,通過腳本一鍵生成dockerfile并構(gòu)建鏡像啟動容器

    windows部署python項目(以Flask為例)到docker,通過腳本一鍵生成dockerfile并構(gòu)建鏡像啟動容器

    這里使用 pipreqs 進行依賴庫的識別。使用 pipreqs 可以自動檢索到當(dāng)前項目下的所有組件及其版本,并生成 requirements.txt 文件。相比直接用pip freeze 命令,避免將整個python環(huán)境的依賴包寫入。 在項目的當(dāng)前目錄中執(zhí)行 pipreqs ./ --encoding=utf8 --force 這里使用的是一個基于flask項目,

    2023年04月08日
    瀏覽(35)
  • linux中編寫.sh腳本并賦權(quán)限問題

    以項目啟動、重啟、終止腳本為例: 步驟: 首先 vi start.sh 、 vi restart.sh 、 vi stop.sh 或者使用 vim 編輯器; 編輯內(nèi)容: 啟動: vi start.sh 重啟: vi restart.sh 關(guān)閉: vi stop.sh 保存并退出; chmod +x start.sh restart.sh stop.sh 賦予可執(zhí)行權(quán)限; 輸入 ./start.sh 、 ./restart.sh 、 ./stop.sh 執(zhí)行腳

    2024年02月04日
    瀏覽(19)
  • dockerfile ENTRYPOINT 執(zhí)行.sh腳本提示找不到文件或文件不存在 No such file or directory

    我這里記錄的是我遇到的一種特殊情況,如果你也遇到了這個問題,且都試了在百度中找到的解決方法還沒有解決可以看看是不是和我遇到的問題一樣。 在Dockerfile中,我ADD了兩個文件,一個是jar包,一個是一個執(zhí)行jar包的.sh文件 但是在使用命令: 就會提示 /bin/sh: 0: cannot

    2024年01月21日
    瀏覽(27)
  • 使用Dockerfile編寫源碼安裝Nginx鏡像

    ????????其實在Docker倉庫中,存在nginx容器鏡像,但是我們?yōu)槭裁催€有自己來編寫呢,是因為有的時候倉庫中的版本,并非我們在需要的版本鏡像,還有一點就因為安全問題,畢竟別人家的東西哪有自己家的東西用著安心呢。 ????????Dockerfile是使用源代碼構(gòu)建docker的鏡

    2024年02月10日
    瀏覽(19)
  • 【編寫DockerFile構(gòu)建自己的容器】

    【編寫DockerFile構(gòu)建自己的容器】

    一、創(chuàng)建自己的CentOS (1)、編寫自己的配置文件 (2)、生成目標(biāo)鏡像 docker build -f /home/dockerfile1/docker-centos -t docker-centos:1.0 . 命令: docker build -f 文件路徑 -t 鏡像名:【Tag】 (3)、測試運行 系統(tǒng)的原生鏡像 我們制作的鏡像 (4)、查看docker的構(gòu)建流程 docker history eeb6ee3f44

    2024年02月16日
    瀏覽(21)
  • 編寫Dockerfile制作Web應(yīng)用系統(tǒng)nginx鏡像

    編寫Dockerfile制作Web應(yīng)用系統(tǒng)nginx鏡像

    編寫Dockerfile制作Web應(yīng)用系統(tǒng)nginx鏡像,生成鏡像nginx:v1.1,并推送其到私有倉庫。具體要求如下: 基于centos基礎(chǔ)鏡像; 指定作者信息; 安裝nginx服務(wù),將提供的dest目錄(提供默認主頁index.html)傳到鏡像內(nèi),并將dest目錄內(nèi)的前端文件復(fù)制到nginx的工作目錄; 暴露80端口; 設(shè)置

    2024年02月11日
    瀏覽(20)
  • 【云原生】Docker鏡像的創(chuàng)建,Dockerfile

    【云原生】Docker鏡像的創(chuàng)建,Dockerfile

    創(chuàng)建鏡像有三種方法,分別為【基于已有鏡像創(chuàng)建】、【基于本地模板創(chuàng)建】以及【基于Dockerfile創(chuàng)建】。? 通過導(dǎo)入操作系統(tǒng)模板文件可以生成鏡像,模板可以從OPENVZ 開源項目下載,下載地址為:? ?openvz.org/?Download/template/precreated ?聯(lián)合文件系統(tǒng)(UnionFS )? Union文件系統(tǒng)是

    2024年02月15日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包